我拍了一些照片,我试图在谷歌地图上映射/转换到卫星图像上。通常,我只需要4对点来有效地应用透视变换。但是,这在我的例子中没有用,原因有两个:
- 主要是,谷歌卫星图像的低分辨率(至少对我的应用程序来说很差)使我很难确定与照片上的点相对应的确切点。
- 我认为谷歌的卫星图像拼接在一起有点不完美,这意味着即使是完美选择的点对,我可能会有点偏离,因为谷歌图像上的点本身有点偏离。
因此,我想使用4个以上的点对透视变换进行最小二乘估计,这样我可以得到更好的拟合。然而,我不知道如何去做。
我使用Python与PIL和/或OpenCV,所以使用这些库的解决方案将是有帮助的。
同形比仿射更强大(它不保持平行线)。它需要4个点或更多(findHomography使用RANSAC并使用线性解决方案选择其最佳内线集;其次是最小二乘意义上的距离残差非线性优化。你必须提供尽可能多的匹配(>=4),但要尽量避免太多不准确的匹配。
最小二乘的原始统计模型是ML(最大似然),它在存在噪声的情况下找到最优解。RANSAC补偿了异常值的存在。然而,算法中没有任何东西可以弥补系统偏差。如果它们不能被建模为噪声或异常值,那么解决方案就不能很好地定义。如果(在拒绝异常值之后)内线数小于4,则无法找到解决方案。