Python OpenCV基本矩阵内插器

Python OpenCV基本矩阵内插器,python,opencv,computer-vision,pose-estimation,Python,Opencv,Computer Vision,Pose Estimation,我有一组来自两幅图像的对应点。使用这些和我的相机内部函数,我使用cv2.findesentialmat计算基本矩阵,使用严格的阈值。这将返回E和inliners 这是我的问题。我想使用一个较紧的阈值来估计E,但是,我想找到位于稍宽的阈值区域中的点 根据理论,如果点x和x'是对应的,那么x'.T@K^-T@E@K^-1@x=0(等式1)。因此,使用估计的E,如果我对每个点对应执行此操作,理论上应该给出每个点的误差,并且我可以将内线估计为位于某个误差值内的点 然而,从cv2.findesential

我有一组来自两幅图像的对应点。使用这些和我的相机内部函数,我使用
cv2.findesentialmat
计算基本矩阵,使用严格的阈值。这将返回
E
inliners

这是我的问题。我想使用一个较紧的阈值来估计
E
,但是,我想找到位于稍宽的阈值区域中的点

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

然而,从
cv2.findesentialMat
估算的
内联线与该公式之间似乎没有相关性。我知道cv2。FindSentialMat使用不同的误差(Sampson误差,这是一阶近似值),因此,哪个是内联线的更真实的度量

样本:

假设从一个给定的
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]])
在接下来的几行中,每一行都包含以下顺序的-
来自eqn1的错误
inlier
x
x'
(几个对应)


可以看出,eqn1的误差与
cv2.findesentialmat
的误差之间似乎没有相关性。因此,从三角测量的角度来看,哪种度量更适合去除异常值?

您可以先使用更宽的阈值来估计E,然后只取内联线并再次估计E并重复。我这样做过一次,以改进基本矩阵计算。
[[-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.]