我想提取图像的某个区域,特别是其中的三角形部分。我的图像大小444x256x3
。下图说明了我要提取的部分:
我想提取由红色虚线(直角三角形)形成的三角形。
有一个很好的函数roipoly可以用来从一组顶点创建一个蒙版:
BW = roipoly(I, c, r)
返回由向量c
和描述的多边形指定的 ROIr
,它们分别指定每个顶点的列索引和行索引。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),:);