我正在尝试使用OpenCV通过SIFT特征跟踪,FLANN匹配以及基本矩阵和基本矩阵的后续计算来估计摄像机相对于另一摄像机的一个姿势。分解基本矩阵后,我检查退化的配置并获得“正确的” R和t。
问题是,它们似乎永远都不对。我包括几个图像对:
结果
结果
在第二种情况下,平移矢量似乎高估了Y方向的运动,而低估了X方向的运动。将旋转矩阵转换为Euler角时,在两种情况下均得出错误的结果。许多其他数据集也会发生这种情况。我尝试过在RANSAC,LMEDS等之间切换基本矩阵计算技术,现在使用RANSAC进行此操作,并且仅使用8点法的内点进行第二次计算。更改特征检测方法也无济于事。对极线似乎是正确的,并且基本矩阵满足x'.Fx = 0
我在这里错过根本上是错的东西吗?假设程序正确理解了对极几何,那么可能发生什么导致完全错误的姿势?我正在检查以确保点都位于两个摄像头的前面。任何想法/建议都将非常有帮助。谢谢!
编辑:尝试使用相同技术,将两个不同的校准摄像机间隔开;并将基本矩阵计算为K2'.F.K1,但平移和旋转仍然相去甚远。
参考代码
import cv2
import numpy as np
from matplotlib import pyplot as plt
# K2 = np.float32([[1357.3, 0, 441.413], [0, 1355.9, 259.393], [0, 0, 1]]).reshape(3,3)
# K1 = np.float32([[1345.8, 0, 394.9141], [0, 1342.9, 291.6181], [0, 0, 1]]).reshape(3,3)
# K1_inv = np.linalg.inv(K1)
# K2_inv = np.linalg.inv(K2)
K = np.float32([3541.5, 0, 2088.8, 0, 3546.9, 1161.4, 0, 0, 1]).reshape(3,3)
K_inv = np.linalg.inv(K)
def in_front_of_both_cameras(first_points, second_points, rot, trans): …Run Code Online (Sandbox Code Playgroud) python opencv computer-vision rotational-matrices pose-estimation