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】:

如你所说,imrectgetPosition 方法将返回:

 [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 是的,很抱歉没有澄清这一点。从技术上讲,您得到的是一个“亚像素”坐标值(浮点值默认存储为doubles)。 getPosition 方法的内部使用屏幕位置来确定图像中的像素位置,并且由于屏幕具有比显示图像更高的分辨率,因此您最终会得到浮点精度,而不仅仅是整数像素位置。在将它们用作索引之前,您可以根据自己的喜好选择如何将这些值四舍五入为整数。 不是很清楚,能不能举个小例子解释一下

以上是关于matlab中通过getposition方法获取位置向量返回之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

在Matlab中通过imwrite将图像写入文件夹

在 MATLAB 中通过二进制训练数据训练决策树

是否可以在 Matlab 中通过引用来解析结构?

在matlab中通过带有未知参数的可变限制积分拟合数据

MATLAB教程案例93在MATLAB中通过mex将C语言转化为matlab可执行的mexw64文件

matlab中通过ode函数求解常微分方程附加简单的钟摆模型