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