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

opencv: reprojectImageTo3d what is the metric unit of the (X,Y,Z) point?

首先,我想知道我们从 opencv reprojectImageTo3D() 函数中得到的 3d 点的公制单位。

其次,我用一个以"mm"为度量单位的棋盘单独校准每个相机,然后使用opencv函数校准立体系统,校正立体对,然后计算视差图。

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

其次,立体系统使用相同型号的相机更好吗?

谢谢

在校准过程中(calibrateCamera)您必须给出校准目标的点网格。您在那里提供的单位将定义流程其余部分的单位。 调用 reprojectImageTo3D 时,您可能使用了 stereoRectify 输出的矩阵 Q,它接受了单独的校准(cameraMatrix1cameraMatrix2)。这就是单位的来源。 所以在你的情况下你得到 mm 我猜。

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

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

希望对您有所帮助!