标题有点大嘴,但是基本上我有两张照片(正在初始化场景图),并且我想恢复第二张照片的相对姿势。我知道如何从基本矩阵中恢复姿势,但这需要有关焦距(以像素为单位)和原点的知识。起源很简单,但我该如何处理焦距。
我会估计并留在那里吗?我可以只使用基本面矩阵代替基本面吗?还是从f的估计值开始并执行循环,直到两个相机通过关键点的光线会聚或它们的距离最小化?
TLDR;不确定如何找到F用于从极地地理恢复姿态,我们将提供任何帮助
这是一些代码:
pts_l_norm = cv2.undistortPoints(np.expand_dims(pts_l, axis=1), cameraMatrix=K_l, distCoeffs=None)
pts_r_norm = cv2.undistortPoints(np.expand_dims(pts_r, axis=1), cameraMatrix=K_r, distCoeffs=None)
E, mask = cv2.findEssentialMat(pts_l, pts_r, focal=1.0, pp=(0., 0.), method=cv2.RANSAC, prob=0.999, threshold=3.0)
points, R, t, mask = cv2.recoverPose(E, pts_l, pts_r)
print(R,t)
其中K_1是内在矩阵,而pts_1和r是通过SIFT找到的关键点 最佳答案
因此,我估算固有矩阵的方式是使用相机EXIF数据。
该数据将包括焦距及其等效的35mm毫米。并将包括照片的尺寸,可用于估算原点。
然后,您将不得不使用相机型号来查找传感器尺寸,并使用等式f_X = F_X * width_in_pixels / width_in_mm进行转换,其中F_X以毫米为单位。
这是我能找到的最好的方法,不幸的是,EXIF数据并不总是包含CCD宽度,如果可以的话,您可以使用它。
关于python - 估计相机焦距,用于基于对极的姿势恢复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63137681/