基于极线姿态恢复的摄像机焦距估计

2024-04-28 22:40:20 发布

您现在位置:Python中文网/ 问答频道 /正文

标题有点夸张,但基本上我有两张照片(我正在初始化场景图),我想恢复第二张照片的相对姿势。我知道如何从基本矩阵恢复姿势,但这需要了解焦距(以像素为单位)和原点。原点很简单,但如何确定焦距呢。 我要估计一下,然后把它留在那里吗?我能用基本矩阵代替基本矩阵吗?或者我从f的估计开始,执行一个循环,直到来自两个摄像机的光线通过关键点会聚或者它们的距离最小化

TLDR;不知道如何从极线geo中找到恢复姿势的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找到的关键点


Tags: normnp矩阵cv2照片pts焦距关键点
1条回答
网友
1楼 · 发布于 2024-04-28 22:40:20

所以我估计内在矩阵的方法是使用摄像机EXIF数据。 该数据将包括焦距及其35mm当量,单位为mm。并将包括照片的大小,这对估计来源很有用

然后,您必须使用相机型号查找传感器尺寸,并使用方程式f_X=f_X*宽度_in_像素/width_in_mm进行转换,其中f_X以mm为单位

这是我能找到的最好的方法,不幸的是EXIF数据并不总是包含CCD宽度,如果包含,你可以使用它

相关问题 更多 >