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

问题描述 投票:0回答:1

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

其次,我用一个以“mm”作为公制单位的棋盘单独校准每个摄像机,然后使用opencv功能校准立体声系统,纠正立体声对,然后计算视差图。

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

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

谢谢

python opencv computer-vision depth disparity-mapping
1个回答
0
投票

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

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

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

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.