【问题标题】:Derive a transform matrix given an image and the transformed image?在给定图像和变换后的图像的情况下导出变换矩阵?
【发布时间】:2011-07-08 00:24:58
【问题描述】:

我正在从事一个涉及使用 A* 算法 (Thanks, Patrick Lester, for a great tutorial) 查找路径的项目。提供了一系列 PNG 地图,兴趣点由从 Web 服务接收的坐标指定,问题是显示这些点之间的路径。一开始有点灾难,因为各个级别不在同一个坐标系中,因此从一个级别移动到另一个级别涉及 x 和 y 坐标的无意移动,而不是仅更改 z - 使成本和启发式关卡变化非常奇怪,生成了一些非常不理想的路径。

为了解决这个问题,我可以将路径计算分解为每个级别的解决方案,并将移动到新级别作为中间的非计算步骤。相反,我选择让所有关卡地图成为一个坐标系的一部分,这样如果你在一个关卡上查看电梯,电梯就会出现在它到达的所有关卡上,并处于相同的 x 和 y 坐标。

唯一的问题是原始地图使用的兴趣点坐标。这些坐标与新地图上任何有意义的坐标都不匹配。虽然我确信路径现在运行良好,但系统作为一个整体并不是因为在地图系统中没有正确绘制路径的起点和终点。

为了从旧地图中获取新地图(都位于一个坐标空间中),每个地图都以一种简单且可重复的方式进行了转换。我想如果我得到一个坐标并对它应用与它所指的地图相同的变换,一切都会好起来的。地图被旋转​​、调整大小和平移。

给定一个图像和生成的变换图像,有没有办法推导出变换矩阵?这是一个 iPhone 项目,所以理想情况下我正在寻找一个 CGAffineTransform。对于每张地图,我都可以再次操作旧地图以获取新地图并记录正在完成的转换,但我很好奇这里是否有办法向后工作。

(读者——如果你能更好地标记这个问题,请做,这有点超出我的范围)

【问题讨论】:

  • 变换是仿射变换,所以不是严格意义上的矩阵
  • 我不清楚您是否有原始 POI 和转换后的 POI,因此您可以写下转换方程
  • 我在原始地图的坐标系中有 POI。我有原始地图和转换后的地图。我希望使用原始地图和转换后的地图(主要来自学术兴趣)得出转换,以便我可以将其应用于 POI,将它们转换为新地图的坐标系。如果可以派生转换,我可以从旧地图和新(转换后的)地图中获取一些任意 POI。

标签: iphone graphics 2d transform


【解决方案1】:

要找到一个变换,您需要至少等于参数数量的点坐标(原始和变换)。

如果您使用的是图像,而不是完美的几何实体,Least Squares 计算会好得多。通过使用更多的点,可以减少空间量化(即像素)引起的误差。

如果您在 Google 上搜索 "fit affine transformation least squares",您会找到用于此目的的多个函数的代码,包括 Python 中的 this one。

HTH!

【讨论】:

    【解决方案2】:

    我只是略读了您的问题 - 抱歉!但从标题和一点点数学来看,听起来应该有办法。使用一些矩阵代数:

    xA = B
    
    //Where A is the original image, B is the transform, and x is the transform matrix. 
    //Now to find x:
    
    x = B(A^-1)
    

    即将两边都乘以 A 的倒数可以找到 x,即变换矩阵(有关矩阵求逆的更多信息,请参见 here)。

    您将如何将其应用于 CGAffineTransform,或者在您的情况下找到图像的反转,我不太确定!但是上面的数学表明你所问的绝对是可行的。希望这会有所帮助!

    【讨论】:

    • OP 需要Affine 转换,而不是线性转换。虽然相似,但仿射变换的数学并不像线性变换那样简洁。 en.wikipedia.org/wiki/Affine_transformation
    • @belisarius 感谢您的纠正 - 我不知道是这样的!
    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多