微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何应用基本矩阵将 3D 点从相机 1 的世界坐标转换为相机 2 的世界坐标

如何解决如何应用基本矩阵将 3D 点从相机 1 的世界坐标转换为相机 2 的世界坐标

使用 OpenCV 的 cv2.stereoCalibrate 我校准了一对相机,其中一个是飞行时间相机。所以,我有内在校准参数和基本/基本矩阵。

现在我想将一个点从 ToF 相机投影到 2D 相机。

为了在 ToF 相机中将图像转换为世界坐标,我做了:

p = [(15,15,1)]
z = depth[p[0][0],p[0][1]]  # measured ToF depth for this single point

# from ToF image coordinates (including ToF depth!) to ToF world coordinates
invR_x_invM_x_uv1 = R_inv * cameraMatrix_inv_3 * p[0]
invR_x_tvec = R_inv * T
wcPoint = (z + invR_x_tvec[2]) / invR_x_invM_x_uv1[2] * invR_x_invM_x_uv1 - invR_x_tvec
wcPoint = wcPoint[:,-1]

所以我有世界坐标的点。

我不明白的是(1)如何将这个点转换到第二个相机的世界坐标系,然后(2)如何将这个点投影到第二个相机的图像坐标系。有人能指出我的 OpenCV 函数,特别是 (1) 吗?

解决方法

首先,你应该学习线性代数。您不能按元素相乘矩阵。你必须使用点积。两个矩阵 A 和 B 的点积在 Python 中可以写为 A@BA.dot(B)

如果你有一个立体校准和两个固定摄像头,你还应该有这些摄像头的外在参数。这些相机与世界坐标系(只有一个)之间的平移和旋转(可能位于上述相机之一的位置)使您能够转换 3D 数据以获得所选坐标系中的坐标。我严重建议您阅读 Hartley/Zisserman 中有关相机投影的基础知识,Multiple View Geometry,可在线免费获取。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。