如何解决OpenCV基本矩阵在线
我有2张图像中的一组对应点。使用这些以及相机的内在函数,我使用cv2.findEssentialMat
并使用严格的阈值来计算基本矩阵。这将返回E
和inliers
。
这是我的问题。我想使用严格的阈值来估算E
,但是,我想找到位于略宽的阈值区域中的点。
根据理论,如果点x
和x'
是对应关系,则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 eqn1
,inlier
,x
和x'
的顺序(有一些对应关系)
[[-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 举报,一经查实,本站将立刻删除。