1、推導直接法BA,直接法的分類,三個假設及優劣
p1=⎣⎡uv1⎦⎤=Z11KP.p2=⎣⎡uv1⎦⎤=Z21K(RP+t)=Z21K(exp(ξ∧)P)1:3
優化相機的位姿,來尋找與 p1 更相似的 p2 。這同樣可以通過解一個優化問題,但此時最小化的不是重投影誤差,而是光度誤差(Photometric Error),也就是 P 的兩個像素的亮度誤差:e=I1(p1)−I2(p2)在直接法中,假設一個空間點在各個視角下,成像的灰度是不變的。有許多個(比如 N 個)空間點 Pi ,那麼,整個相機位姿估計問題變爲:ξminJ(ξ)=i=1∑NeiTei,ei=I1(p1,i)−I2(p2,i)給 exp(ξ) 左乘一個小擾動 exp(δξ),得:e(ξ⊕δξ)=I1(Z11KP)−I2(Z21Kexp(δξ∧)exp(ξ∧)P)≈I1(Z11KP)−I2(Z21K(1+δξ∧)exp(ξ∧)P)=I1(Z11KP)−I2(Z21Kexp(ξ∧)P+Z21Kδξ∧exp(ξ∧)P)記:qu=δξ∧exp(ξ∧)P=Z21Kq利用一階泰勒展開,有:e(ξ⊕δξ)=I1(Z11KP)−I2(Z21Kexp(ξ∧)P+u)≈I1(Z11KP)−I2(Z21Kexp(ξ∧)P)−∂u∂I2∂q∂u∂δξ∂qδξ=e(ξ)−∂u∂I2∂q∂u∂δξ∂qδξ ∂I2 /∂u 爲 u 處的像素梯度;
∂u/∂q 爲投影方程關於相機座標系下的三維點的導數。∂q∂u=[∂X∂u∂X∂v∂Y∂u∂Y∂v∂Z∂u∂Z∂v]=[Zfx00Zfy−Z2fxX−Z2fyY]∂q/∂δξ 爲變換後的三維點對變換的導數:∂δξ∂q=[I,−q∧]推導了誤差相對於李代數的雅可比矩陣:J=−∂u∂I2∂ξ∂u其中:∂δξ∂u=[Zfx00Zfy−Z2fxX−Z2fyY−Z2fxXY−fy−Z2fyY2fx+Z2fxX2Z2fyXY−ZfxYZfyX]然後使用 G-N 或L-M 計算增量,迭代求解。
直接法分類:
- 稀疏直接法通常我們使用數百個至上千個關鍵點,並且像 L-K 光流那樣,假設它周圍像素也是不變的。這種稀疏直接法不必計算描述子,並且只使用數百個像素,因此速度最快,但只能計算稀疏的重構。
- 考慮只使用帶有梯度的像素點,捨棄像素梯度不明顯的地方。這稱之爲半稠密(Semi-Dense)的直接法,可以重構一個半稠密結構。
- P 爲所有像素,稱爲稠密直接法。稠密重構需要計算所有像素(一般幾十萬至幾百個),因此多數不能在現有的 CPU 上實時計算,需要GPU 的加速。
直接法完全依靠優化來求解相機位姿。像素梯度引導着優化的方向。如果我們想要得到正確的優化結果,就必須保證大部分像素梯度能夠把優化引導到正確的方向。
優點:
- 可以省去計算特徵點、描述子的時間。
- 只要求有像素梯度即可,無須特徵點。因此,直接法可以在特徵缺失的場合下使用。比較極端的例子是隻有漸變的一張圖像。它可能無法提取角點類特徵,但可以用直接法估計它的運動。
- 可以構建半稠密乃至稠密的地圖,這是特徵點法無法做到的。
缺點:
- 非凸性——直接法完全依靠梯度搜索,降低目標函數來計算相機位姿。其目標函數中需要取像素點的灰度值,而圖像是強烈非凸的函數。這使得優化算法容易進入極小,只在運動很小時直接法才能成功。
- 單個像素沒有區分度。找一個和他像的實在太多了!——於是我們要麼計算圖像塊,要麼計算複雜的相關性。由於每個像素對改變相機運動的“意見”不一致。只能少數服從多數,以數量代替質量。
- 灰度值不變是很強的假設。如果相機是自動曝光的,當它調整曝光參數時,會使得圖像整體變亮或變暗。光照變化時亦會出現這種情況。特徵點法對光照具有一定的容忍性,而直接法由於計算灰度間的差異,整體灰度變化會破壞灰度不變假設,使算法失敗。針對這一點,目前的直接法開始使用更細緻的光度模型標定相機,以便在曝光時間變化時也能讓直接法工作。
2、什麼是閉環檢測?常用的方法有哪些?有沒有創新?
閉環檢測:
- 相機經過了同一個地方,採集到了相似的數據。迴環檢測的關鍵,就是如何有效地檢測出相機經過同一個地方這件事。可以爲後端的 Pose
Graph 提供更多的有效數據,使之得到更好的估計,特別是得到一個全局一致(GlobalConsistent)的估計。還可以利用迴環檢測進行重定位。
方法:
- 對任意兩張圖像都做一遍特徵匹配,根據正確匹配的數量確定哪兩個圖像存在關聯。
- Bag-of-Words(BoW)----k-means++、K 叉樹字典
創新:
3、簡單描述Ceres優化庫
Ceres 庫面向通用的最小二乘問題的求解,Ceres 求解的最小二乘問題最一般的形式如下(帶邊界的核函數最小二乘):minx s.t. 21∑iρi(∥fi(xi1,…xin)∥2)lj≤xj≤uj核函數 ρ(·),優化變量爲 x1 ,…,xn ,fi 稱爲代價函數(Cost function),在 SLAM 中亦可理解爲誤差項。lj 和 uj 爲第 j 個優化變量的上限和下限。在 Ceres 中,將定義優化變量 x 和每個代價函數 fi ,再調用 Ceres 進行求解。可以選擇使用 G-N 或者 L-M 進行梯度下降,並設定梯度下降的條件,Ceres 會在優化之後,將最優估計值返回
4、描述(擴展)卡爾曼濾波與粒子濾波。
KF:主要參考這篇博客https://blog.csdn.net/u010720661/article/details/63253509
EKF:
- KF主要針對的是線性系統,SLAM 中的運動方程和觀測方程通常是非線性函數,尤其是視覺 SLAM中的相機模型,需要使用相機內參模型以及李代數表示的位姿,更不可能是一個線性系統。
- 一個高斯分佈,經過非線性變換後,往往不再是高斯分佈,所以在非線性系統中,必須取一定的近似,將一個非高斯的分佈近似成一個高斯分佈。
把卡爾曼濾波器的結果拓展到非線性系統中來,稱爲擴展卡爾曼濾波器(Ex-tended Kalman Filter,EKF)。通常的做法是,在某個點附近考慮運動方程以及觀測方程的一階泰勒展開,只保留一階項,即線性的部分,然後按照線性系統進行推導。令 k−1 時刻的均值與協方差矩陣爲:
x^k−1,P^k−1卡爾曼增益KkKk=PkHT(HPkHT+Qk)−1預測和更新方程:x^k=xk+Kk(zk−h(xk)),P^k=(I−KkH)Pk
EKF的侷限:
- 濾波器方法在一定程度上假設了馬爾可夫性,也就是 k 時刻的狀態只與 k −1時刻相關,而與 k − 1 之前的狀態和觀測都無關。如果當前幀確實與很久之前的數據有關(例如迴環),那麼濾波器就會難以處理這種情況。
- EKF 濾波器僅在 x^k−1處做了一次線性化,但一階泰勒展開並不一定能夠近似整個函數。如果系統有強烈的非線性,那線性近似就只在很小範圍內成立,不能認爲在很遠的地方仍能用線性來近似。這就是 EKF 的非線性誤差,是它的主要問題所在。
- 從程序實現上來說,EKF 需要存儲狀態量的均值和方差,並對它們進行維護和更新。如果把路標也放進狀態的話,由於視覺 SLAM 中路標數量很大,這個存儲量是相當可觀的,且與狀態量呈平方增長(因爲要存儲協方差矩陣)。因此,EKF SLAM 普遍被認爲不可適用於大型場景。
通常認爲,在同等計算量的情況下,非線性優化能取得更好的效果。
粒子濾波:
主要參考博客:https://blog.csdn.net/piaoxuezhong/article/details/78619150
未完待續。。。。