2012-06-15 56 views
21

当使用OpenCV的findHomography函数来估计两组点之间的单应性时,即使使用RANSAC或LMEDS,由于输入点内的离群值,您有时会得到不良的单应性。如何判断单应性矩阵是否可以接受?

// opencv java example: 
Mat H = Calib3d.findHomography(src_points, dst_points, Calib3d.RANSAC, 10); 

如何判断生成的3x3单应性矩阵是否可以接受?

我在这里寻找答案在这里在Stackoverflow和谷歌,无法找到它。

我发现这篇文章,但它是一个有点神秘对我说:

"The geometric error for homographies"

+2

查看问题http://stackoverflow.com/questions/10972438/detecting-garbage-homographies-from-findhomography-in-opencv/10981249#10981249 –

+0

如果您的相机移动受限,您可以尝试分解您的单应性和测试缩放比例,旋转和/或平移参数以获得最大值。其他方法:如果您知道(或采取约束)图像的大部分应该重叠,则可以在变形之后计算重叠,并确定它是否显然是错误的单应性。其他方法:如果您使用RANSAC,您可以根据inlier数量(和/或inlier/total的比率)决定单应是否应该被拒绝) – Micka

+0

@Micka感谢您的帮助,我已经在使用RANSAC,相机运动是不受限制,我正在寻找方法来放弃单应性(主要是数学),然后再进行更重的计算,如应用单应性和检查重叠。 –

回答

22

的最佳方式告诉我们,如果单应是可以接受的。

1-获取一个图像的点并使用计算出的单应矩阵重新投影它们。

//for one 3D point, this would be the projection 
px' = H * px; 
py' = H * py; 
pz' = H * pz; 

2-计算重新投影的点和图像中的实际点之间的euclidean distance

Reprojection error一点。 p是投影点,q是实际点。

enter image description here

3-建立该决定是否重投影误差是可接受一个treshold。

例如,大于一个像素的错误对于许多跟踪应用程序来说是不可接受的。

+11

当您知道很可能两个图像在类似位置共享一个修补程序时,您建议的内容适用于跟踪。当计算两幅不同图像之间的单应性来检查一幅图像是否包含另一幅图像时,重投影误差根本没有用处。例如,在我的情况下,我经常会从一个图像中将很多(〜30个)点映射到第二个图像中的同一个点(或几个,关闭点)。你对这个案子有什么建议吗? –

相关问题