我编写了一个图像裁剪代码。我使用imrect在图像上画一个矩形,然后使用getposition方法获得它的位置。我写了一个使用图像像素坐标进行裁剪操作的函数。如何创建getposition方法返回的值与图像像素坐标之间的关系我的裁剪代码如下,
[rnum cnum dim]=size(img);
for h=1:dim
for i=1:width
for j=1:height
negative(i,j,h)=img(xmin+i,ymin+j,h);
end
end
end
宽度,高度,xmin,ymin必须从getposition方法
就像你说的,imrect
的getPosition
方法将返回:
[xmin ymin width height] = getPosition( h );
前两个值是矩形的左上角,后两个值是矩形边长。如果你使用的是imrect
,这些应该都是像素坐标。
要根据这些位置值裁剪图像,您将从(xmin, ymin)
的左上角开始,然后转到(xmin+width-1, ymin+height-1)
的右下角。
您不应该使用for
循环来获取像素数据,您可以利用MATLAB的矢量化特性并执行以下操作:
CroppedImageMatrix = OriginalImageMatrix( [ymin : 1 : ymin+height-1],
[xmin : 1 : xmin+width-1],
: );
这将立即"裁剪"图像并将裁剪后的数据放入新的矩阵中。你可以这样做,因为你使用的是矩形裁剪,所有的指标都对应于创建一个矩形点阵。如果这不是矩形裁剪,那就更"棘手"了。
这对于彩色或灰度图像也是一样的,因为你不需要索引通道尺寸,你只需要从每个可用的通道中获取值。
注:- imrect
文档页面:http://www.mathworks.com/help/images/ref/imrect.html