画像の特定の領域、特に三角形の部分を抽出したいと思います。私の画像のサイズは です444x256x3
。次の図は、抽出する部分を示しています。
赤い点線でできた三角形(直角三角形)を抽出したいと思います。
頂点のセットからマスクを作成するために使用できるこの素晴らしい関数roipolyがあります。
BW = roipoly(I, c, r)
ベクトルc
とr
で記述されたポリゴンによって指定されたROIを返します。これらは、それぞれ各頂点の列と行のインデックスを指定します。c
同じサイズでr
ある必要があります。
それで、あなたが今まで持っていたのは:
imglena = imread('lena.png');
imshow(imglena)
siz = size(imglena);
c = [1 1 siz(2)/2];
r = [1 siz(1) siz(1) ];
line([c c(1)],[r r(1)],'color','r','LineWidth',4);
と三角形の頂点の列と行c
。r
これで、前述のマスクを使用して、元の画像の関心領域を抽出できます。
mask = roipoly(imglena,c,r);
imglena_cropped=bsxfun(@times, imglena, cast(mask,class(imglena)));
または、巨大な行列乗算の代わりに単純な論理インデックスを使用する、私が好む方法:
mask = repmat(roipoly(imglena,c,r),[1 1 3]);
imglena_cropped = 255/2*ones(size(imglena),class(imglena));
imglena_cropped(mask) = imglena(mask);
このようにして、結果の背景色をより簡単に制御することもできます。たとえば、灰色に設定しました。
最後に、結果の画像を次のようにトリミングできます。
imglena_cropped = imglena_cropped(min(r):max(r),min(c):max(c),:);