我使用 OpenCV 的cv::findHomography
API 来计算两个平面图像的单应矩阵。匹配的关键点由 SIFT 提取并由 BFMatcher 匹配。据我所知,cv:findHomography
使用RANSAC迭代找出最好的四个对应点来得到单应矩阵。因此,我使用对象边缘的同质矩阵绘制具有计算轮廓的选定四对点。结果如链接:
https://postimg.cc/image/5igwvfrx9/
我们可以看到,RANSAC选择的匹配点是正确的,但是轮廓显示单应性不准确。
但是这些测试表明,选择的匹配点和单应性都是正确的:
https://postimg.cc/image/dvjnvtm53/
我的猜测是,如果选择的匹配点太接近,像素位置的小误差会导致单应矩阵的显着误差。如果这四个点在图像的角落,那么匹配的点移动4-6个像素仍然得到很好的单应矩阵。(根据齐次坐标,我认为是合理的,因为近平面的小误差会在远处放大)
我的问题是:
1.我猜对了吗?2.由于四个匹配点是由RANSAC迭代产生的,所有关键点的整体误差最小。但是如何获得稳定的单应性,至少使轮廓的映射是正确的?理论证明,如果找到一个平面内的四个对应点,就应该计算出单应矩阵,但是工程师工作有什么窍门吗?