1

我想提取图像的某个区域,特别是其中的三角形部分。我的图像大小444x256x3。下图说明了我要提取的部分:

在此处输入图像描述

我想提取由红色虚线(直角三角形)形成的三角形。

4

1 回答 1

0

有一个很好的函数roipoly可以用来从一组顶点创建一个蒙版:

BW = roipoly(I, c, r)返回由向量c和描述的多边形指定的 ROI r,它们分别指定每个顶点的列索引和行索引。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 回答