1

画像の特定の領域、特に三角形の部分を抽出したいと思います。私の画像のサイズは です444x256x3。次の図は、抽出する部分を示しています。

ここに画像の説明を入力

赤い点線でできた三角形(直角三角形)を抽出したいと思います。

4

1 に答える 1

0

頂点のセットからマスクを作成するために使用できるこの素晴らしい関数roipolyがあります。

BW = roipoly(I, c, r)ベクトルcrで記述されたポリゴンによって指定された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);

ここに画像の説明を入力してください

と三角形の頂点の列と行cr

これで、前述のマスクを使用して、元の画像の関心領域を抽出できます。

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),:);

ここに画像の説明を入力してください

于 2012-12-08T16:59:24.747 に答える