SGBM参数意义

转自https://blog.csdn.net/wwp2016/article/details/86080722   博主写得很详细!!

SGBM参数意义_第1张图片

SGBM参数意义_第2张图片

  blockSize = 3
    param = {'minDisparity': 0,
             'numDisparities': 128,
             'blockSize': blockSize,
             'P1': 8 * img_channels * blockSize ** 2,
             'P2': 32 * img_channels * blockSize ** 2,
             'disp12MaxDiff': 1,
             'preFilterCap': 63,
             'uniquenessRatio': 15,
             'speckleWindowSize': 100,
             'speckleRange': 1,
             'mode': cv2.STEREO_SGBM_MODE_SGBM_3WAY
             }

一 预处理参数

preFilterCap:水平sobel预处理后,映射滤波器大小。默认为15

二 代价参数

blockSize:块匹配的大小,SAD代价计算窗口大小,默认为5,在3~11的范围。窗口大小为奇数,一般在3*3 到21*21之间应该为奇数,

minDisparity:最小视差,一般情况下为0,但有可能矫正算法会移动图像,因此,参数需要进行调整。此参数决定左图中的像素点在右图匹配搜索的起点,int 类型。

numDisparities:最大视差减最小视差,视差搜索范围长度,其值必须为16的整数倍。最大视差 maxDisparity = minDisparity + numDisparities -1;现在的算法中,参数必须为16所整除

三 动态规划参数

P1,P2:控制视差图的光滑度。能量函数参数,P1是相邻像素点视差增/减 1 时的惩罚系数;P2是相邻像素点视差变化值大于1时的惩罚系数。P2必须大于P1。需要指出,在动态规划时,P1和P2都是常数。

一般建议:P1 = 8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;

四:后处理参数

uniquenessRatio唯一性检测参数,int 类型。对于左图匹配像素点来说,先定义在numberOfDisparities搜索区间内的最低代价为mincost,次低代价为secdmincost。如果满足

即说明最低代价和次第代价相差太小,也就是匹配的区分度不够,就认为当前匹配像素点是误匹配的。

disp12MaxDiff左右一致性检测最大容许误差阈值。int 类型。

speckleWindowSize:视差连通区域像素点个数的大小。对于每一个视差点,当其连通区域的像素点个数小于speckleWindowSize时,认为该视差值无效,是噪点。

speckleRange:视差连通条件,在计算一个视差点的连通区域时,当下一个像素点视差变化绝对值大于speckleRange就认为下一个视差像素点和当前视差像素点是不连通的。
 

总结:

1. blockSize(SADWindowSize) 越小,也就是匹配代价计算的窗口越小,视差图噪声越大;blockSize越大,视差图越平滑;太大的size容易导致过平滑,并且误匹配增多,体现在视差图中空洞增多;
2. 惩罚系数控制视差图的平滑度,P2>P1,P2越大则视差图越平滑;
3. 八方向动态规划较五方向改善效果不明显,主要在图像边缘能够找到正确的匹配;

 

 

 

你可能感兴趣的:(双目立体视觉---三维重建,opencv,计算机视觉,python)