重慶大渡口營銷型網(wǎng)站建設公司哪家專業(yè)win7系統(tǒng)優(yōu)化軟件
本文總結視覺SLAM中常用的光流法與直接法
1、Lucas-Kanade光流法
相機所拍攝到的圖像隨相機視角的變化而變化,這種變化也可以理解為圖像中像素的反向移動?!肮饬鳌?#xff08;Optical Flow)是指通過分析連續(xù)圖像幀來估計場景中像素或特征點的運動的技術,即根據(jù)連續(xù)的兩張圖片和已知某個固定的空間點在 t t t時刻對應的的像素坐標 q \mathbf{q} q,估計其他時刻該空間點對應的像素坐標 p \mathbf{p} p光流法常用算法為LK光流法
LK光流法常用算法為常用的光流法,在LK光流法中,認為圖像中每個像素坐標 [ u , v ] T [u,v]^{T} [u,v]T處的灰度都是隨時間 t t t變化的函數(shù),且做如下兩條假設:
- 灰度不變假設:同一空間點對應的像素坐標的灰度值,在各個圖像中是不變的
- 局部運動一致假設:相鄰區(qū)域內的像素具有相同的運動
1.1、解析解法
設對應于同一空間點的像素隨時間變化的函數(shù)為 ( u ( t ) , v ( t ) ) (u(t),v(t)) (u(t),v(t)),根據(jù)灰度不變假設,存在固定灰度值 C C C,有
I ( u ( t ) , v ( t ) , t ) = C (1) I(u(t),v(t),t)=C\tag{1} I(u(t),v(t),t)=C(1)
在上式中,對 t t t求導得到
? I ? u ? u ? t + ? I ? v ? v ? t + ? I ? t = 0 (2) \frac{\partial{I}}{\partial{u}}\frac{\partial{u}}{\partial{t}}+\frac{\partial{I}}{\partial{v}}\frac{\partial{v}}{\partial{t}}+\frac{\partial{I}}{\partial{t}}=0\tag{2} ?u?I??t?u?+?v?I??t?v?+?t?I?=0(2)
? t u = ? u ? t , ? t v = ? v ? t \nabla_{t}u=\frac{\partial{u}}{\partial{t}},\nabla_{t}v=\frac{\partial{v}}{\partial{t}} ?t?u=?t?u?,?t?v=?t?v?為 x x x軸, y y y軸方向上的像素移動速度,這兩個量也是LK光流法的求解目標, ? u I = ? I ? u , ? v I = ? I ? v \nabla_{u}I=\frac{\partial{I}}{\partial{u}},\nabla_{v}I=\frac{\partial{I}}{\partial{v}} ?u?I=?u?I?,?v?I=?v?I?為灰度在 x , y x,y x,y方向上的梯度,也可稱為像素梯度, ? t I = ? I ? t \nabla_{t}I=\frac{\partial{I}}{\partial{t}} ?t?I=?t?I?為固定點處灰度對時間的導數(shù)
( 2 ) (2) (2)可以化簡為
[ ? u I , ? v I ] [ ? t u ? t v ] = ? ? t I (3) [\nabla_{u}I,\nabla_{v}I]\begin{bmatrix}\nabla_{t}u\\\nabla_{t}v\end{bmatrix}=-\nabla_{t}I\tag{3} [?u?I,?v?I][?t?u?t?v?]=??t?I(3)
令 w = [ ? t u ? t v ] \mathbf{w}=\begin{bmatrix}\nabla_{t}u\\\nabla_{t}v\end{bmatrix} w=[?t?u?t?v?],上式是一個二元一次方程,僅靠該方程無法計算 w \mathbf{w} w,還需引入其他約束。
根據(jù)局部運動一致假設,可以認為像素 q i \mathbf{q}_{i} qi?附近的某鄰域內全部像素 q j , j = 1 , ? , w \mathbf{q}_{j},j=1,\cdots,w qj?,j=1,?,w再 Δ t \Delta{t} Δt時間段內具有相同的運動,因此 ( 3 ) (3) (3)可以寫成
[ ? u I 1 ( q 1 ) , ? v I 1 ( q 1 ) ? ? u I 1 ( q w ) , ? v I 1 ( q w ) ] w = [ ? ? t I ( q 1 ) ? ? ? t I ( q w ) ] (4) \begin{bmatrix}\nabla_{u} I_{1}(\mathbf{q}_{1}),\nabla_{v} I_{1}(\mathbf{q}_{1})\\\vdots\\ \nabla_{u} I_{1}(\mathbf{q}_{w}),\nabla_{v} I_{1}(\mathbf{q}_{w})\end{bmatrix}\mathbf{w}=\begin{bmatrix}-\nabla_{t}I(\mathbf{q}_{1})\\\vdots\\-\nabla_{t}I(\mathbf{q}_{w})\end{bmatrix}\tag{4} ?????u?I1?(q1?),?v?I1?(q1?)??u?I1?(qw?),?v?I1?(qw?)?????w=??????t?I(q1?)???t?I(qw?)?????(4)
其中
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}? \nabla_{u} I_{…
記 ( 4 ) (4) (4)中系數(shù)矩陣為 A \mathbf{A} A,等號右側矩陣為 b \mathbf b,則方程變?yōu)?br /> A w = b \mathbf{A}\mathbf{w}=\mathbf Aw=b
上式是關于 w \mathbf{w} w的超定方程組,可以通過最小二乘的方式求解,即令
w ? = arg ? min ? w ∥ A w ? b ∥ 2 (6) \mathbf{w}^{\ast}=\underset{\mathbf{w}}{\arg\min}\,\|\mathbf{A}\mathbf{w}-\mathbf\|^{2}\tag{6} w?=wargmin?∥Aw?b∥2(6)
根據(jù)§1,容易求出 w ? \mathbf{w}^{\ast} w?,根據(jù) q i + w ? Δ t \mathbf{q}_{i}+\mathbf{w}^{\ast}\Delta{t} qi?+w?Δt即可計算新像素位置
1.2、優(yōu)化解法
通過最小化兩張圖像對應像素鄰域內的灰度差也可以求出給定點 q \mathbf{q} q在第二張圖像中的對應像素 p \mathbf{p} p,即
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}? \mathbf{p}^{\a…
e j \mathbf{e}_{j} ej?對 p \mathbf{p} p的雅可比矩陣為
J j = ? e j ? p = [ ? ? u I 2 ( p j ) ? ? v I 2 ( p j ) ] (8) \mathbf{J}_{j}=\frac{\partial\mathbf{e}_{j}}{\partial\mathbf{p}}=\begin{bmatrix}-\nabla_{u}I_{2}(\mathbf{p}_{j})\\ -\nabla_{v}I_{2}(\mathbf{p}_{j})\end{bmatrix}\tag{8} Jj?=?p?ej??=[??u?I2?(pj?)??v?I2?(pj?)?](8)
再求出
H k = ∑ j = 1 w J j J j T b k = ∑ j = 1 w J j T e j \mathbf{H}_{k}=\sum_{j=1}^{w}\mathbf{J}_{j}\mathbf{J}_{j}^{T}\quad\quad \mathbf_{k}=\sum_{j=1}^{w}\mathbf{J}^{T}_{j}\mathbf{e}_{j} Hk?=j=1∑w?Jj?JjT?bk?=j=1∑w?JjT?ej?
增量方程為如下式,可以通過增量方程計算更新量
H k Δ p k = ? b k \mathbf{H}_{k}\Delta\mathbf{p}_{k}=-\mathbf_{k} Hk?Δpk?=?bk?
得到更新量后,第二張圖片中像素坐標可以更新為
p k + 1 = p k + Δ p k \mathbf{p}_{k+1}=\mathbf{p}_{k}+\Delta\mathbf{p}_{k} pk+1?=pk?+Δpk?
2、直接法
直接法并不單獨估計第二張圖片中的像素點位置,而是對第一張圖片中的像素點,根據(jù)相機位姿估計值尋找其在第二張圖片中對應的像素位置,并通過圖片中對應像素的灰度差不斷優(yōu)化相機位姿變換,得到最優(yōu)位姿變換,同時使兩張圖片的灰度差最小。下面進行詳細說明。
已知像素 q i , i = 1 , ? , n \mathbf{q}_{i},i=1,\cdots,n qi?,i=1,?,n和其對應的深度,及攝像機內參矩陣
K = [ f x 0 c x 0 f y c y 0 0 1 ] \mathbf{K}=\left[\begin{array}{ccc} f_{x}&0&c_{x}\\ 0&f_{y}&c_{y}\\ 0&0&1 \end{array}\right] K=???fx?00?0fy?0?cx?cy?1????
可以還原出三維空間位置 x i \mathbf{x}_{i} xi?,令 X i = [ x i 1 ] ∈ R 4 \mathbf{X}_{i}=\begin{bmatrix}\mathbf{x}_{i}\\1\end{bmatrix}\in\mathbb{R}^{4} Xi?=[xi?1?]∈R4,并記從第一張圖片到第二張圖片對應的相機位姿變換為 T ∈ S E ( 3 ) \mathbf{T}\in SE(3) T∈SE(3),則 x i \mathbf{x}_{i} xi?在第二個相機坐標系下的空間坐標為
y i = ( T X i ) 1 : 3 = [ X , Y , Z ] T \mathbf{y}_{i}=(\mathbf{T}\mathbf{X}_{i})_{1:3}=[X,Y,Z]^{T} yi?=(TXi?)1:3?=[X,Y,Z]T
對應的像素坐標為
p i = 1 Z ( K y i ) 1 : 2 \mathbf{p}_{i}=\frac{1}{Z}(\mathbf{K}\mathbf{y}_{i})_{1:2} pi?=Z1?(Kyi?)1:2?
直接法求解優(yōu)化問題
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}? \mathbf{T}^{\a…
暫時省略下標,根據(jù)鏈式求導法則得到
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}? \frac{\partial…
容易得到
? p ? y = [ f x Z 0 ? f x X Z 2 0 f y Z ? f x Y Z 2 ] ? y ? T = [ I , ? y ∧ ] \frac{\partial{\mathbf{p}}}{\partial\mathbf{y}}=\begin{bmatrix} \frac{f_{x}}{Z}&0&-\frac{f_{x}X}{Z^{2}}\\ 0&\frac{f_{y}}{Z}&-\frac{f_{x}Y}{Z^{2}} \end{bmatrix}\quad\quad\frac{\partial\mathbf{y}}{\partial\mathbf{T}}=[\mathbf{I},-\mathbf{y}^{\wedge}] ?y?p?=[Zfx??0?0Zfy????Z2fx?X??Z2fx?Y??]?T?y?=[I,?y∧]
因此 ( 10 ) (10) (10)后兩項可以寫成
? p ? T = ? p ? y ? y ? T = [ f x Z 0 ? f x X Z 2 ? f x X Y Z 2 f x + f x X 2 Z 2 ? f x Y Z 0 ? f y Z ? f x Y Z 2 ? f y ? f y Y 2 Z 2 f x X Y Z 2 f x X Z ] (11) \frac{\partial\mathbf{p}}{\partial\mathbf{T}}=\frac{\partial\mathbf{p}}{\partial\mathbf{y}}\frac{\partial\mathbf{y}}{\partial\mathbf{T}}=\begin{bmatrix} \frac{f_{x}}{Z}&0&-\frac{f_{x}X}{Z^{2}}&-\frac{f_{x}XY}{Z^{2}}&f_{x}+\frac{f_{x}X^{2}}{Z^{2}}&-\frac{f_{x}Y}{Z}\\ 0&-\frac{f_{y}}{Z}&-\frac{f_{x}Y}{Z^{2}}&-f_{y}-\frac{f_{y}Y^{2}}{Z^{2}}&\frac{f_{x}XY}{Z^{2}}&\frac{f_{x}X}{Z} \end{bmatrix}\tag{11} ?T?p?=?y?p??T?y?=[Zfx??0?0?Zfy????Z2fx?X??Z2fx?Y???Z2fx?XY??fy??Z2fy?Y2??fx?+Z2fx?X2?Z2fx?XY???Zfx?Y?Zfx?X??](11)
故 ( 10 ) (10) (10)又可以寫成
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}? \frac{\partial…
問題 ( 9 ) (9) (9)的雅可比矩陣為
J i = ? e i ? T \mathbf{J}_{i}=\frac{\partial\mathbf{e}_{i}}{\partial\mathbf{T}} Ji?=?T?ei??
由此得到
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}?\mathbf{H}_{k}=…
則更新量可以通過下式計算
H k Δ T k = ? b k \mathbf{H}_{k}\Delta\mathbf{T}_{k}=-\mathbf_{k} Hk?ΔTk?=?bk?
并通過下式更新
T k + 1 = E x p ( Δ T k ) T k \mathbf{T}_{k+1}=\mathrm{Exp}(\Delta\mathbf{T}_{k})\mathbf{T}_{k} Tk+1?=Exp(ΔTk?)Tk?
最終得到最優(yōu)的位姿變換
實驗
直接法在kitti數(shù)據(jù)集上的效果如下圖,可以看到追蹤效果良好
附錄
§1、標準最小二乘問題
標準最小二乘問題對給定 A ∈ R M × N \mathbf{A}\in\mathbb{R}^{M\times{N}} A∈RM×N,計算 x ? ∈ R N \mathbf{x}^{\ast}\in\mathbb{R}^{N} x?∈RN,使得
KaTeX parse error: No such environment: align* at position 8: \begin{?a?l?i?g?n?*?}? \mathbf{x}^{\a…
首先對 A \mathbf{A} A進行SVD分解
A = U [ Σ r × r O O O ] V T \mathbf{A}=\mathbf{U} \begin{bmatrix} \boldsymbol\Sigma_{r\times{r}}&\mathbf{O}\\ \mathbf{O}&\mathbf{O} \end{bmatrix}\mathbf{V}^{T} A=U[Σr×r?O?OO?]VT
則 A \mathbf{A} A的偽逆為
A ? = V [ Σ r × r ? 1 O O O ] U T (A2) \mathbf{A}^{\dagger}=\mathbf{V} \begin{bmatrix} \boldsymbol\Sigma_{r\times{r}}^{-1}&\mathbf{O}\\ \mathbf{O}&\mathbf{O} \end{bmatrix}\mathbf{U}^{T}\tag{A2} A?=V[Σr×r?1?O?OO?]UT(A2)
可以證明,滿足 ( A 1 ) \mathrm{(A1)} (A1)的模長最小的解為
x ? = A ? b (A3) \mathbf{x}^{\ast}=\mathbf{A}^{\dagger}\mathbf\tag{A3} x?=A?b(A3)
特別地,當 r a n k ( A ) = N \mathrm{rank}(\mathbf{A})=N rank(A)=N時, A ? = ( A T A ) ? 1 A \mathbf{A}^{\dagger}=(\mathbf{A}^{T}\mathbf{A})^{-1}\mathbf{A} A?=(ATA)?1A, ( A 1 ) \mathrm{(A1)} (A1)僅有如下一個解
x ? = ( A T A ) ? 1 A b (A4) \mathbf{x}^{\ast}=(\mathbf{A}^{T}\mathbf{A})^{-1}\mathbf{A}\mathbf\tag{A4} x?=(ATA)?1Ab(A4)