开始情况: 我有一个扭曲的图像,例如带有网格的地理地图。失真就是这样的:在地图的顶部10°地理纬度对应30 px,但在图像的底部10°纬度仅对应10 px。
目的: 现在我想缩放图像,10°纬度对应于整个图像的20 px。
让我更多地说明问题:
开始状态:整体高度为100像素的图片:
区域1 - 30像素高度
区域2 - 25像素高度
区域3 - 20像素高度
区域4 - 15像素高度
区域5 - 10像素高度
目标:图像整体高度保持不变(100像素),但现在区域应该是相同的高度:
区域1 - 20像素高度
区域2 - 20像素高度
区域3 - 20像素高度
区域4 - 20像素高度
区域5 - 20像素高度
如果用imagemagick以外的其他软件可以实现这一点,也欢迎提示。 感谢您提前回复。
答案 0 :(得分:0)
仅使用像ImageMagick这样的光栅图像处理工具无法正确地重新缩放和重新投影地图图像。您需要一种能够计算正确图像变换的工具,同时考虑到地图投影的变化。您还需要有关图像的投影元数据,可以是图像本身(如果它是某种格式,如GeoTIFF),也可能需要关联的元数据头文件,如果它是原始光栅格式,如PNG或JPEG。
我建议您查看地理空间数据抽象库GDAL。它是一个包含命令行工具的库,允许您正确地重新投影和转换多种栅格地图图像。
答案 1 :(得分:0)
现在我发现了我的起始地图和我想要的地图之间的转换功能:
f(y_px) = 200 (-0.5 + 0.01 * sqrt(150 + y_px))
这可以通过任何适配软件来完成。
现在我使用“-fx”参数和“自定义矩阵”成功转换了地图:
convert -monitor -size 100x100 xc: map-starting.png \
-virtual-pixel Black -interpolate NearestNeighbor \
-fx "xx = i ;
yy = 200 (-0.5 + 0.01 * sqrt(150+ j));
v.p{xx,yy}" \
map-aim.png
map-aim.png是我想要的;)