Konolige的块匹配算法在OpenCV文档中的解释不够充分。CvStereoBMState的参数会影响cv::StereoBM计算视差值的准确性,但是这些参数没有被记录在文档中。以下是这些参数的列表及我的理解。也许有人可以增加那些不清楚的参数的描述。
disp12MaxDiff: 不确定,但是calib3d.hpp中的一条注释说执行了左右检查。猜测:从左图匹配像素到右图,再从右图匹配回左图。只有当原始左像素和反向匹配像素之间的距离小于disp12MaxDiff时,视差才有效。
- preFilterType:决定在计算视差之前在图像上应用哪种滤波器。可以是CV_STEREO_BM_XSOBEL(Sobel滤波器)或CV_STEREO_BM_NORMALIZED_RESPONSE(与平均强度的差异???)。
- preFilterSize:预过滤器的窗口大小(宽度=窗口的高度,负值)
- preFilterCap:将输出剪辑为[-preFilterCap,preFilterCap]。超出该区间的值会发生什么?
- SADWindowSize:在左右图像中比较的窗口的大小,在其中计算绝对差的总和以查找相应像素。
- minDisparity:考虑到的最小视差。默认值为零,如果可能存在负视差(取决于相机视野之间的角度和测量对象到相机的距离),则应将其设为负值。
- numberOfDisparities:视差搜索范围[minDisparity,minDisparity+numberOfDisparities]。
- textureThreshold:仅在纹理大于(或至少等于?)此阈值的位置计算视差。纹理如何定义???周围窗口中的方差吗?
- uniquenessRatio:摘自calib3d.hpp:“仅接受计算得出的视差d*,如果SAD(d)> = SAD(d*)(1 + uniquenessRatio/100.)对于任何d!= d+/-1在搜索范围内。”
- speckleRange:不确定。
- trySmallerWindows:???
- roi1、roi2:仅在这些区域计算视差值吗?不确定。
- speckleWindowSize:不确定。
stereoRectify
中使用了标志CV_CALIB_ZERO_DISPARITY
。如果是,则minDisparity
应设置为零或正数,因为在这种情况下视差_不能为负数_。至于其他变量,我不知道。 - BConic