从轴坐标(例如plot
所取的那些或point1
的{{1}}和point2
中的输出)转换为像素坐标的首选方式是什么?一个图像?
我在Mathworks文档中看到了函数axes2pix,但目前还不清楚它是如何工作的。具体来说,第三个论点是什么?这些示例只是传入houghlines
,但不清楚这个值来自哪里。解释取决于对其他几个功能的了解,我不知道。
相关问题:Axis coordinates to pixel coordinates?建议使用30
,它适用于多边形,但如何针对单个点或点列表执行相同的操作?
该问题也链接到Scripts to Convert Image to and from Graph Coordinates,但该代码引发了异常:
poly2mask
答案 0 :(得分:2)
请考虑以下代码。它显示了如何从轴坐标转换为图像像素坐标。
如果使用默认1:width
和1: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
(注意轴限制不是从(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')