2011-07-08 61 views
0

我正在研究一个涉及使用A *算法(Thanks, Patrick Lester, for a great tutorial)查找路径的项目。提供了一系列PNG地图,感兴趣的地点由Web服务接收的坐标指定,问题是显示这些地点之间的路径。起初有点灾难,因为各个层次不在同一个坐标系统中,所以从一个层面移动到另一个层面牵涉到无意中在x和y坐标上的移动,而不是仅仅改变z - 使得成本和启发式电平变化完全是奇怪的,有一些非最优路径被生成。导出给定图像和变换图像的变换矩阵?

要解决这个问题,我可以将路径计算分解为每个级别的解决方案,并将其作为中间的未计算的步骤移动到新的级别。相反,我选择将所有的水平贴图都作为一个坐标系统的一部分,这样,如果您查看一个水平面上的升降梯,升降台会出现在它到达相同x和y坐标的所有水平面上。

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

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

给定一个图像和生成的变换图像是否有一种方法来导出变换矩阵?这是一个iPhone项目,非常理想,我正在寻找CGAffineTransform。对于每张地图,我都可以再次操作旧地图以获取新地图并记录正在完成的转换,但我很好奇是否有办法在此处倒退。

(读者 - 如果你能帮助标签这个问题更好行行好,这是出了一点我的面积)

+0

这个转换是一个仿射的转换,所以它不是严格意义上的矩阵 –

+0

我不清楚你是否有原始的兴趣点和转换的,所以你可以写下转换的方程式或不是 –

+0

我在原始地图的坐标系中具有POI。我有原始地图以及转换后的地图。我希望使用原始和变换后的地图(大部分来自学术兴趣)推导出变换,以便将其应用于POI,将它们转换为新地图的坐标系。如果可以导出变换,我可以从旧的和新的(变换的)地图中获取一些任意的POI。 –

回答

1

为了找到一个转换,您需要最小的点坐标(原始和转换)等于参数的数量。

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

如果你的谷歌为"fit affine transformation least squares"你会发现用于这个目的的几个函数的代码,包括Python中的this one

HTH!

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,或者在您的案例中查找图像的反转,我不太确定!但上面的数学表明,你问的是绝对可行的。希望这可以帮助!

+1

OP需要一个“仿射”变换,而不是线性变换。虽然类似,但仿射变换的数学并不像线性变换那么简单。 http://en.wikipedia.org/wiki/Affine_transformation –

+0

@belisarius感谢纠正我 - 我不知道是这种情况! –