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

2024-09-29 01:26:57 发布

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

使用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)如何将该点投影到第二个摄影机的图像坐标系。有人能给我指出(1)的OpenCV函数吗


Tags: 图像opencv投影校准depthcoordinatesinv摄影机
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:57

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

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

相关问题 更多 >