【问题标题】:Non-linear image scaling非线性图像缩放
【发布时间】:2015-07-20 17:09:03
【问题描述】:

起始情况: 我有一个扭曲的图像,例如带有网格的地理地图。失真就是这样的:在地图顶部10°地理纬度对应30 px,但在图像底部10°纬度仅对应10 px。

目标: 现在我想缩放图像,10° 纬度对应于整个图像的 20 像素。

让我再稍微说明一下这个问题:

起始位置:总高度为 100 px 的图像:

区域 1 - 30 像素高度

区域 2 - 25 像素高度

区域 3 - 20 像素高度

区域 4 - 15 像素高度

区域 5 - 10 像素高度

目标:图像整体高度保持不变(100 px),但现在区域应该是相等的高度:

区域 1 - 20 像素高度

区域 2 - 20 像素高度

区域 3 - 20 像素高度

区域 4 - 20 像素高度

区域 5 - 20 像素高度

如果这可以通过 imagemagick 以外的其他软件实现,也欢迎提供提示。 感谢您提前回复。

【问题讨论】:

标签: imagemagick


【解决方案1】:

现在我发现了我的起始地图和我想要的地图之间的转换函数:

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 是我想要的 ;)

【讨论】:

    【解决方案2】:

    仅使用 ImageMagick 之类的光栅图像处理工具无法正确重新缩放和重新投影地图图像。您需要一个能够在考虑地图投影变化的情况下计算适当的图像转换的工具。您还需要有关图像的投影元数据,无论是在图像本身(如果它是某种格式,例如 GeoTIFF)中,或者如果它是原始光栅格式(例如 PNG 或 JPEG),则带有关联的元数据头文件。

    我建议您查看地理空间数据抽象库GDAL。它是一个包含命令行工具的库,可让您正确地重新投影和转换多种栅格地图图像。

    【讨论】:

    • 好吧,比方说,我知道投影函数各自的反函数。
    • 除非您编辑问题以指定原始投影以及地图元数据的存储方式,否则无法更具体。
    • 错误!查看我的解决方案!
    • 您的“解决方案”不保留从像素坐标到纬度和经度的正确缩放。请参阅 stackoverflow.com/questions/14329691/…stackoverflow.com/questions/5983099/…。如果你不关心,你应该编辑你的问题,这样说。
    猜你喜欢
    • 2017-12-28
    • 1970-01-01
    • 2021-11-16
    • 2015-01-11
    • 1970-01-01
    • 2011-06-20
    • 2023-03-05
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多