Image MATLAB如何将轴坐标转换为像素坐标?

Image MATLAB如何将轴坐标转换为像素坐标?,image,matlab,pixel,coordinate,Image,Matlab,Pixel,Coordinate,将轴坐标(例如,plot获取的坐标或houghlines的point1和point2输出的坐标)转换为图像中像素坐标的首选方法是什么 我在Mathworks文档中看到了这个函数,但不清楚它是如何工作的。具体来说,第三个论点是什么?示例只是传入30,但不清楚该值来自何处。这些解释依赖于对其他几个函数的了解,我不知道 相关问题:建议使用poly2mask,这将适用于多边形,但如何对单个点或点列表执行相同的操作 该问题也链接到,但该代码引发了一个异常: Error using / Matrix d

将轴坐标(例如,
plot
获取的坐标或
houghlines
point1
point2
输出的坐标)转换为图像中像素坐标的首选方法是什么

我在Mathworks文档中看到了这个函数,但不清楚它是如何工作的。具体来说,第三个论点是什么?示例只是传入
30
,但不清楚该值来自何处。这些解释依赖于对其他几个函数的了解,我不知道

相关问题:建议使用
poly2mask
,这将适用于多边形,但如何对单个点或点列表执行相同的操作

该问题也链接到,但该代码引发了一个异常:

Error using  / 
Matrix dimensions must agree.

可能有一种我从未听说过的内在方式,但这应该不难从零开始做到

set(axes_handle,'units','pixels');
pos = get(axes_handle,'position');
xlim = get(axes_handle,'xlim');
ylim = get(axes_handle,'ylim');
使用这些值,可以轻松地从轴坐标转换为像素

x_in_pixels = pos(1) + pos(3) * (x_in_axes-xlim(1))/(xlim(2)-xlim(1));
%# etc...

上面使用
pos(1)
作为图中轴的x偏移量。如果您不关心这一点,请不要使用它。同样,如果您希望它位于屏幕坐标中,请添加通过
get(图_handle,'position')获得的位置的x偏移量。
考虑以下代码。它显示了如何从轴坐标转换为图像像素坐标

如果使用自定义扩展数据/YData位置而不是默认的
1:width
1:height
打印图像,则此选项特别有用。在下面的示例中,我在x/y方向上移动了100和200个像素

function imageExample()
    %# RGB image
    img = imread('peppers.png');
    sz = size(img);

    %# show image
    hFig = figure();
    hAx = axes();
    image([1 sz(2)]+100, [1 sz(1)]+200, img)    %# shifted XData/YData

    %# hook-up mouse button-down event
    set(hFig, 'WindowButtonDownFcn',@mouseDown)

    function mouseDown(o,e)
        %# get current point
        p = get(hAx,'CurrentPoint');
        p = p(1,1:2);

        %# convert axes coordinates to image pixel coordinates
        %# I am also rounding to integers
        x = round( axes2pix(sz(2), [1 sz(2)], p(1)) );
        y = round( axes2pix(sz(1), [1 sz(1)], p(2)) );

        %# show (x,y) pixel in title
        title( sprintf('image pixel = (%d,%d)',x,y) )
    end
end


(请注意,轴限制不是从
(1,1)
开始的,因此需要
axes2pix

这看起来很有希望。但是,如果我没有轴句柄呢?例如,
houghlines
接收一个二进制图像并返回包含(x,y)行的结构。这是我正在处理的具体案件。它们是如何做到的?因为
houghlines
本机是在图像(2D矩阵)上运行的,我想
X,Y
对可能已经在像素空间中了,因为没有图形/轴对象(因此也就没有对屏幕空间的转换)需要考虑。