如何解决在 OpenCV 中使用 findEssentialMat 时相机姿势不正确
我正在 OpenCV 中使用 findEssentialMat 解决相机姿态估计问题。具体给定一组已知姿势的室内场景图像,我需要估计来自同一空间的某个查询图像的姿势。
我已经使用 OpenCV 和 Python 中的基本矩阵从最佳匹配图像中实现了查询图像的姿态估计。我还对对应点进行了失真处理,因为场景图像和查询图像可以由具有不同内在特性的相机捕获。
问题是查询图像的合成姿态与地面实况相差很大,基本矩阵似乎不准确,因为匹配图像非常接近并且相机位移应该非常小。这是我的代码:
dist_coeffs = None
# undistort points
pts1 = cv2.undistortPoints(np.expand_dims(pts1,axis=1),cameraMatrix=K_q,distCoeffs=dist_coeffs,R=None,P=np.identity(3))
pts2 = cv2.undistortPoints(np.expand_dims(pts2,cameraMatrix=K_v,P=np.identity(3))
thresh = 1.0
E,mask = cv2.findEssentialMat(pts1,pts2,cameraMatrix=np.identity(3),method=cv2.RANSAC,prob=F_disT,threshold=thresh)
_,R_m,t_m,mask = cv2.recoverPose(E,pts1,cameraMatrix=np.identity(3))
根据official documentation,如果points1和points2是来自不同相机内在矩阵的相机的特征点,两个相机使用undistortPoints()和P = cv::NoArray()将图像点转换为归一化的图像坐标,这对身份相机内在矩阵有效。传递这些坐标时,传递此参数的单位矩阵。 以下是基本矩阵和恢复姿势的示例:
Essential matrix
[[ 0.23120721 -0.35422666 0.45764383]
[ 0.27209477 -0.18381956 -0.52687146]
[-0.32365465 0.34509926 0.04862367]]
Recovering pose
t_m
[[0.47250148]
[0.47870924]
[0.73998636]]
R_m
[[ 0.84963004 -0.11140984 -0.51547711]
[-0.10791722 0.92002069 -0.37671715]
[ 0.5162196 0.37569906 0.76965417]]
我的实现是否正确?我是否正确使用了 undistortPoints 和 findEssentialMat 方法?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。