PIL中的像素轴转换
Pixel axis conversion in PIL
我正在尝试构建一个程序来自动从地块图像中提取数据。我几乎拥有它,但挂断了从像素坐标定义所需的轴。例如,如果正在使用此图像:
我可以找到数据点,但这些点参考了图像大小,看起来像这样:
进行此转换的最佳方法是什么?
这可以通过一些数学运算来完成。您必须将坐标从像素转换为绘图值,如下所示:
- 将域压缩为 0...1
- 镜像(只针对y轴,因为像素y坐标运行从上到下,plot坐标从下到上)
- 将域扩展到图上的范围
例如,取您的一个数据点,其像素坐标为 (80, 150),从图中我可以看到它在图上的坐标是 (24, 8.75)。
我们先做 y 坐标,必须从 150 映射到 8.75:
- 除以图像的 y 范围 (200):150/200 = 0.75
- 镜像:1 - 0.75 = 0.25
- 展开:0.25 * 35(图的 y 范围)= 8.75
然后是 x 坐标,不需要镜像:
- 80/300 = 0.2666
- 0.2666 * 90 = 24
我不确定轴是否是您图像的一部分,如果是,您可能还必须应用一些偏移量来解决它们。
我正在尝试构建一个程序来自动从地块图像中提取数据。我几乎拥有它,但挂断了从像素坐标定义所需的轴。例如,如果正在使用此图像:
我可以找到数据点,但这些点参考了图像大小,看起来像这样:
进行此转换的最佳方法是什么?
这可以通过一些数学运算来完成。您必须将坐标从像素转换为绘图值,如下所示:
- 将域压缩为 0...1
- 镜像(只针对y轴,因为像素y坐标运行从上到下,plot坐标从下到上)
- 将域扩展到图上的范围
例如,取您的一个数据点,其像素坐标为 (80, 150),从图中我可以看到它在图上的坐标是 (24, 8.75)。
我们先做 y 坐标,必须从 150 映射到 8.75:
- 除以图像的 y 范围 (200):150/200 = 0.75
- 镜像:1 - 0.75 = 0.25
- 展开:0.25 * 35(图的 y 范围)= 8.75
然后是 x 坐标,不需要镜像:
- 80/300 = 0.2666
- 0.2666 * 90 = 24
我不确定轴是否是您图像的一部分,如果是,您可能还必须应用一些偏移量来解决它们。