gpt4 book ai didi

c++ - 视差图的 OpenCv 深度估计

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:53 25 4
gpt4 key购买 nike

我正在尝试使用 OpenCV 从立体对图像估计深度。我有视差图和深度估计可以获得:

             (Baseline*focal)
depth = ------------------
(disparity*SensorSize)

我使用 block 匹配技术在两个校正后的图像中找到相同的点。OpenCV 允许设置一些 block 匹配参数,例如 BMState->numberOfDisparities

block 匹配过程之后:

cvFindStereoCorrespondenceBM( frame1r, frame2r, disp, BMState);
cvConvertScale( disp, disp, 16, 0 );
cvNormalize( disp, vdisp, 0, 255, CV_MINMAX );

我发现深度值为:

if(cvGet2D(vdisp,y,x).val[0]>0)
{
depth =((baseline*focal)/(((cvGet2D(vdisp,y,x).val[0])*SENSOR_ELEMENT_SIZE)));
}

但由于BMState->numberOfDisparities的值改变了结果值,所以得到的深度值与前面公式得到的值不同。

如何设置这个参数?怎么改这个参数?

谢谢

最佳答案

当且仅当从左摄像机到右摄像机的运动是纯平移(特别是平行于水平图像轴)时,这个简单的公式才有效。

在实践中几乎从来没有这种情况。例如,在 rectifying 之后执行匹配是很常见的。图像,即在使用已知的基本矩阵对它们进行变形之后,使得相应的像素被限制为属于同一行。一旦你有比赛校正后的图像,您可以使用校正扭曲的逆将它们重新映射到原始图像上,然后三角化到 3D 空间以重建场景。 OpenCV 有一个例程可以做到这一点:reprojectImageTo3d

关于c++ - 视差图的 OpenCv 深度估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com