第七講: 視覺里程計1
1. 特徵點法
slam分爲視覺前端
和視覺後端
.前端也稱爲視覺里程計(VO). 它根據相鄰圖像的信息粗略估計相機的運動,給後端提供較好的初始值.
本講學習如果提取匹配特徵點,然後估計兩幀之間的相機運動和場景結構.
1.1. 特徵點
圖像本身是由亮度
和色彩
組成的矩陣.
特徵點:
- 樸素角點: 簡單,受環境,相機旋轉等影響.
- 人工設計的特徵點: 可重複性,可區別性,高效率性,本地性.
特徵點是由關鍵點和描述子組成:
- 關鍵點: 圖像中的位置
- 描述子: 附加信息,爲了更好的區別其他點.
描述子通常是一個向量,按照某種人爲設計的方式,描述了該關鍵點周圍像素的信息.設計原則: 外觀相似的特徵應該有相似的描述子.
ORB(Oriented FAST and Rotated BRIEF) 是目前非常具有代表性的實時圖像特徵.
ORB是質量與性能較好的折中.
1.2. ORB特徵
ORB由關鍵點
和描述子
組成.
關鍵點稱爲: Oriented FAST.是一種改進的FAST角點.
描述子稱爲: BRIEF(Binary Robust Independent Elementary Feature).
提取ORB特徵點的步驟爲:
- FAST角點提取: 找出圖像中的角點. 相較於原版FAST,ORB中計算了特徵點的主方向,爲後續的BRIEF描述子增加了旋轉不變性.
- BRIEF描述子: 對前一步中的特徵點的周圍進行描述.
FAST 關鍵點:
FAST是一種角點,主要檢測局部像素灰度變化明顯的地方.特點是速度快.
FAST特徵點:⎩⎪⎪⎪⎨⎪⎪⎪⎧優點:僅比較像素間亮度的差異速度快缺點:⎩⎪⎨⎪⎧特徵點很多且不確定−解決方法:指定要提取的角點數N,選取前N個具有最大響應值的點作爲最終角點的合不具有方向信息−解決方法:添加旋轉描述,其特徵的旋轉由灰度實心法實現存在尺度問題−解決方法:添加尺度描述,尺度不變性由構建圖像金字塔,並在金字塔每層檢驗角點來實現.
質心
:圖像塊灰度值作爲質心.
操作步驟如下:
-
在一個小的圖像塊B中,定義圖像塊的矩陣爲:
mpq=x,y∈B∑xpyqI(x,y),p,q={0,1}
-
通過矩可以找到圖像塊的質心
C=(m00m10,m00m01)
-
連接圖形塊的幾何中心O與質心C, 得到一個方向向量
OC
,於是特徵點的方向可以定義爲:
θ=arctan(m10m01)
通過以上信息,FAST便具有了尺度
與旋轉
的描述.提升了健壯性. 在ORB中把這種改進後的FAST稱爲:Oriented FAST.
BRIEF描述子:
提取關鍵點後對每個點計算其描述子.
BRIEF是一種二進制描述子
. 例如,取關鍵點附近的p和q,如果p比q大,則取1,否則取0,如果去了128對這樣的點,那麼描述子可以用一個128位的二進制數來表示.
與原始的BRIEF相比,ORB描述子具有良好的旋轉不變性.
1.3. 特徵匹配
特徵匹配解決了SLAM中數據關聯問題,即確定當前看到的路標與之前看到的路標之間的對於關係.
通過對圖像與圖像之間或者圖像與地圖之間的描述進行準確匹配,我們可以爲後續姿態估計,優化等操作減輕大量負擔.
如何兩個圖片中特徵點集合的對應關係呢?
- 暴力匹配: 對每個特徵點都測量描述子的距離,然後排序,取得最近的一個作爲匹配點.
描述子的距離,
對於浮點型的描述子使用歐氏距離
對於二進制類型的描述子使用漢明距離
- 快速近似最鄰近匹配: 更適合與匹配點的情況.它已經集成到了opencv當中.
2. 實踐: 特徵提取和匹配
目前主流的幾種特徵提速方法在OpenCV中已經集成.
以下爲openCV中圖像特徵提取,計算和匹配的過程.
代碼見:code\第七講
我們希望根據匹配的點對來估計相機的運動.
- 當相機爲單目時,我們只知道2D的像素座標,因而問題是根據兩組2D點估計運動.該問題用
對極幾何
來解決.
- 當相機爲雙目,RGB等,即有距離信息. 那麼就根據3D點估計運動. 常用
ICP
來解決.
- 如果有3D點及在其他相機的投影位置,也能估計相機的運動. 該問題是通過
PnP
求解.
3. D-2D:對極幾何
3.1. 對極約束
在第一幀的座標系下,設P的空間位置爲;
P=[X,Y,Z]T
根據第五講針孔相機模型,我們知道兩個像素點
p1,p2的像素位置爲:
s1p1=KP,s2p2=K(RP+t)
K爲相機的內參矩陣.
R,t爲相機的運動,也可以寫成李代數的形式.
如果使用齊次座標,那麼上式也可以寫成如下形式;
p1=KP,p2=K(RP+t)
取:
x1=K−1p1,x2=K−1p2
x1,x2是兩個像素點 歸一化平面的座標.帶入上式得:
x2=Rx1+t
兩邊同時左乘
t∧(^表示將向量變成矩陣),相當於兩側同時與t做外積:
t∧x2=t∧Rx1
然後同時左乘
x2T
x2Tt∧x2=x2Tt∧Rx1
因爲
t∧x2=0,所以上式化簡爲:
x2Tt∧Rx1=0
重新帶入
p1,p2得:
p2TK−Tt∧RK−1p1=0
以上兩個式子都成爲 對極約束.
它的幾何意義是
O1,P,O2三者共面. 対極約束中同時包含了 平移和旋轉.
把中間部分記做兩個矩陣:
於是進一步簡化対極約束;
E=r∧R,F=K−TEK−1,x2TEx1=p2TFp1=0
対極約束簡潔的給出了兩個匹配點的空間位置關系. 於是相機的位姿估計可以分爲以下步驟:
- 根據匹配點的像素位置求出E 或者 F
- 根據E或者F 求出
R,t
由於E和F只相差了相機內參,所以往往使用更簡潔的EK
3.2. 本質矩陣
本質矩陣
E=t∧R. 它是一個
3×3矩陣. 從E的構造方式看,有以下幾點需要注意:
- 本質矩陣由対極約束定義.由於対極約束是等式爲0的,所以對E乘以任意非零常數, 対極約束仍然滿足. 我們把這件事稱爲E在不同尺度下是等價的.
- 根據
E=t∧R ,課證明本質矩陣E的奇異值必定是
[σ,σ,0]T的形式. 這稱爲
本質矩陣的內在性質.
- 平移加旋轉共有6個自由度,所以
t∧R共有6個自由度.但是由於 尺度等價性, 實際上只有5個自由度.
使用8點法求解E.
⎣⎢⎢⎢⎡u11u21u12u22⋮u18u28u11v21u12v22⋮u18v28u11u12⋮u18v11u21v12u22⋮v18u28v11v21v12v22⋮v18v28v11v12⋮v18u21u22⋮u28v21v22⋮v2811⋮1⎦⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡e1e2e3e4e5e6e7e8⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=0
一聲個方程構成了線性方程組. 它的係數矩陣由特徵點位置構成,大小爲
8×9. e位於該矩陣的零空間中. 如果係數矩陣的秩爲8,那麼零空間的維數爲1,也就是e構成一條線.
如果係數矩陣的秩爲8,那麼上述方程可以解得E的值.
接下來根據估計的本質矩陣E,恢復出相機運動R,t.這個過程由奇異值分解(SVD)得到.
E=UΣVT
U,V爲正交矩陣,
Σ爲奇異值矩陣.
根據E的內在性質,
Σ=diag(σ,σ,0)
對於任意E,存在兩個可能的
t,R與之對應:
t1∧=URZ(2π)ΣUT,R1=URZT(2π)VTtt2∧=URZ(−2π)ΣUT,R2=URZT(−2π)VTt
RZ(2π)表示旋轉90度的旋轉矩陣. 同時,由於
−E等價於E,所以任意一個t取負號,會得到同樣的結果. 因此,從E分解得到
t,R,一個存在4種結果.
如下圖;
最後還有一個問題,線性方程組求解出E後,它可能不滿足E的內在性質:奇異值不爲
(σ,σ,0) 的形式.
對8點大求得的E進行SVD分解後,會得到奇異值矩陣
Σ=diag(σ,σ,0).取(
σ1⩾σ2⩾σ3):
E=Udiag(2σ1+σ2,2σ1+σ2,0)VT
最簡單的方法是將奇異值取
diag(1,1,0)
3.3. 單應矩陣
單應矩陣H:它描述了兩個平面之間的映射關係.
單應矩陣通常掃描處於共平面上的一些點在兩張圖像之間的變換關係.
經過計算我們可以得到一個直接描述圖像座標
p1到
p2之間的變換,把中間部分記做H:
p2=Hp1
把上式展開:
⎣⎡u2v21⎦⎤=⎣⎡h1h4h7h2h5h8h3h6h9⎦⎤⎣⎡u1v11⎦⎤
在實際中通常乘以一個非零因子,使得
h9=1,於是有:
u2=h7u1+h8v1+h9h1u1+h2v2+h3v2=h7u1+h8v1+h9h4u1+h5v1+h6
於是自由度爲8的單應矩陣可以通過4對匹配特徵點算出.即求解以下方程:
+h5v1+h6
於是自由度爲8的單應矩陣可以通過4對匹配特徵點算出.即求解以下方程: