OpenCV的雙目相機remap

2021-08-20 12:33:44 字數 1553 閱讀 5578

雙目相機的remap主要是為了解決「極線對齊」的問題,需要輸入相機的內外引數,分別產生左圖x方向、y方向和右圖x方向、y方向的remap**,並由這個**按照lut對原影象進行「極限校正」。

對極幾何是雙目相機立體標定的數學基礎,相關知識點參考:

主要思路是:

(1)讀入雙目相機的內外引數:

filestorage fs(path, filestorage::read);  

vectorlimg_list, rimg_list;  

if(!fs.isopened())  

fs["m1"

] >> m1;  

//> limg的內參

fs["d1"

] >> d1;  

//> limg的畸變係數

fs["m2"

] >> m2;  

//> rimg的內參

fs["d2"

] >> d2;  

//> rimg的畸變係數

fs["r"

] >> r;    

//> 旋轉矩陣

fs["t"

] >> t;    

//> 平移矩陣

m1-左目相機內參;

d1-左目相機畸變係數;

m2-右目相機內參;

d2-右目相機畸變係數;

r -雙目相機外參的旋轉矩陣;

t -雙目相機外參的平移矩陣;

(2)利用stereorectify函式,由雙目相機內外引數計算雙目相機的校正變換矩陣;

(3)利用initundistortrectifymap函式,由對應的相機內參和校正變換矩陣計算x和y方向的remap**;

mat rl, rr, pl, pr, q;  

stereorectify(m1, d1, m2, d2, size(1280, 720), r, t, rl, rr, pl, pr, q, calib_zero_disparity, -1, size(1280, 720));

initundistortrectifymap(m1, d1, rl, pl, size(1280, 720), cv_32fc1, maplx, maply);  

initundistortrectifymap(m2, d2, rr, pr, size(1280, 720), cv_32fc1, maprx, mapry);  

(4)利用remap函式,由remap**和對應的原圖計算極線校正之後的影象。

mat limg = imread(

"limage.png"

, cv_load_image_anydepth);    

mat rimg = imread("rimage.png"

, cv_load_image_anydepth);  

mat re_imgl, re_imgr;  

remap(limg, re_imgl, maplx, maply, inter_linear);  

remap(rimg, re_imgr, maprx, mapry, inter_linear);  

matlab雙目相機標定校正 工業相機雙目標定

為了得到中物體的深度資訊,引入雙目視覺,雙目標定在的基礎上,標定出左右攝像機座標系之間的相對關係。若對單目標定不了解,請先食用 林青春 工業相機單目標定 zhuanlan.zhihu.com 所涉及的專業名詞有對極幾何,本徵矩陣,基礎矩陣。雙目相機基於對極幾何的理論,本徵矩陣e包含在物理空間兩個攝像...

opencv 雙目相機標定 自帶例子程式的使用

有了上篇單目標定示例程式的經驗,雙目標定就是小菜一碟哈。本人目前菜鳥,但還是願意厚著臉皮分享我一下午的成果。不要拍我.1.找到目錄 opencv sources samples cpp下的 stereo calib.cpp stereo calib.xml 和 stereo match.cpp以及2...

車載雙目ADAS(七) 雙目相機的設計

近年來,基於公釐波雷達和雷射雷達的方案已經廣泛用於高階汽車,公釐波雷達的主要優勢體現在具有很強的抵抗環境干擾的能力,可穿透霧 煙 灰塵等,具有全天候全天時工作的能力,可直接檢測前方車輛的距離和速度。雷射雷達的主要優勢體現在極精準的測距能力。然而,不論是公釐波雷達還是雷射雷達,均存在一些致命缺點,比如...