日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORB-SLAM2系列第三章—— 地图初始化

發布時間:2023/12/3 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORB-SLAM2系列第三章—— 地图初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、為什么需要地圖初始化?
  • 二、多視圖幾何基礎
    • 1.對極約束示意圖
    • 2.H矩陣求解原理
    • 3.哪個奇異向量是最優解?
    • 3.求解基礎矩陣F
    • 4.SVD
    • 5.單目投影恢復3D點
  • 三、 卡方檢驗
    • 1.為什么要引用卡方檢驗?
    • 2.卡方分布假設檢驗步驟?
    • 3.ORB-SLAM2中的卡方檢測剔除外點策略
  • 四、單目SFM地圖初始化
    • 1.為什么要歸一化?
    • 2.具體歸一化操作
    • 3.檢查位姿的有效性
  • 五、 雙目地圖初始化:稀疏立體匹配
    • 1.雙目相機
    • 2.稀疏立體匹配原理
    • 3.亞像素插值


前言

迎瀏覽我的SLAM專欄,包括slam安裝運行、代碼注釋、原理詳解,一起加油淦穿SLAM。


一、為什么需要地圖初始化?

在ORB-SLAM2中初始化和使用的傳感器類型有關,其中單目相機模式初始化相對復雜,需要運行一段時間才能成功初始化。而雙目相機、
RGB-D相機模式下比較簡單,一般從第一幀開始就可以完成初始化。
為什么不同傳感器類型初始化差別這么大呢?
我們從最簡單的RGB-D相機初始化來說,因為該相機可以直接輸出RGB圖像和對應的深度圖像,所以每個像素點對應的深度值是確定的,也
就是說,我在第一幀提取了特征點后,特征點對應的三維點在空間的絕對坐標是可以計算出來的(需要用到內參)。
對于雙目相機來說,也可以通過第一幀左右目圖像立體匹配來得到特征點對應的三維點在空間的絕對坐標。因為第一幀的三維點是作為地圖
來實現跟蹤的,所以這些三維點我們也稱為地圖點。所以理論來說,雙目相機、RGB-D相機在第一幀就可以完成初始化。
而對于單目相機來說,僅僅有第一幀無法得到三維點,想要初始化,需要像雙目相機那樣去進行立體匹配。

二、多視圖幾何基礎

1.對極約束示意圖

2.H矩陣求解原理


等式左邊兩項分別用A, X表示,則有:
AX = 0
一對點提供兩個約束等式,單應矩陣H總共有9個元素,8個自由度(尺度等價性),所以需要4對點提供8個約束方程就可以求解。

3.哪個奇異向量是最優解?

為什么VT的第9個奇異向量就是最優解?
Ah=0 對應的代價函數

最優解是導數為0

問題就轉換為求ATA的最小特征值向量

可見 的特征向量就是 的特征向量。因此求解得到V 之后取出最后一行奇異值向量作為f的最優值,然后整理成3維矩陣形式。(其實其他行的奇異值向量也是一個解,但是不是最優解)

3.求解基礎矩陣F

推導F矩陣約束方程

4.SVD

SVD分解結果

假設我們使用8對點求解,A 是 8x9 矩陣,分解后

U 是左奇異向量,它是一個8x8的 正交矩陣,
V 是右奇異向量,是一個 9x9 的正交矩陣, 是V的轉置
D是一個8 x 9 對角矩陣,除了對角線其他元素均為0,對角線元素稱為奇異值,一般來說奇異值是按照從大到小的順序降序排列。因為每個
奇異值都是一個殘差項,因此最后一個奇異值最小,其含義就是最優的殘差。因此其對應的奇異值向量就是最優值,即最優解。
VT中的每個列向量對應著D中的每個奇異值,最小二乘最優解就是VT對應的第9個列向量,也就是基礎矩陣F的元素。這里我們先記做
Fpre,因為這個還不是最終的F。

F矩陣秩為2
基礎矩陣 F 有個很重要的性質,就是秩為2,可以進一步約束求解準確的F
上面的方法使用 對應的第9個列向量構造的Fpre 秩通常不為2,我們可以繼續進行SVD分解。

其最小奇異值人為置為0,這樣F矩陣秩為2

此時的F就是最終得到的基礎矩陣。

5.單目投影恢復3D點

等式左邊兩項分別用A, X表示,則有

SVD求解,右奇異矩陣的最后一行就是最終的解。


三、 卡方檢驗

1.為什么要引用卡方檢驗?

以特定概率分布為某種情況建模時,事物長期結果較為穩定,能夠清晰進行把握。比如拋硬幣實驗。
但是期望與事實存在差異怎么辦?偏差是正常的小幅度波動?還是建模錯誤?此時,利用卡方分布分析結果,排除可疑結果。
簡單來說:當事實與期望不符合情況下使用卡方分布進行檢驗,看是否系統出了問題,還是屬于正常波動.

檢查實際結果與期望結果之間何時存在顯著差異。
1、檢驗擬合程度:也就是說可以檢驗一組給定數據與指定分布的吻合程度。如:用它檢驗抽獎機收益的觀察頻數與我們所期望的吻合程
度。
2、檢驗兩個變量的獨立性:通過這個方法檢查變量之間是否存在某種關系。

2.卡方分布假設檢驗步驟?

