我希望从立体相机获得物体的真实距离。我正在使用学习OpenCV O'Reilly书中给出的OpenCV示例代码。获得视差图后,我想使用公式:
距离=焦点长度*基线距离/视差
问题是:
我得到了差异的负面价值。如何转换这些值以便它们可以用于实际的深度计算?
在上面的公式中,焦距和基线距离以mm为单位(由重投影矩阵返回),而视差将以像素为单位。因此结果将是mm ^ 2 /像素。如何将视差值从像素转换为mm。
答案 0 :(得分:2)
您需要先执行 camera calibration 步骤,以获取适当的参数,称为相机矩阵。
拥有一个这些值,就可以使用校正后的值对 disparity map 进行正确的计算(从相机校准步骤获得的一个值,称为 remapping < / em>或 undistortion ),然后,要获得真实的深度(以毫米或米为单位),您可以执行以下操作:
depth = baseline * focal / disparity
答案 1 :(得分:0)
将差异转换为距离的简单公式是针对平行相机的情况编写的,并且差异以度量单位表示(mm,在您的情况下)。
在实践中,使用OpenCV,并假设您的立体声装备经过校准,您将使用reprojectImageTo3D
之类的例程执行密集三角测量答案 2 :(得分:0)
您可以使用CV立体声对应功能,例如立体声块匹配或半全局块匹配。这将为您提供整个图像的视差图,可以使用Q矩阵(cv :: reprojectImageTo3D)将其转换为3D点。
答案 3 :(得分:0)