##仅记录工程中的工作


  opencv中提供了多种双目视觉匹配的算法实现,比如BM,SGBM,HH,VAR等,这些算法实现在calib3d文件中,并在opencv提供的 sample文件中有具体的例子,具体的算法实现和例子可以查看opencv库,这里不对算法的实现原理做解析。以下只说明各个算法接口和参数的意义。opencv中使用setParamName和getParamName来设置和获取相应参数。

一、BM参数

预处理滤波器参数:

1)PreFilterType:预处理滤波器类型,opencv中提供了两种预处理PREFILTER_NORMALIZED_RESPONSE和PREFILTER_XSOBEL,opencv中的预处理主要是为了降低噪声,增强纹理,双目匹配对纹理有较强的依赖。

2)PreFilterSize:预处理滤波器的大小,奇数,[5, 255]。

3)PreFilterCap:预处理滤波器的截断值,保留[-PreFilterCap PreFilterCap]的值。

左右视差区域

1)ROI1,ROI2:左右视图的有效像素区域,由双目校正时cvStereoRectify函数传递,或者自行设定。OpenCV通过cvGetValidDisparityROI 函数计算出视差图的有效区域,在有效区域外的视差值将视为0。

SAD:

1)SADWindowSize:SAD窗口大小,奇数,[5, 255]。

2)MinDisparity:最小视差值,默认为0。

3)NumDisparities:视差范围,最大视差减去最小视差,必须为16的整数倍。

后处理参数:

1)TextureThreshold:低纹理的判断阈值,如果当前SAD窗口内所有邻居像素点的x导数绝对值之和小于指定阈值,则该窗口对应的像素点的视差值为 0,正整数。

2)UniquenessRatio:视差唯一性百分比,视差窗口范围内最低代价是次低代价的(1 + uniquenessRatio/100)倍时,最低代价对应的视差值才是该像素点的视差,否则该像素点的视差为 0,正整数[5 15]。

3)SpeckleWindowSize:连通区域窗口大小,0为取消连通区域检查,该窗口用于过滤小的区域(噪声等)。

4)SpeckleRange:当窗口内视差变化大于该阈值时,该窗口内的视差为0。

5)Disp12MaxDiff:左视差图(直接计算得出)和右视差图(通过cvValidateDisparity计算得出)的最大容许差异,超过该阈值的视差值为0。为 -1时不执行左右视差检查。

SGBM:

和BM相比较,SGBM主要区别在于两个平滑参数P1,P2。

P1,P2:视差变化平滑参数,越大越平滑。