0

我遵循了“Learning OpenCV”一书中的立体实现。我有基本的、基本的、旋转的、平移的矩阵,我如何计算我点击的对象的真实世界位置?

4

1 回答 1

1

您可以使用ReprojectTo3D.

reprojectImageto3D 函数需要视差图、与图像大小相同的输出数组和数组 Q(视差到深度图)。

Q 是从 stereoRectify 函数计算出来的 -> stereoRectify 需要固有的相机矩阵、失真系数以及 2 个相机之间的相对旋转和平移向量 (R&T)。

要计算所有这些,请使用输出所有这些的 stereoCalibrate 函数。 http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html - 这是我提到的所有功能的链接。

因此,编码顺序的步骤是:

1> stereoCalibrate(现在使用来自同一相机的 2 个视图):获取失真系数、相机和 R & T 的内在矩阵。(您已经执行过)。

2> 计算视差并存储图像 - 使用此处显示的视差计算(从 2 张图像进行 3d 重建,没有有关相机的信息)来了解作为 reprojectImageto3D 的第一个和第二个参数的预期输入类型。

3> 使用 stereoRectify 得到 Q。

4> 将所有值插入 reprojectImage to3D 以生成坐标。输出数组 _3dImage 中的每个条目,即在每个像素处,我们将一起存储 3 个值:对应于像素的 x,y 坐标和从 Q 计算的 z 坐标。这个 z 坐标本质上是我们想要的。

一旦你计算出视差图并使用 Q 获得 _3dImage,每个(i, j)都有值。我什至将它移植到 PCL 以查看 3D 图像,这就是它的外观。_3dImage(x, y, z)

这就是视差图的样子

在此处输入图像描述

这是使用 PCL 的相应 3D 视图

在此处输入图像描述

于 2013-03-24T02:35:04.837 回答