2012-12-08 103 views
1

我想提取图像的某个区域,特别是它的三角形部分。我的图像的尺寸为444x256x3。下图说明了我想提取哪一部分:在MATLAB中裁剪直角三角形图像

enter image description here

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

+1

你能解释一下你的提取物直角三角形的意思。你想测量三角形的其他角度或边长吗?如果您使用'图像'绘制三角形,那么边缘是否与轴线平行,或者是否是其他方向的三角形?如果可能,你可以上传图片吗? – mythealias

+0

图片链接:http://i103.photobucket.com/albums/m160/akz218/123-1.jpg –

+0

那么这个三角形是如何定义的?你有角点?所有构成双方的点?三角形中的所有点? –

回答

0

有这不错的功能roipoly,你可以用它来从一组顶点创建遮罩:

BW = roipoly(I, c, r)返回由矢量cr描述的多边形,其中指定列和指定的投资回报率每个顶点的行索引。 cr必须是相同的大小。

你有那么到目前为止是:

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

enter image description here

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

enter image description here