opencv中提供了多種雙目匹配演算法,比如bm,sgbm,hh等,並提供了各演算法主要引數的設定與獲取方式,加速了雙目匹配的演算法開發。雙目匹配遵循以下的流程:相機標定左右相機的內外參——>對左右影象進行畸變校正——>選擇匹配演算法對校正後的影象進行匹配,計算視差。各匹配演算法也遵循一定的流程,具體的細節在以後對匹配演算法剖析中說明。
相機標定:
相機標定後會有兩個檔案,分別對應內參矩陣和外參矩陣,opencv中兩個檔案為yml格式,其中內參檔案intrinsics.yml中m1,m2為相機內參焦距(fx, fy),光心( cx, cy),d1,d2為相機畸變(k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,τx,τy]]]]),有4,5,8,12或14個元素。
左右影象畸變校正:
opencv中提供了影象校正的函式,操作如下:
stereorectify( m1, d1, m2, d2, img_size, r, t, r1, r2, p1, p2, q, calib_zero_disparity, -1, img_size, &roi1, &roi2 );
mat map11, map12, map21, map22;
//輸入的r1,p1可以來自stereorectify,也可以直接來自標定後得到的矩陣
initundistortrectifymap(m1, d1, r1, p1, img_size, cv_16sc2, map11, map12);
initundistortrectifymap(m2, d2, r2, p2, img_size, cv_16sc2, map21, map22);
mat img1r, img2r;
remap(img1, img1r, map11, map12, inter_linear);//img1須為灰度圖
remap(img2, img2r, map21, map22, inter_linear);
有關stereorectify和initundistortrectifymap的說明可以參考:
影象匹配:
此處可以根據需要選擇不同的匹配演算法,opencv中匹配演算法的呼叫方式是一樣的,都是通過setparam和getparam來設定和獲取演算法引數值,然後通過compute執行演算法,計算得到視差圖,以下以bm為例展開:
//set bm's params
bm->setroi1(roi1);
bm->setroi2(roi2);
bm->setprefiltercap(prefiltersize);
bm->setprefiltercap(prefiltercap);
bm->setblocksize(sadwindowsize > 0 ? sadwindowsize : 9);
bm->setmindisparity(0);
bm->setnumdisparities(numberofdisparities);
bm->settexturethreshold(texturethreshold);
bm->setuniquenessratio(uniquenessratio);
bm->setspecklewindowsize(specklewindowsize);
bm->setspecklerange(specklerange);
bm->setdisp12maxdiff(disp12maxdiff);
bm->compute(img1, img2, disp);
disp.convertto(disp8, cv_8u, 255/(numberofdisparities*16.));
雙目匹配BM演算法
在網上查有關bm演算法的原理,最先出來的總是有關字串匹配的boyer moore演算法,以至於讓我對這個匹配演算法產生了深深的誤解,然而之前都是直接呼叫opencv的函式,所以原理不甚了解也沒太當回事,直到被老師問到bm演算法的原理是才發現根本講不明白,這也就影響了之後對演算法的優化。簡單記錄下自己...
雙目立體匹配演算法漫談
雙目立體匹配演算法是計算機視覺中比較經典的問題。有大量經典的雙目立體匹配演算法。本文簡要介紹一下雙目立體匹配的常用基本流程,也可以說是套路。第一次寫這麼長的博文,我想到 寫 更詳細內容的可見文章a taxonomy and evaluation of dense two frame stereo c...
opencv雙目標定
有 解釋 opencv有自帶的雙目標定例子。下邊opencv雙目相機校正的 是在自帶的程式stereo calib.cpp基礎上修改的,位置在 xx opencv sources samples cpp 使用時拷貝目錄下的26張和stereo calib.xml到當前工程目錄下,並在工程除錯 命令引...