ORB-SLAM3 Initializer.cpp函數(shù)解讀
來源:公眾號(hào)|3D視覺工坊(系投稿)
作者:Liam
「3D視覺工坊」技術(shù)交流群已經(jīng)成立,目前大約有12000人,方向主要涉及3D視覺、CV&深度學(xué)習(xí)、SLAM、三維重建、點(diǎn)云后處理、自動(dòng)駕駛、CV入門、三維測(cè)量、VR/AR、3D人臉識(shí)別、醫(yī)療影像、缺陷檢測(cè)、行人重識(shí)別、目標(biāo)跟蹤、視覺產(chǎn)品落地、視覺競(jìng)賽、車牌識(shí)別、硬件選型、學(xué)術(shù)交流、求職交流、ORB-SLAM系列源碼交流、深度估計(jì)等。工坊致力于干貨輸出,不做搬運(yùn)工,為計(jì)算機(jī)視覺領(lǐng)域貢獻(xiàn)自己的力量!歡迎大家一起交流成長(zhǎng)~
添加小助手微信:CV_LAB,備注學(xué)校/公司+姓名+研究方向即可加入工坊一起學(xué)習(xí)進(jìn)步。
QQ群「3D視覺研習(xí)社」,群號(hào):574432628
構(gòu)造函數(shù)
Initializer::Initializer(const Frame &ReferenceFrame, float sigma, int iterations)參數(shù):?參考幀(第一幀), 誤差, 迭代次數(shù)?操作:讀取參考幀的相機(jī)模型, 內(nèi)參, 去畸變的特征點(diǎn)等傳入?yún)?shù)
初始化:并行的計(jì)算前后兩幀的本質(zhì)矩陣和基礎(chǔ)矩陣,選出來評(píng)分高的恢復(fù)旋轉(zhuǎn)和平移
bool Initializer::Initialize(const Frame &CurrentFrame, const vector &vMatches12, cv::Mat &R21, cv::Mat &t21, vectorcv::Point3f &vP3D, vector&vbTriangulated)?參數(shù):?當(dāng)前幀(第二幀), 前后幀的匹配關(guān)系(), 參考幀到當(dāng)前幀的旋轉(zhuǎn), 參考幀到當(dāng)前幀的平移(==當(dāng)前幀指向參考幀==), 三角化后的點(diǎn), 特征是否被三角化過返回值:bool->初始化是否成功的標(biāo)志?操作:
vMatches12中的匹配關(guān)系以<==第一幀特征索引,第二幀特征索引==>存儲(chǔ)在mvMatches12中, 同時(shí)mvbMatched1[i]設(shè)置為true表示第一幀中該索引的特征點(diǎn)匹配成功
從匹配中不重復(fù)的隨機(jī)選擇mMaxIterations組點(diǎn),每組8個(gè)
開兩個(gè)線程同時(shí)計(jì)算單應(yīng)和基本矩陣
計(jì)算得分
選擇得分高的矩陣來恢復(fù)兩幀位姿
尋找最優(yōu)單應(yīng)矩陣
void Initializer::FindHomography(vector&vbMatchesInliers, float &score, cv::Mat &H21)?參數(shù): 匹配的Inliers, 最后的得分, 單應(yīng)矩陣?操作:
歸一化
利用選擇的mMaxIterations組匹配點(diǎn)用八點(diǎn)法計(jì)算單應(yīng)矩陣(ComputeH21(vPn1i,vPn2i))
恢復(fù)初始尺度(歸一化前的)
保留最高得分的單應(yīng)矩陣及對(duì)應(yīng)的匹配內(nèi)點(diǎn)
需要最優(yōu)基礎(chǔ)矩陣
void Initializer::FindFundamental(vector&vbMatchesInliers, float &score, cv::Mat &F21)?參數(shù): 匹配的Inliers, 最后的得分, 基礎(chǔ)矩陣?操作:
歸一化
利用選擇的mMaxIterations組匹配點(diǎn)用八點(diǎn)法計(jì)算基礎(chǔ)矩陣(ComputeF21(vPn1i,vPn2i))
恢復(fù)初始尺度(歸一化前的)
保留最高得分的基礎(chǔ)矩陣及對(duì)應(yīng)的匹配內(nèi)點(diǎn)
計(jì)算單應(yīng)矩陣
這樣就可以用一組匹配點(diǎn)構(gòu)造兩個(gè)約束(其實(shí)是三個(gè),但是三個(gè)線性相關(guān),所以只取前兩個(gè)),所以自由度為8的單應(yīng)矩陣需要四組匹配點(diǎn)就可以算出。?操作:
利用八組匹配點(diǎn)構(gòu)造A矩陣
利用SVD分解求解AX=0型的方程
最小特征值對(duì)應(yīng)的特征向量就是方程的解(可參考多視圖幾何第二版198-200頁(yè))
計(jì)算基礎(chǔ)矩陣
cv::Mat Initializer::ComputeF21(const vectorcv::Point2f &vP1,const vectorcv::Point2f &vP2) 參數(shù):
本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。