相对相机姿态估计的错误结果

问题描述

我正在尝试估计两个图像之间相机姿势的差异。特别是我用同一​​个相机(已知的内在参数矩阵 K)拍了两张照片。第二个是在绕 y 轴旋转 24 度后拍摄的,垂直于地板,沿 x 和 z 轴平移约 5 厘米。

在 python 中,我使用 SIFT 提取特征,然后应用 RANSAC 来过滤内点。从内点,我使用 cv2.findEssentialMatrix 计算基本矩阵,然后使用 cv2.decomposeEssentialMat 来分解它。它返回 2 个矩阵,但我选择一个矩阵不是问题,因为我知道我正在寻找的矩阵代表绕 y 轴的主要旋转,理论上没有绕其他两个轴旋转。我遇到的第一个问题是,平均来说算法还可以,估计旋转了 23-26 度,但有时结果差异太大,比如 30 或 10 度。发生这种情况是由于选择了内点,但我尝试同时调整特征匹配器中的 Lowe 比率和 ransac 中的阈值,但没有任何改进。有没有办法改善这一点?

我遇到的另一个问题是翻译向量。一方面,它没有假设预期值,我认为这与上面的部分有关。此外,相机兼作深度相机,因此我可以访问每个特征与相机平面的距离,我希望这可以用于将基本矩阵分解产生的单位向量传递给 3D 向量(例如以米为单位)。

我会留下一些代码来帮助阅读。

model,inliers = ransac(
        (src_pts,dst_pts),EssentialMatrixTransform,min_samples=8,residual_threshold=.05,max_trials=10000
    )
E = cv2.findEssentialMat(src,dst,K)
[R1,R2,t_dec]=cv2.decomposeEssentialMat(E[0])

我也搜索了这些函数的源代码,但没有找到。 我希望有人能在这些问题上启发我,真的很感激。

解决方法

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

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

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