ドキュメンテーション

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

poly2mask

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

構文

BW = poly2mask(x, y, m, n)

説明

BW = poly2mask(x, y, m, n) は、バイナリ関心領域 (ROI) マスクの BW を、ベクトル x および y で表される ROI の多角形から計算します。BW のサイズは mn 列です。poly2mask は、多角形 (X,Y) の内側にある BW のピクセルを 1 に設定し、多角形の外側にあるピクセルを 0 に設定します。

多角形がまだ閉じられていない場合は、poly2mask によって自動的に閉じられます。

四角形多角形に関するメモ

入力多角形がピクセルの中心を通過する際、そのピクセルは多角形の内側にあると判断される場合と、外側にあると判断される場合があります (詳細は、「アルゴリズム」を参照してください)。ピクセルの四角形の集合を含む多角形を指定するには、ピクセルの中心ではなく境界ピクセルの外側エッジに、多角形のエッジを合わせます。

たとえば、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

クラス サポート

BW のクラスは logical です。

すべて折りたたむ

多角形の 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

アルゴリズム

すべて折りたたむ

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

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

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

  1. 各ピクセル (単位正方形) を 5 行 5 列のグリッドに分割します。詳細は、ピクセルを 5 行 5 列のサブピクセル グリッドに分割を参照してください。

  2. 頂点の位置をサブピクセル グリッドの交点に合わせて調節します。詳細は、頂点をサブピクセル グリッドに合わせて調節を参照してください。

  3. サブピクセル グリッドのエッジに沿って、調節後の各頂点から次の頂点へのパスを描きます。詳細は、調整された頂点間のパスを描くを参照してください。

  4. どの境界ピクセルが多角形の内側にあるかを判断します。それには、ピクセルの中心のサブピクセルが調節後の頂点間のパスによって定義された境界の内側にある場合、そのピクセルは多角形の内側にあると見なされる、という規則を使用します。詳細は、どのピクセルが領域内にあるかを判断を参照してください。

ピクセルを 5 行 5 列のサブピクセル グリッドに分割

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

頂点をサブピクセル グリッドに合わせて調節

poly2mask は、頂点がサブピクセル グリッド上に位置するように、多角形の各頂点を調整します。poly2maskx 座標と y 座標を四捨五入して最近傍のグリッド端を見つける方法に注意してください。これにより、この場合は元の ROI よりやや小さい、修正された 2 つ目の多角形が作成されます。次に図に一部を示します。

調整された頂点間のパスを描く

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

どのピクセルが領域内にあるかを判断

poly2mask では、どの境界ピクセルが多角形の内側にあるかを判別する際に、ピクセルの中心のサブピクセルが修正された多角形の内側にある場合そのピクセルは領域内にある、というルールを使用します。

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

参考

R2006a より前に導入

この情報は役に立ちましたか?