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
对可能已经在像素空间中了,因为没有图形/轴对象(因此也就没有对屏幕空间的转换)需要考虑。