在MATLAB中裁剪一个直角三角形图像

时间:2012-12-08 08:41:45

标签: image matlab

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

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

  

BW = roipoly(I, c, r)返回由矢量cr描述的多边形指定的ROI,它们分别指定每个顶点的列和行索引。 <{1}}和c的大小必须相同。

所以你到现在所做的是:

r

enter image description here

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

enter image description here