輪子 雙目立體校正(C OpenCV)

2021-09-26 15:56:50 字數 2670 閱讀 3190

在對雙目相機進行標定之後,將在ubuntu系統中進行開發。首先要做的是編寫基礎程式從雙目相機中實時的獲取原始影象並對其進行矯正。

依照《slam開發之雙目標定(matlab)》標定了一波,標定結果給出如下

左相機內參 (使用前需要對齊進行轉置)

stereoparams.cameraparameters1.intrinsicmatrix

[3.794933296903811e+02,0,0;0,3.789423824318373e+02,0;1.708814624155970e+02,1.115666514433592e+02,1]
左相機徑向畸變(k1, k2, k3)

stereoparams.cameraparameters1.radialdistortion

[0.030551047027847,0.649726442995634,-3.135805398892529]
左相機切向畸變(p1, p2)

stereoparams.cameraparameters1.tangentialdistortion

[0.002296124889110,0.001247128894521]
右相機內參 (使用前需要對齊進行轉置)

stereoparams.cameraparameters2.intrinsicmatrix

[3.812723804323131e+02,0,0;0,3.807879935881336e+02,0;1.726763231981177e+02,1.228890378500635e+02,1]
右相機徑向畸變(k1, k2, k3)

stereoparams.cameraparameters2.radialdistortion

[0.051714797025223,0.301689634726206,-1.949431177752929]
右相機切向畸變(p1, p2)

stereoparams.cameraparameters2.tangentialdistortion

[0.002019080886440,-0.002338594348609]
兩個攝像頭的旋轉引數 (使用前需要對齊進行轉置)

stereoparams.rotationofcamera2

[0.999964138274955,-2.631593168759495e-04,-0.008464804262361;3.707800649684831e-04,0.999919094244024,0.012714853060666;0.008460773378928,-0.012717535664776,0.999883332994628]
兩個攝像頭的平移引數

stereoparams.translationofcamera2

[-59.825188219129230,-0.439775295864600,0.962473834066763]
基於matlab工具箱校正得到各項引數後,將其移植到基於opencv的c++工程中,主要使用了以下三個函式

cv::stereorectify(...)

cv::initundistortrectifymap(...)

cv::remap(...)

給出節點的完整**如下:

#include #include #include #include #include "mono_camera.h"

#include "mono_frame.h"

#include "map_point.h"

#include "map.h"

#include "config.h"

#include "visual_odometry.h"

#include #include int main(int argc,char **ar**)

// 更新右相機影象

if( cap_right.read(frame_right))

// 只有當兩個相機都更新時,才執行修正操作

if((cam_left_update==1) && (cam_right_update==1))

// 原始的左右相機影象

cv::mat raw_img_pair;

hconcat(frame_left,frame_right,raw_img_pair);

for (int j = 0; j < image_size.height; j += 16)

// cv::imshow("rectifiedpair",rec_img_pair);

cv::imshow("rawimagepair",raw_img_pair);

}else

cv::waitkey(1);

loop_rate.sleep();

}return 0;

}

最終輸出的校正結果與原始影象進行對比如下,可以看到,經過校正的左右相機獲取的影象,相同的特徵處於同一水平線上:

雙目視覺之立體校正

引言 當兩個像平面式完全行對準的,計算立體視差是最簡單的。但是兩台攝像機幾乎不可能有準確的共面和行對準成像平面,完美的對準結構在真實的立體系統中幾乎不存在。因此,立體校正的目的是對兩台攝像機的影象平面重投影,使得它們精確落在同乙個平面上,而且影象的行完全地對準到前向平行的結構上。對準後的兩個影象平面...

opencv3雙目視覺中的立體校正原理

校正過程中兩個影象平面均旋轉一半的r,這樣可以使重投影畸變最小,此時兩個攝像機影象平面共面 畸變校正後光軸也平行 但是行不對準 極點是兩個相機座標系原點的連線和影象平面的交點,要想使得極點處於無窮遠處 即行對準 就必須兩個攝像機的影象平面和兩個相機座標系原點的連線平行 可以計算rre 1 共面 將相...

雙目立體匹配

公式 其中資料項描述了匹配程度,平滑項體現了定義場景的約束,c是匹配代價 或稱penalty p是不同兩畫素p和q視差的函式,一般稱之為平滑項 考慮到能量優化問題在一維空間的複雜度是多項式級的,因此一些研究試圖做一些近似來降低演算法的複雜度。例如,半全域性演算法 sgm 就利用了這一特性將二維問題簡...