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

时间:2012-06-28 02:41:44

标签: image matlab pixel coordinate

从轴坐标(例如plot所取的那些或point1的{​​{1}}和point2中的输出)转换为像素坐标的首选方式是什么?一个图像?

我在Mathworks文档中看到了函数axes2pix,但目前还不清楚它是如何工作的。具体来说,第三个论点是什么?这些示例只是传入houghlines,但不清楚这个值来自哪里。解释取决于对其他几个功能的了解,我不知道。

相关问题:Axis coordinates to pixel coordinates?建议使用30,它适用于多边形,但如何针对单个点或点列表执行相同的操作?

该问题也链接到Scripts to Convert Image to and from Graph Coordinates,但该代码引发了异常:

poly2mask

2 个答案:

答案 0 :(得分:2)

请考虑以下代码。它显示了如何从轴坐标转换为图像像素坐标。

如果使用默认1:width1:height以外的自定义XData / YData位置绘制图像,此功能尤其有用。在下面的示例中,我在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

screenshot

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

答案 1 :(得分:0)

可能有一种我没有听说过的内置方式,但这从头开始并不难做到......

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(figure_handle,'position')

获得的位置的x偏移量