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

时间:2014-03-16 21:54:15

标签: python opencv image-processing python-imaging-library

我拍摄了一些我试图在Google地图上映射/转换为卫星图像的照片。通常,我只需要4对点来有效地应用透视变换。但是,由于两个原因,这在我的案例中没用:

  1. 主要是,谷歌卫星图像的分辨率很差(至少对我的应用程序来说很差),因此很难确定与我的照片相对应的精确点。
  2. 我认为谷歌的卫星图像拼接在一起略显不完美,这意味着即使选择了完美的点数,我也可能稍微偏离一点,因为谷歌图像上的点数本身略有偏差。
  3. 因此,我想使用超过4个点对透视变换进行最小二乘估计,以便我可以更好地拟合。但是,我不知道该怎么做。

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

1 个答案:

答案 0 :(得分:4)

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

最小二乘法的原始统计模型是在存在噪声的情况下找到最优解的ML(最大似然)。 RANSAC补偿异常值的存在。算法中没有任何内容可以补偿系统偏差。如果它们不能被建模为噪声或异常值,则解决方案没有明确定义。如果内部数(在拒绝异常值之后)小于4,则不会找到解。