在给定图像和变换后的图像的情况下导出变换矩阵?

时间:2011-07-08 00:24:58

标签: iphone graphics 2d transform

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

为了解决这个问题,我可以将路径计算分解为每级解决方案,并将其作为中间非计算步骤移至新级别。相反,我选择将所有水平地图放在一个坐标系的一部分,这样如果你在一个水平上看一个升力,那么它在相同的x和y坐标处到达的所有水平都会出现升力。

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

要从旧地图中获取新地图(均位于一个坐标空间中),每个地图都以简单且可重复的方式进行转换。我想如果我得到一个坐标并应用与它所引用的地图相同的变换,一切都会很好。地图会旋转,调整大小并翻译。

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

(读者 - 如果你能帮助更好地标记这个问题,那么,这有点偏离我的区域)

2 个答案:

答案 0 :(得分:1)

要查找变换,您需要最少的点坐标(原始和变换)等于参数的数量。

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

如果你谷歌搜索"fit affine transformation least squares",你会找到用于此目的的多个函数的代码,包括Python中的this one

HTH!

答案 1 :(得分:0)

我只是略读你的问题 - 对不起!但是从标题和一些数学,听起来应该有一种方法。使用一些矩阵代数:

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,或者在您的情况下找到图像的反转,我不太确定!但上面的数学表明你所要求的绝对是可行的。希望这有帮助!