OpenCV基本矩阵在线

问题描述

我有2张图像中的一组对应点。使用这些以及相机的内在函数,我使用cv2.findEssentialMat并使用严格的阈值来计算基本矩阵。这将返回Einliers

这是我的问题。我想使用严格的阈值来估算E,但是,我想找到位于略宽的阈值区域中的点。

根据理论,如果点xx'是对应关系,则x'.T @ K^-T @ E @ K^-1 @ x = 0(等式1)。因此,使用估计的E,如果我对每个点对应关系都执行此操作,则理论上应该给出每个点的误差,并且我可以将内点估计为位于某个误差值内的点。

但是,根据inliers估算出的cv2.findEssentialMat与该公式之间似乎没有关联。我知道cv2.findEssentialMat使用了不同的误差(桑普森误差,它是一阶近似值),因此,这是对inliers的更真实的度量?

示例:

假设来自给定的300对应,这是我的E

E = np.asarray([[-1.90703391e-03,-7.07017221e-01,6.96654064e-03],[ 7.06991016e-01,-1.85637111e-03,1.15511153e-02],[-5.20266398e-03,-8.61635827e-03,4.11652184e-07]])

在接下来的几行中,每行包含-error from eqn1inlierxx'的顺序(有一些对应关系)

[[-0.00019274]] 0 [267.  86.   1.] [204.  72.   1.]
[[0.00048806]] 0 [274. 138.   1.] [214. 135.   1.]
[[6.73487966e-06]] 0 [277.  89.   1.] [216.  76.   1.]
[[-0.00044746]] 1 [380.  93.   1.] [356.  86.   1.]
[[-0.00053107]] 0 [384. 116.   1.] [361. 111.   1.]
[[-0.00020068]] 0 [387.  98.   1.] [363.  92.   1.]
[[-0.00019009]] 0 [387. 108.   1.] [363. 103.   1.]
[[-6.01717538e-05]] 0 [392.  85.   1.] [368.  78.   1.]
[[-1.74641035e-05]] 0 [392. 124.   1.] [368. 121.   1.]
[[4.83028302e-05]] 0 [396. 103.   1.] [372.  98.   1.]
[[-0.0002719]] 0 [397. 119.   1.] [375. 115.   1.]
[[-0.00031985]] 0 [403.  61.   1.] [379.  50.   1.]
[[-0.00013948]] 0 [407.  51.   1.] [384.  40.   1.]
[[-7.80137547e-05]] 0 [406. 155.   1.] [385. 155.   1.]
[[0.00010276]] 1 [407. 115.   1.] [386. 112.   1.]
[[0.0002215]] 1 [410. 135.   1.] [388. 134.   1.]

可以看出,eqn1的错误cv2.findEssentialMat的内部错误之间似乎没有关联。因此,从三角剖分的角度来看,哪种指标更适合去除异常值?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)