cv::StereoSGBM sgbm; sgbm.preFilterCap = 63; int SADWindowSize=11; int cn = 1; sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3; sgbm.P1 = 4*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; sgbm.minDisparity = 0; sgbm.numberOfDisparities = 32; sgbm.uniquenessRatio = 10; sgbm.speckleWindowSize = 100; sgbm.speckleRange = 32; sgbm.disp12MaxDiff = 1; sgbm(left , right , left_disp_); sgbm(right, left , right_disp_);
下面我簡要介紹一下各個參數的意義
minDisparity -最小的是視差,一般設置為0
numDisparities 最大的視差,這個需要自己去定,這個數值比0大,而且要被16整除, 比如32 64
SADWindowSize 滑動窗口的大小,必須要大於1,一般取在3-11之間
P1 懲罰系數,用於控制圖像的平滑,具體需要看這個函數的算法,很多博客有介紹P1和P2的懲罰系數
P2 懲罰系數
disp1MaxDiff 視差圖的像素點檢查,設置為1
uniquenessRatio 最好的代價方程值“贏了”第二好的代價方程值的概率,通常設置為5-15之間效果達到最佳
speckleWindowSize 針對散斑濾波的窗口大小,如果設置為0則不允許散斑濾波,否則設置為50-200之間
speckleRange- 相鄰像素點的視差值浮動范圍,通常設置為1-2就好了,這個系數會被乘以16輸入到程序中
fullDP 如果是尺寸比較大的圖片,這里設置為true,否則設置為false