同類似,採用
這兩個經典的進行測試。
關於bm和sgbm以及var的引數設定請參考
晨宇思遠
本文**基於opencv2.4.9
本文原始碼位址在我的csdn**資源:
0:elas
int stereomatch::elasmatch()
;cv::mat leftdpf = cv::mat::zeros(cv::size(leftimage.cols,leftimage.rows), cv_32f);
cv::mat rightdpf = cv::mat::zeros(cv::size(leftimage.cols,leftimage.rows), cv_32f);
elas::parameters param;
param.postprocess_only_left = false
; elas elas(param);
elas.process(leftimage.data,rightimage.data,leftdpf.ptr(0),rightdpf.ptr(0),dims);
cv::mat(leftdpf(cv::rect(bd,0,leftimage.cols,leftimage.rows))).copyto(disp_l);
cv::mat(rightdpf(cv::rect(bd,0,rightimage.cols,rightimage.rows))).copyto(disp_r);
//-- check its extreme values
cv::minmaxloc( disp_l, &minval, &maxval );
cout<
<< minval
//-- display it as a cv_8uc1 image
disp_l.convertto(disp8u_l, cv_8u, 255/(maxval - minval));//(numberofdisparities*16.)
cv::minmaxloc( disp_r, &minval, &maxval );
cout<
<< minval
//-- display it as a cv_8uc1 image
disp_r.convertto(disp8u_r, cv_8u, 255/(maxval - minval));//(numberofdisparities*16.)
cv::normalize(disp8u_l, disp8u_l, 0, 255, cv_minmax, cv_8uc1); // obtain normalized image
cv::normalize(disp8u_r, disp8u_r, 0, 255, cv_minmax, cv_8uc1); // obtain normalized image
cv::imshow("left",leftimage);
cv::imshow("right",rightimage);
cv::imshow("elas_left",disp8u_l);
cv::imshow("elas_right",disp8u_r);
cv::imwrite("elas_left.png",disp8u_l);
cv::imwrite("elas_right.png",disp8u_r);
cout
cv::waitkey(0);
return0;
}
1:bm演算法
gc好像只有在c版本的,我這裡做了兩個,乙個是c的,乙個是改了介面的c++版本的。
立體匹配 立體匹配過程
立體匹配就4個步驟 匹配代價計算,代價聚合,計算視差,視差精化 匹配代價計算 一般是通過計算左右兩圖對應畫素3個通道的灰度值差來決定匹配代價的,常用的就是基於畫素點匹配代價計算,一般有ad,sd,tad什麼的,基於區域的匹配代價計算一般有sad,ssd,stad之類的。匹配代價計算會生成乙個disp...
OpenCV開發之五 立體匹配
方法一 關鍵看匹配函式,不同版本對應的函式可能發生變化 include cv.h include cvaux.h include cxcore.h include highgui.h reference opencv1.1 cvref.htm by gong peiliang in sia,cas ...
雙目立體匹配
公式 其中資料項描述了匹配程度,平滑項體現了定義場景的約束,c是匹配代價 或稱penalty p是不同兩畫素p和q視差的函式,一般稱之為平滑項 考慮到能量優化問題在一維空間的複雜度是多項式級的,因此一些研究試圖做一些近似來降低演算法的複雜度。例如,半全域性演算法 sgm 就利用了這一特性將二維問題簡...