ORB SLAM2 雙目稀疏立體匹配演算法

2022-09-08 05:30:13 字數 2298 閱讀 5106

本節主要學習orb_slam2中的雙目立體匹配演算法的實現過程

主要在frame.cc檔案中

主要過程:

id自增

mnid=nnextid++;

計算影象金字塔的引數

mnscalelevels = mporbextractorleft->getlevels();

mfscalefactor = mporbextractorleft->getscalefactor();

mflogscalefactor = log(mfscalefactor);

mvscalefactors = mporbextractorleft->getscalefactors();

mvinvscalefactors = mporbextractorleft->getinversescalefactors();

mvlevelsigma2 = mporbextractorleft->getscalesigmasquares();

mvinvlevelsigma2 = mporbextractorleft->getinversescalesigmasquares();

對左右影象提取orb特徵點, 使用雙線程進行提取

thread threadleft

(&frame::extractorb,this,0,imleft)

;thread threadright

(&frame::extractorb,this,1,imright)

;threadleft.join();

threadright.join();

用opencv的矯正函式,內參對提取到的特徵點進行矯正

undisortkeypoints();

計算雙目見特徵點的匹配,只有匹配成功的特徵點才會計算深度,深度存放在mvdepth中;

computestereomatches();

計算去畸變後邊界

主要對應函式frame::computestereomatches()

輸入:兩幀立體矯正後的影象對應的ob特徵點集

過程

行特徵點統計

粗匹配精確匹配sad.

亞畫素精度優化

最有視差值/深度選擇

刪除離群點( outliers)

輸出:稀疏特徵點視差圖/深度圖和匹配結果

視差公式

z:深度 d:視差(disparity)f:焦距 b:(baseline) 基線

$z=\frac,d=u_l-u_r$

亞畫素插值

// sub-pixel match (parabola fitting)

const

float dist1 = vdists[l+bestincr-1];

const

float dist2 = vdists[l+bestincr];

const

float dist3 = vdists[l+bestincr+1];

const

float deltar = (dist1-dist3)/(2.0f*(dist1+dist3-2.0f*dist2));

if(deltar1)

continue;

亞畫素插值方法:

亞畫素的誤差在乙個畫素以內,所以修正量大一1時鑑定為誤匹配。

最優視差值。深度選擇

刪除離群點(outliers)

// 快匹配相似度閾值判斷,快意話sad最小,不代表就是匹配的,比如光照變化,若紋理,無紋理都會造成誤匹配

//誤匹配判斷條件 norm_sad > 1.5*1.4*median

sort(vdistidx.begin(),vdistidx.end()); //對dist進行排序

const

float median = vdistidx[vdistidx.size()/2].first; //根據中值計算閾值

const

float thdist = 1.5f*1.4f*median;

for(int i=vdistidx.size()-1;i>=0;i--)

}

ORB SLAM2 雙目稀疏立體匹配學習

這部分主要在frame.cc檔案中 對應函式為 frame frame const cv mat imleft,const cv mat imright,const double tamp,orbextractor extractorleft,orbextractor extractorright,...

ORB SLAM2系統mono單目是如何初始化的?

我把頭檔案的資訊和原始檔整合到一起了,這是單目才會用到的複雜初始化,每乙個函式都需要很多的時間去學習,後面補充,現在只是注釋框架。初始化的主要思路就是用對極幾何和三角化求出rt矩陣,可以先參考視覺slam十四講裡面的內容學習,鏈結如下 對極幾何內容原始碼解讀 視覺slam十四講系列之第七講pose ...

ORB SLAM2原始碼閱讀記錄(1) 單目初始化

最近開始學習下orb slam2原始碼,邊閱讀邊記錄下自己的理解,首先來乙個大致初始化流程圖,閱讀從mono euroc.cc開始。第一幀剛來 未構造初始化器 則構造 如果是單目初始器 mpinitializer為空,即第一次進行初始化 並且特徵點數 100 得到用於初始化的第一幀 2.第二幀 當前...