如何应用具有超过4对点的透视变换?

3 python opencv image-processing python-imaging-library

我拍了一些照片,试图将它们映射到Google Maps的卫星图像上。通常,我只需要4对点就可以有效地应用透视变换。但是,由于两个原因,这在我的情况下没有用:

  1. 主要是因为Google卫星图像的分辨率较差(至少对我的应用程序而言差),这使得更难于确定与照片上的点相对应的确切点。
  2. 我认为Google的卫星图像不太完美地缝合在一起,这意味着即使使用了完美选择的点对,我也可能会有些偏离,因为Google图像上的点本身略有偏离。

结果,我想使用4个以上的点对透视变换进行最小二乘估计,以便获得更好的拟合度。但是,我不知道该怎么做。

我为此使用了带有PIL和/或OpenCV的Python,因此使用这些库的解决方案会有所帮助。

Vla*_*lad 5

同构比仿射稍微强大一点(它不保留平行线)。它需要4点或更多的点(findHomography使用RANSAC并使用线性解决方案选择其最佳的内线集;然后在最小二乘意义上对距离残差进行非线性优化)。您必须提供尽可能多的匹配项(> = 4),但要避免出现太多不正确的匹配项。

最小二乘的原始统计模型是ML(最大似然),该模型在存在噪声的情况下找到最佳解决方案。RANSAC补偿异常值的存在。尽管算法中没有任何东西可以补偿系统偏差。如果不能将它们建模为噪声或离群值,则解决方案定义不明确。如果内部值(在排除外部值之后)少于4,则找不到解决方案。