Spe*_*d87 6 c++ opencv computer-vision disparity-mapping depth
我试图用OpenCV估计立体声对图像的深度.我有视差图和深度估计可以获得如下:
(Baseline*focal)
depth = ------------------
(disparity*SensorSize)
Run Code Online (Sandbox Code Playgroud)
我已经使用块匹配技术在两个校正的图像中找到相同的点.例如,OpenCV允许设置一些块匹配参数BMState->numberOfDisparities.
块匹配过程后:
cvFindStereoCorrespondenceBM( frame1r, frame2r, disp, BMState);
cvConvertScale( disp, disp, 16, 0 );
cvNormalize( disp, vdisp, 0, 255, CV_MINMAX );
Run Code Online (Sandbox Code Playgroud)
我发现深度值为:
if(cvGet2D(vdisp,y,x).val[0]>0)
{
depth =((baseline*focal)/(((cvGet2D(vdisp,y,x).val[0])*SENSOR_ELEMENT_SIZE)));
}
Run Code Online (Sandbox Code Playgroud)
但是由于其值BMState->numberOfDisparities改变了结果值,所获得的深度值与前一个公式得到的值不同.
如何设置此参数?怎么改变这个参数?
谢谢
当且仅当从左摄像机到右摄像机的运动是纯平移(特别是平行于水平图像轴)时,简单公式才有效.
实际上,情况并非如此.例如,通常在校正图像之后,即在使用已知的基本矩阵对其进行变形之后执行匹配,使得相应的像素被约束为属于同一行.在校正后的图像上进行匹配后,可以使用整形扭曲的反转将它们重新映射到原始图像上,然后三角测量到3D空间中以重建场景.OpenCV有一个例行程序:reprojectImageTo3d