标题有点晦涩,但基本上我有两张照片(我正在初始化场景图(,我想恢复第二张照片的相对姿势。我知道如何从Essential Matrix恢复姿势,但这需要了解焦距(以像素为单位(和原点。起源很简单,但我该如何处理焦距。我估计一下然后放在那里好吗?我可以用基本矩阵代替基本矩阵吗?还是从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_l是本征矩阵,pts_l和r是用SIFT 找到的关键点
因此,我估计内在矩阵的方式是使用相机EXIF数据。这些数据将包括焦距及其35毫米当量,单位为毫米。还将包括照片的大小,这对估计原点很有用。
然后,您必须使用相机型号查找传感器尺寸,并使用方程f_X=f_X*width_in_pixels/width_in_mm进行转换,其中f_X以毫米为单位
这是我能找到的最好的方法,不幸的是,EXIF数据并不总是包括CCD宽度,如果包括,你可以使用它。