首先,我想知道我们从opencv reprojectImageTo3D()函数得到的3d点的度量单位。
其次,我用一个“mm”的棋盘单独校准每个摄像机……
在校准过程中( calibrateCamera )你必须给出校准目标的点网格。然后,您在那里给出的单位将为剩余的过程定义单位。 打电话的时候 reprojectImageTo3D ,你可能使用了矩阵Q输出 stereoRectify ,它接受个别校准( cameraMatrix1 , cameraMatrix2 )。这是该单位的来源。 所以在你的情况下你得到mm我猜。
calibrateCamera
reprojectImageTo3D
stereoRectify
cameraMatrix1
cameraMatrix2
reprojectImageTo3D 必须使用校正后的图像,因为使用校正后的图像计算视差(否则将无法正确对齐)。此外,在计算视差时,相对于给定的第一图像(文档中的左图)计算。因此,如果您计算出这样的差异,则应使用左校正图像: cv::StereoMatcher::compute(left, right)
cv::StereoMatcher::compute(left, right)
我从来没有两个不同的相机,但使用相同的相机是有道理的。我认为如果你有非常不同的彩色图像,边缘或任何图像差异,这可能会影响差异质量。 实际上非常重要的(除非你只使用静态图片),是使用可以通过硬件同步的相机(例如GENLOCK信号: https://en.wikipedia.org/wiki/Genlock )。如果左右之间有一点延迟和一个移动的主体,则差异可能是错误的。校准也是如此。
希望这可以帮助!