matlab中通过getposition方法获取位置向量返回之间的关系
Posted
技术标签:
【中文标题】matlab中通过getposition方法获取位置向量返回之间的关系【英文标题】:Get a relationship between position vector return by getposition method in matlab 【发布时间】:2014-07-24 02:43:17 【问题描述】:我写了一个图像裁剪代码。我用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
width,height,xmin,ymin 必须从 getposition 方法中找到
【问题讨论】:
【参考方案1】:如你所说,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
【讨论】:
谢谢 :) 我得到了 xmin 和 ymin 的浮点值。所以我想知道它们是否真的是像素坐标? @ChamathSajeewa 是的,很抱歉没有澄清这一点。从技术上讲,您得到的是一个“亚像素”坐标值(浮点值默认存储为double
s)。 getPosition
方法的内部使用屏幕位置来确定图像中的像素位置,并且由于屏幕具有比显示图像更高的分辨率,因此您最终会得到浮点精度,而不仅仅是整数像素位置。在将它们用作索引之前,您可以根据自己的喜好选择如何将这些值四舍五入为整数。
不是很清楚,能不能举个小例子解释一下以上是关于matlab中通过getposition方法获取位置向量返回之间的关系的主要内容,如果未能解决你的问题,请参考以下文章