bin*_*ang 14 opencv computer-vision
我使用OpenCV的cv::findHomographyAPI来计算两个平面图像的单应矩阵.匹配的关键点由SIFT提取并由BFMatcher匹配.据我所知,cv:findHomography使用RANSAC迭代找出最佳的四个对应点来获得单应矩阵.因此,我使用对象边缘的同一矩阵绘制所选择的四对点和计算出的轮廓.结果如链接:
https://postimg.cc/image/5igwvfrx9/
我们可以看到,RANSAC选择的匹配点是正确的,但轮廓显示单应性不准确.
但是这些测试表明,选定的匹配点和单应性都是正确的:
https://postimg.cc/image/dvjnvtm53/
我的猜测是,如果选定的匹配点太近,像素位置的小误差将导致单应矩阵的显着误差.如果四个点位于图像的角落,那么匹配点的移位4-6个像素仍然具有良好的单应矩阵.(根据同质坐标,我认为这是合理的,因为近平面的小误差会在很远的地方被放大)
我的问题是:
我猜对了吗?2.由于RANSAC迭代生成了四个匹配点,因此所有关键点的总误差最小.但是如何获得稳定的单应性,至少使轮廓的映射是正确的?该理论证明,如果找到平面中的四个对应点,则应计算单应矩阵,但是工程师工作中是否有任何技巧?
I think you're right, and the proximity of the 4 points does not help the accuracy of the result. What you observe is maybe induced by numerical issues: the result may be locally correct for these 4 points but becomes worse when going further.
However, RANSAC will not help you here. The reason is simple: RANSAC is a robust estimation procedure that was designed to find the best point pairs among many correspondences (including some wrong ones). Then, in the inner loop of the RANSAC, a standard homography estimation is performed.
你可以看到RANSAC是一种拒绝会导致错误结果的错误点对应的方法.
回到你的问题:
你真正需要的是获得更多积分.在您的示例中,您仅使用4点对应关系,这足以估计单应性.您将通过在目标图像上提供更多匹配来改善结果.然后问题变得过于确定,但OpenCV仍然可以找到最小二乘解决方案.此外,在点对应过程或某些点定位中存在一些错误,RANSAC将能够选择最佳的并且仍然给您可靠的结果.
如果RANSAC导致过度拟合大约4个点(在您的示例中似乎就是这种情况),请尝试通过增加ransacReprojThreshold参数来放宽约束.或者,你可以:
CV_LMEDS如果匹配错误很少,则强健中位数是一个不错的选择)只是为了扩展@sansuiso的答案,我同意:
如果您提供约100个与RANSAC的往来信件,则可能是您从中获得了4个以上的内线cvFindHomography。检查status输出参数。为了获得良好的单应性,您应该有四个以上的对应关系(请注意,四个对应关系始终会为您提供一个单应性),这些对应关系在图像周围分布良好并且不是线性的。实际上,您可以使用最小数量的inlier来确定所获得的单应性是否足够好。
请注意,RANSAC会找到一组一致的点,但是必须说该组是最好的点(重投影误差)的方式有点受限制。有一种类似于RANSAC的方法,称为MSAC,它使用略有不同的错误度量,将其检出。
以我的经验,坏消息是,大多数情况下几乎不可能获得100%的精确单应性。如果您有多个相似的框架,则可能会发现它们之间的单应性略有变化。
有一些技巧可以改善这一点。例如,在使用RANSAC获得单应性之后,可以使用它将模型投影到图像中,并寻找新的对应关系,这样您就可以找到另一个应更准确的单应性。
| 归档时间: |
|
| 查看次数: |
8319 次 |
| 最近记录: |