Matlab实现自动数字化仪时如何将图像坐标映射为实际坐标
图像坐标转折线实际数值的计算方法
你需要做的是线性比例映射,需要特别注意图像坐标系的y轴方向和常规笛卡尔坐标系相反(图像左上角为原点,y轴向下递增),具体实现步骤和公式如下:
前置已知参数(你已经获取到的信息)
- x轴参数:
- 图像中x轴起点的x坐标
x_img_start,对应的实际x最小值x_val_min - 图像中x轴终点的x坐标
x_img_end,对应的实际x最大值x_val_max
- 图像中x轴起点的x坐标
- y轴参数:
- 图像中y轴最低点(对应实际y最小值)的y坐标
y_img_start,对应的实际y最小值y_val_min - 图像中y轴最高点(对应实际y最大值)的y坐标
y_img_end,对应的实际y最大值y_val_max
- 图像中y轴最低点(对应实际y最小值)的y坐标
- 待转换的折线点图像坐标
(px, py)
你提供的参考图像如下:

具体转换公式
实际x值计算
x轴方向映射和常规逻辑一致,按像素占比换算即可:
x_val = x_val_min + (px - x_img_start) * (x_val_max - x_val_min) / (x_img_end - x_img_start)
实际y值计算
需要反转y轴方向再做比例换算:
y_val = y_val_min + (y_img_start - py) * (y_val_max - y_val_min) / (y_img_start - y_img_end)
Matlab 实现代码示例
% --------------- 请替换为你自己的实际参数 --------------- x_img_start = 50; % x轴起点的图像x坐标 x_img_end = 600; % x轴终点的图像x坐标 x_val_range = [0, 100]; % x轴实际数值范围[最小值, 最大值] y_img_low = 400; % y轴最低点(对应y最小值)的图像y坐标 y_img_high = 50; % y轴最高点(对应y最大值)的图像y坐标 y_val_range = [0, 50]; % y轴实际数值范围[最小值, 最大值] points_img = [281,70]; % 你提取到的所有折线点图像坐标,N行2列 % ------------------------------------------------------ x_val = x_val_range(1) + (points_img(:,1) - x_img_start) .* diff(x_val_range) ./ (x_img_end - x_img_start); y_val = y_val_range(1) + (y_img_low - points_img(:,2)) .* diff(y_val_range) ./ (y_img_low - y_img_high); % 输出转换后的坐标 points_val = [x_val, y_val]; disp('转换后的实际坐标:'); disp(points_val); % 直接重绘验证 figure;plot(x_val,y_val,'-o'); xlabel('X');ylabel('Y');title('重绘后的折线图');
特殊情况说明
如果你的坐标轴存在倾斜/透视变形,需要先对图像做仿射变换校正,再用上述公式计算即可。
内容的提问来源于stack exchange,提问作者Donald Bush
相关产品推荐
相关产品推荐

