Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
利用matlab中的getposition方法得到位置向量与返回值之间的关系_Matlab_Image Processing - Fatal编程技术网

利用matlab中的getposition方法得到位置向量与返回值之间的关系

利用matlab中的getposition方法得到位置向量与返回值之间的关系,matlab,image-processing,Matlab,Image Processing,我写了一个图像裁剪代码。我使用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,y

我写了一个图像裁剪代码。我使用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)
的右下角

对于循环,您不应使用
来获取像素数据,您可以利用MATLAB的矢量化特性,并执行以下操作:

CroppedImageMatrix = OriginalImageMatrix( [ymin : 1 : ymin+height-1],
                                          [xmin : 1 : xmin+width-1],
                                          : );
这将立即“裁剪”图像,并将裁剪后的数据放入新矩阵中。之所以可以这样做,是因为您使用的是矩形裁剪,并且所有索引都对应于创建点的矩形晶格。如果这不是一个长方形的作物,它将是“棘手的”

这同样适用于彩色或灰度图像,因为您不需要索引通道维度,只需从每个可用通道获取值


另请注意,
imrect

谢谢:)的文档页我得到xmin和ymin的浮点值。所以我想知道它们是否真的是像素坐标?@ChamathSajeewa是的,很抱歉没有澄清这一点。从技术上讲,您得到的是一个“亚像素”坐标值(浮点值默认存储为
double
s)。
getPosition
方法的内部使用屏幕位置来确定图像中的像素位置,并且由于屏幕的分辨率高于显示的图像,因此最终得到的是浮点精度,而不是整数像素位置。在将这些值用作索引之前,您可以根据自己的偏好选择如何将这些值舍入为整数。不太清楚,您能用一个小例子解释一下吗