ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

poly2mask

関心領域 (ROI) の多角形を領域マスクに変換

説明

BW = poly2mask(xi,yi,m,n) はバイナリの関心領域 (ROI) マスク BWmn 列のサイズで、頂点が xiyi 座標である ROI 多角形から計算します。poly2mask は多角形が閉じられていない場合、自動的に閉じます。

関数 poly2mask は、多角形の内側にあるピクセルを 1 に設定し、多角形の外側にあるピクセルを 0 に設定します。ROI に一部が囲まれたピクセルの分類の詳細は、アルゴリズムを参照してください。

すべて折りたたむ

多角形の x 座標と y 座標を指定します。

x = [63 186 54 190 63];
y = [60 60 209 204 60];

イメージのサイズを指定してマスクを作成します。

bw = poly2mask(x,y,256,256);

マスクを表示し、多角形の周りにラインを描画します。

imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
hold off

x 座標と y 座標に 2 組のランダムな点を定義します。

x = 256*rand(1,4);
y = 256*rand(1,4);
x(end+1) = x(1);
y(end+1) = y(1);

マスクを作成します。

bw = poly2mask(x,y,256,256);

マスクを表示し、多角形の周りにラインを描画します。

imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)
hold off

入力引数

すべて折りたたむ

多角形の頂点の x または y 座標。数値ベクトルとして指定します。xi および yi の長さは一致しなければなりません。

データ型: double

マスク内の行数。正の整数として指定します。

データ型: double

マスク内の列数。正の整数として指定します。

データ型: double

出力引数

すべて折りたたむ

バイナリ イメージ。mn 列の logical 行列として返されます。

データ型: logical

ヒント

  • ピクセルの四角形の集合を含む多角形を指定するには、ピクセルの中心ではなく境界ピクセルの外側エッジに、多角形のエッジを合わせます。

    たとえば、4 列目から 10 列目、4 行目から 10 行目にあるピクセルが含まれるようにするには、次のようにして多角形の頂点を指定します。

    x = [4 10 10 4 4];
    y = [4 4 10 10 4];
    mask = poly2mask(x,y,12,12)
    mask =
    
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     1     1     1     1     1     1     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0

    この例では、多角形は境界ピクセルの中心を通過し、目的の境界ピクセルのうちいくつかのみが多角形の内側にある 4 行 4 列目のピクセルは多角形の内側にない) と判定される結果となりました。これらの要素が多角形に含まれるようにするには、次の例のように、分数値を使用して 4 番目の行 (3.5) と 10 番目の行 (10.5) の外側エッジと、4 番目の列 (3.5) と 10 番目の列 (10.5) の外側エッジを頂点として指定します。

    x = [3.5 10.5 10.5 3.5 3.5];
    y = [3.5 3.5 10.5 10.5 3.5];
    mask = poly2mask(x,y,12,12)
    mask =
    
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     1     1     1     1     1     1     1     0     0
         0     0     0     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     0     0     0     0

アルゴリズム

関心領域 (ROI) のマスクを作成する場合、poly2mask は、どのピクセルが領域に含まれるかを判断しなければなりません。領域のエッジにあるピクセルの一部分しか境界線上にない場合は、これを判断するのが難しくなる場合があります。次の図は三角形の関心領域を表したもので、ROI の頂点の 1 つを拡大して調べています。この図は、関心領域の境界でピクセルの一部がどのように覆われるかを示しています。

ROI のエッジにあるピクセルの一部分のみが境界上にある

どのピクセルが領域内にあるかを判断するために、poly2mask は次のアルゴリズムを使用します。

  1. 各ピクセルを 5 行 5 列のサブピクセル グリッドに分割します。

    この図は、先に 5 行 5 列のサブピクセル グリッドで示した ROI の頂点を含んでいるピクセルを示しています。

  2. 頂点の位置を調整します。

    poly2mask は、サブピクセル グリッド上の最も近い交点に、多角形の各頂点を移動します。poly2maskx 座標と y 座標を丸めて最近傍のサブピクセル グリッドのコーナーを見つける方法に注意してください。これにより 2 番目の変更された多角形が作成されます。図に、変更された頂点を赤の "X" で示します。

  3. 調整された頂点間のパスを描きます。

    poly2mask は、サブピクセル グリッドのエッジに沿って、調節後の各頂点から次の頂点へのパスを作成します。図では、この変更された多角形の一部が太い実線で示されています。

  4. どの境界ピクセルが多角形の内側にあるかを判断します。

    poly2mask は、どの境界ピクセルが多角形の内側にあるかを、次のように判断します。ピクセルの中心のサブピクセルが調節後の頂点間のパスによって定義された境界の内側にある場合、そのピクセルは領域の内側にあると見なされます。

    次の図では、ROI の境界上にあるピクセルの中心のサブピクセルは、濃いグレーで淡色表示されています。多角形の内側にあるピクセルは、薄いグレーで淡色表示されています。頂点を含んでいるピクセルは ROI の一部ではないことに注意してください。これは、その中心のピクセルが修正後の多角形の内側にないためです。

R2006a より前に導入