1、確定要進行檢驗的假設(H0)及其備擇假設H1.
2、求出期望E.
3、確定用于做決策的拒絕域(右尾).
4、根據自由度和顯著性水平查詢檢驗統計量臨界值.
5、查看檢驗統計量是否在拒絕域內.
6、做出決策.
決策原則:
如果位于拒絕域內我們拒絕原假設H0,接受H1。
如果不在拒絕域內我們接受原假設H0,拒絕H1
檢驗統計量38.272 > 9.49 位于拒絕域內

檢驗統計量拒絕域內外判定:
1、求出檢驗統計量a
2、通過自由度和顯著性水平查到拒絕域臨界值b
3、a>b則位于拒絕域內,反之,位于拒絕域外。

這就不寫例子了,詳見張宇

3.ORB-SLAM2中的卡方檢測剔除外點策略

誤差的定義:
就特征點法的視覺SLAM而言,一般會計算重投影誤差。具體而言,記U為特征點的2D位置,U-為由地圖點投影到圖像上的2D位置。重投影誤差為

重投影誤差服從高斯分布


其中



為多維標準正態分布。
也就是說不同金字塔層提取的特征,計算的重投影誤差都被歸一化了,或者說去量綱化了,那么,我們只用一個閾值就可以了。
可見:
金字塔層數越高,圖像分辨率越低,特征提取的精度也就越低,因此協方差越大
單目投影為2自由度,在0.05的顯著性水平(也就是95%的準確率)下,卡方統計量閾值為5.99
雙目投影為3自由度,在0.05的顯著性水平(也就是95%的準確率)下,卡方統計量閾值為7.81
雙目匹配到的特征點在右圖中的x坐標為 ,重投影后計算得到特征點左圖的x坐標 ,根據視差

從而得到重投影后右圖中特征點x坐標

disparity就是另一個自由度。
LocalMapping.cc 里面

const float &sigmaSquare1 = mpCurrentKeyFrame->mvLevelSigma2[kp1.octave]; const float x1 = Rcw1.row(0).dot(x3Dt)+tcw1.at<float>(0); const float y1 = Rcw1.row(1).dot(x3Dt)+tcw1.at<float>(1); const float invz1 = 1.0/z1; if(!bStereo1) { float u1 = fx1*x1*invz1+cx1; float v1 = fy1*y1*invz1+cy1; float errX1 = u1 - kp1.pt.x; float errY1 = v1 - kp1.pt.y; // 基于卡方檢驗計算出的閾值(假設測量有一個像素的偏差)自由度2 if((errX1*errX1+errY1*errY1)>5.991*sigmaSquare1) continue; } else { float u1 = fx1*x1*invz1+cx1; float u1_r = u1 - mpCurrentKeyFrame->mbf*invz1; // 根據視差公式計算假想的右目坐標 float v1 = fy1*y1*invz1+cy1; float errX1 = u1 - kp1.pt.x; float errY1 = v1 - kp1.pt.y; float errX1_r = u1_r - kp1_ur; // 自由度為3 if((errX1*errX1+errY1*errY1+errX1_r*errX1_r)>7.8*sigmaSquare1) continue; }

四、單目SFM地圖初始化

歸一化對應函數Initializer::Normalize

1.為什么要歸一化?

Ah=0
矩陣A是利用8點法求基礎矩陣的關鍵,所以Hartey就認為,利用8點法求基礎矩陣不穩定的一個主要原因就是原始的圖像像點坐標組成的系
數矩陣A不好造成的,而造成A不好的原因是像點的齊次坐標各個分量的數量級相差太大。基于這個原因,Hartey提出一種改進的8點法,在
應用8點法求基礎矩陣之前,先對像點坐標進行歸一化處理,即對原始的圖像坐標做同向性變換,這樣就可以減少噪聲的干擾,大大的提高8
點法的精度。
預先對圖像坐標進行歸一化有以下好處:

  • 能夠提高運算結果的精度
  • 利用歸一化處理后的圖像坐標,對任何尺度縮放和原點的選擇是不變的。歸一化步驟預先為圖像坐標選擇了一個標準的坐標系中,消除了坐標變換對結果的影響。
    歸一化操作分兩步進行,首先對每幅圖像中的坐標進行平移(每幅圖像的平移不同)使圖像中匹配的點組成的點集的形心(Centroid)移動
    到原點;接著對坐標系進行縮放使得各個分量總體上有一樣的平均值,各個坐標軸的縮放相同的

使用歸一化的坐標雖然能夠在一定程度上消除噪聲、錯誤匹配帶來的影響,但還是不夠的。
參考:
https://www.cnblogs.com/wangguchangqing/p/8214032.html

2.具體歸一化操作


疑問:變換矩陣T為何這樣?

答案:就是把上述變換用矩陣表示了而已

3.檢查位姿的有效性


五、 雙目地圖初始化:稀疏立體匹配

1.雙目相機

2.稀疏立體匹配原理

函數ComputeStereoMatches()
兩幀圖像稀疏立體匹配
*輸入:兩幀立體矯正后的圖像對應的orb特征點集
*過程:
1.行特征點統計
2.粗匹配
3.精確匹配SAD
4.亞像素精度優化
5.最有視差值/深度選擇
6.刪除離缺點(outliers)
*輸出:稀疏特征點視差圖/深度圖和匹配結果

3.亞像素插值

總結

以上是生活随笔為你收集整理的ORB-SLAM2系列第三章—— 地图初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。