opencv:reprojectImageTo3d(X,Y,Z)点的度量单位是什么?

时间:2019-03-01 05:34:35

标签: python opencv computer-vision depth disparity-mapping

首先,我想知道我们从opencv reprojectImageTo3D()函数获得的3d点的度量单位。

第二,我用以“ mm”为度量单位的棋盘分别校准了每个摄像机,然后使用opencv函数校准立体声系统,校正立体声对,然后计算视差图。

基本上我想要一个边界框的中心的距离。 因此,我计算了视差图,并使用reprojectImageTo3D()函数将其重新投影到3D中,然后从那些3D点中获取,该点对应于bbox的中心(x,y)。 但是我应该使用哪个图像来获得bbox的中心?校正后的还是原始的?

第二,在立体音响系统中使用相同的相机型号会更好吗?

谢谢

1 个答案:

答案 0 :(得分:0)

在校准过程(calibrateCamera)中,您必须提供校准目标的点网格。您在那里提供的单位将为其余过程定义单位。 调用reprojectImageTo3D时,您可能使用了stereoRectify输出的矩阵Q,该矩阵Q接受了各个校准(cameraMatrix1cameraMatrix2)。那是单位的来历。 所以我猜你是毫米。

reprojectImageTo3D必须使用校正后的图像,因为视差是使用校正后的图像计算的(否则将无法正确对齐)。同样,在计算视差时,它是相对于给定的第一个图像(文档中剩下的一个)计算的。因此,如果您像这样计算视差,则应该使用左校正图像:cv::StereoMatcher::compute(left, right)

我从来没有两个不同的相机,但是使用相同的相机是很有意义的。我认为,如果您有非常不同的彩色图像,边缘或任何图像差异,则可能会影响视差质量。 实际上非常重要的是(除非您仅处理静态图片),是使用可以通过硬件同步的摄像机(例如GENLOCK信号:https://en.wikipedia.org/wiki/Genlock)。如果左右移动对象之间有一些延迟,则视差可能是错误的。对于校准也是如此。

希望这会有所帮助!