雷达系列论文翻译(一):Least-Squares Fitting of Two 3-D Point Sets
Least-Squares Fitting of Two 3-D Point Sets
這是一篇非常老的論文,最關鍵的點其實是作者關于閉式解退化情況的描述
摘要
兩個點集{pi}\{p_i\}{pi?}和{pi′}\{p_i^{'}\}{pi′?};i=1,2,...,Ni = 1,2,...,Ni=1,2,...,N由pi′=Rpi+T+Nip_i^{'} = Rp_i + T + N_ipi′?=Rpi?+T+Ni?所關聯,這里RRR是旋轉矩陣,TTT是平移向量,NiN_iNi?是噪聲向量。給定{pi}\{p_i\}{pi?}和{pi′}\{p_i^{'}\}{pi′?},我們提出了一種算法來找到RRR和TTT的最小二乘解,這個方法基于3×33 \times 33×3矩陣的奇異值分解(SVD)。在計算時間方面,將此算法與兩種較早提出的算法進行了比較。
引言
在許多計算機視覺的應用,尤其是使用3-D點對的對應關系[1]來估計剛體的運動參數以及剛體相對于參考坐標系的位姿[2]中,我們遇到了下面的數學問題。我們給定兩個3-D點集{pi}\{p_i\}{pi?}和{pi′}\{p_i^{'}\}{pi′?};i=1,2,...,Ni = 1, 2, ...,Ni=1,2,...,N(這里pip_ipi?和pi′p_i^{'}pi′?是視為3×13 \times 13×1的列矩陣)
pi′=Rpi+T+Ni(1)p_i^{'} = Rp_i + T+N_i \tag{1} pi′?=Rpi?+T+Ni?(1)
這里RRR是3×33 \times 33×3的旋轉矩陣,TTT是平移向量(3×13 \times 13×1的列矩陣),NiN_iNi?是噪聲向量(我們假設旋轉是沿著一個通過原點的旋轉軸進行的)。我們想要找到一個RRR和TTT來最小化
Σ2=∑i=1N∣∣pi?(Rpi+T)∣∣2(2)\Sigma^2 = \sum_{i=1}^{N}{|| p_i - (Rp_i + T) ||^2} \tag{2} Σ2=i=1∑N?∣∣pi??(Rpi?+T)∣∣2(2)
Huang,Blostein和Margerum[3]提出了一種用于尋找解的迭代算法,Faugeras和Hebert提出了一種基于四元數的非迭代算法。在本文中,我們提出了一種新的非迭代算法,該算法涉及到3×33 \times 33×3矩陣的奇異值分解(SVD)。我們比較了三種算法的計算時間。
解耦平移和旋轉
根據[3]中所述,如果公式(1)的最小二乘解為R^\hat{R}R^和T^\hat{T}T^,則{pi′}\{p_i^{'}\}{pi′?}和{pi′′≡R^pi+T^}\{p_i^{''} \equiv \hat{R}p_i +\hat{T}\}{pi′′?≡R^pi?+T^}有著相同的質心,也就是說
p′=p′′.(3)p^{'} = p^{''}. \tag{3} p′=p′′.(3)
這里
p′=1N∑i=1Npi′.(4)p^{'} = \frac{1}{N} \sum_{i = 1}^{N}{p_i^{'}}. \tag{4} p′=N1?i=1∑N?pi′?.(4)
p′′=1N∑i=1Npi′′=R^p+T^(5)p^{''} = \frac{1}{N} \sum_{i=1}^{N}{p_i^{''}} = \hat{R}p + \hat{T} \tag{5} p′′=N1?i=1∑N?pi′′?=R^p+T^(5)
p=1N∑i=1Npip = \frac{1}{N} \sum_{i=1}^{N}{p_i} p=N1?i=1∑N?pi?
令
qi=pi?p(7)q_i = p_i - p \tag{7} qi?=pi??p(7)
qi′=pi′?p′(8)q_i^{'} = p_i^{'} - p^{'} \tag{8} qi′?=pi′??p′(8)
我們有
∑i=1N∣∣qi′?Rqi∣∣2(9)\sum_{i = 1}^{N}{|| q_i^{'} - Rq_{i} ||^2} \tag{9} i=1∑N?∣∣qi′??Rqi?∣∣2(9)
因此,原始的最小二乘問題可以被分為兩部分
(i) 尋找R^\hat{R}R^來最小化公式(9)中的Σ2\Sigma^2Σ2
(ii) 之后平移向量可以根據以下公式計算得到
T^=p′?R^p(10)\hat{T} = p^{'} - \hat{R}p \tag{10} T^=p′?R^p(10)
在下一部分,我們將會描述一種使用奇異值分解來求解第i部分的算法。
一種使用奇異值分解來尋找R^\hat{R}R^的算法
A.算法
Step 1:
從{pi}\{p_i\}{pi?},{pi′}\{p_i^{'}\}{pi′?}計算ppp和p′p^{'}p′,之后計算{qi}\{q_i\}{qi?}和{qi′}\{q_i^{'}\}{qi′?}
Step 2:
計算3×33 \times 33×3的矩陣
H=∑i=1Nqiqi′T(11)H = \sum_{i=1}^{N}{q_i {q_i^{'}}^T} \tag{11} H=i=1∑N?qi?qi′?T(11)
這里上標TTT定義為矩陣的轉置
Step 3:
對矩陣H進行SVD分解
H=UΛVT(12)H = U \Lambda V^T \tag{12} H=UΛVT(12)
Step 4:
計算
X=VUT(13)X = VU^T \tag{13} X=VUT(13)
Step 5:
計算矩陣X的行列式det(X)det(X)det(X)
如果det(X)=+1det(X) = +1det(X)=+1,則R^=X\hat{R} = XR^=X
如果det(X)=?1det(X) = -1det(X)=?1,則算法失敗(這種情況通常不會出現)
B.推導
展開公式(9)的右側
Σ2=∑i=1N(qi′?Rqi)T(qi′?Rqi)=∑i=1N(qi′Tqi′+qiTqi?qi′TRqi?qiTRTqi′)=∑i=1N(qi′Tqi′+qiTqi?2qi′TRqi)\Sigma^2 = \sum_{i=1}^{N}{ (q_i^{'} - Rq_i)^T (q_i^{'} - Rq_i) } \\ = \sum_{i=1}^{N}{( {q_i^{'}}^Tq_i^{'} + q_i^T q_i - {q_i^{'}}^TRq_i - q_i^T R^T q_i^{'} )} \\ = \sum_{i=1}^{N}{( {q_i^{'}}^Tq_i^{'} + q_i^T q_i - 2{q_i^{'}}^TRq_i )} Σ2=i=1∑N?(qi′??Rqi?)T(qi′??Rqi?)=i=1∑N?(qi′?Tqi′?+qiT?qi??qi′?TRqi??qiT?RTqi′?)=i=1∑N?(qi′?Tqi′?+qiT?qi??2qi′?TRqi?)
因此,最小化Σ2\Sigma^2Σ2等價于最大化
F=∑i=1Nqi′TRqi=Trace(∑i=1NRqiqi′T)=Trace(RH)(14)F = \sum_{i=1}^{N}{{q_i^{'}}^T R q_i} \\ = Trace(\sum_{i=1}^{N}{ Rq_i {q_i^{'}}^T}) \\ = Trace(RH) \tag{14} F=i=1∑N?qi′?TRqi?=Trace(i=1∑N?Rqi?qi′?T)=Trace(RH)(14)
這里
H=∑i=1Nqiqi′T(15)H = \sum_{i=1}^{N}{q_i {q_i^{'}}^T} \tag{15} H=i=1∑N?qi?qi′?T(15)
定理:
對于任何正定的矩陣AATAA^TAAT以及任何正交矩陣B
Trace(AAT)≥Trace(BAAT)Trace(AA^T) \geq Trace(BAA^T) Trace(AAT)≥Trace(BAAT)
定理證明:
令aia_iai?為矩陣AAA的第iii列,所以
Trace(BAAT)=Trace(ATBA)=∑i=1aiT(Bai)Trace(BAA^T) = Trace(A^TBA) = \sum_{i=1}{a_i^T(Ba_i)} Trace(BAAT)=Trace(ATBA)=i=1∑?aiT?(Bai?)
但是,根據施瓦茨不等式
aiT(Bai)≤(aiTai)(aiTBTBai)=aiTaia_i^T(B a_i) \leq \sqrt{(a_i^Ta_i)(a_i^T B^T B a_i)} = a_i^Ta_i aiT?(Bai?)≤(aiT?ai?)(aiT?BTBai?)?=aiT?ai?
因此Trace(BAAT)≤∑iaiTai=Trace(AAT)Trace(BAA^T) \leq \sum_{i}{a_i^Ta_i} = Trace(AA^T)Trace(BAAT)≤∑i?aiT?ai?=Trace(AAT)
對HHH進行SVDSVDSVD分解
H=UΛVT(16)H = U \Lambda V^T \tag{16} H=UΛVT(16)
這里UUU和VVV為3×33 \times 33×3的正交矩陣,Λ\LambdaΛ為具有非負元素的3×33 \times 33×3的對角矩陣,現在令
X=VUTX = VU^T X=VUT
我們有
XH=VUTUΛVT=VΛVT(17)XH = VU^TU \Lambda V^T = V \Lambda V^T \tag{17} XH=VUTUΛVT=VΛVT(17)
這里XHXHXH為正定對稱矩陣,因此,根據定理,對于任何的3×33 \times 33×3正交矩陣B
Trace(XH)≥Trace(BXH)(18)Trace(XH) \geq Trace(BXH) \tag{18} Trace(XH)≥Trace(BXH)(18)
因此,在所有的3×33 \times 33×3正交矩陣中,XXX最大化了公式(14)中的FFF,并且如果det(X)=+1det(X) = +1det(X)=+1,XXX是一個旋轉,這正是我們想要的。
然而,如果det(X)=?1det(X) = -1det(X)=?1,XXX是一個反射,這并不是我們想要的。幸運的是,這種退化的情況通常來說并不會發生,我們將會在下面的兩個章節中關于這種退化的細節。
退化:無噪聲的情況
假設公式(1)中對于所有iii,Ni=0N_i = 0Ni?=0。那么顯然存在一個解R^\hat{R}R^(這里R^\hat{R}R^是一個旋轉,也就是det(R^)=+1det(\hat{R}) = +1det(R^)=+1),并且這個R^\hat{R}R^對于{qi′}\{q_i^{'}\}{qi′?}和{R^qi}\{\hat{R}q_i\}{R^qi?}是全等的,因此Σ2=0\Sigma^2 = 0Σ2=0。從幾何層面來考慮,很容易看出存在三種可能性。
1){qi}\{q_i\}{qi?}不共面,那么旋轉的解是唯一的。進一步,沒有反射XXX可以使得Σ2=0\Sigma^2 = 0Σ2=0。因此,SVDSVDSVD算法給出了一個期望的解。
2){qi}\{q_i\}{qi?}是共面但是不共線的,這里存在一個唯一的旋轉和一個唯一的反射可以使得Σ2=0\Sigma^2 = 0Σ2=0。因此,SVDSVDSVD算法可能給出另外一個解。我們將看到,這種情況很容易解決。
3){qi}\{q_i\}{qi?}是共線的,這里有無數種旋轉和反射可以使得Σ2=0\Sigma^2 = 0Σ2=0.
現在我們回到共面的情況,通過檢查3×33 \times 33×3矩陣HHH的元素,可以很容易發現當且僅當矩陣H的三個奇異值之中的一個為0時點集{qi}\{q_i\}{qi?}是共面的。令三個奇異值為λ1>λ2>λ3=0\lambda_1 > \lambda_2 > \lambda_3 = 0λ1?>λ2?>λ3?=0。然后
H=λ1uiv1T+λ2u2v2T+0?u3v3T.(19)H = \lambda_1 u_i v_1^T + \lambda_2u_2v_2^T + 0 \cdot u_3 v_3^T. \tag{19} H=λ1?ui?v1T?+λ2?u2?v2T?+0?u3?v3T?.(19)
這里uiu_iui?和viv_ivi?分別是矩陣UUU和VVV對應的列。注意,改變u3u_3u3?或者v3v_3v3?的符號不會改變HHH。因此,如果X=VUTX = VU^TX=VUT最小化了Σ2\Sigma^2Σ2,則X′=V′UTX^{'} = V^{'}U^TX′=V′UT也是如此,這里
V′=[v1,v2,?v3](20)V^{'} = [v_1,v_2,-v_3] \tag{20} V′=[v1?,v2?,?v3?](20)
如果XXX是一個反射,則X′X^{'}X′是一個旋轉,反之依然。因此,如果SVDSVDSVD分解給出了一個解XXX且det(X)=?1det(X) = -1det(X)=?1,我們只需要令X′=V′UTX^{'} = V^{'}U^TX′=V′UT,這是我們需要的旋轉。
我們順便注意到,當且僅當矩陣HHH的三個奇異值中的兩個是相等時,{qi}\{q_i\}{qi?}是共線的。
退化:帶噪聲的情況
如果{qi}\{q_i\}{qi?}或者{qi′}\{q_i^{'}\}{qi′?}是共面的,那么很容易證明前面的討論仍然是有效的,除了Σ2\Sigma^2Σ2不再為0。因此,如果SVDSVDSVD算法給出了一個反射X=VUTX = VU^TX=VUT,我們只需要令X′=V′UTX^{'} = V^{'}U^TX′=V′UT,這是我們需要的旋轉。一種特殊的情況是當N=3N=3N=3并且{qi}\{q_i\}{qi?}或者{qi′}\{q_i^{'}\}{qi′?}是共面的點集。
我們無法處理的情況是SVDSVDSVD算法給出了一個det(X)=?1det(X) = -1det(X)=?1的XXX,并且HHH的奇異值均不為0時。這意味著{qi}\{q_i\}{qi?}和{qi′}\{q_i^{'}\}{qi′?}都是共面的點集,但是沒有一個旋轉可以使得Σ2\Sigma^2Σ2比反射計算的值更小。這種情況只會發生在噪聲NiN_iNi?非常大時。在這種情況下,最小二乘解可能無論如何都是無效的。一種更好的方法是使用類似RANSAC的方法來去除外點。
算法總結
使用前述的方法,我們可以得到
X=VUTX = VU^T X=VUT
1)如果det(X)=+1det(X) = +1det(X)=+1,則XXX就是我們期望的旋轉的解
2)如果det(X)=?1det(X) = -1det(X)=?1,則XXX是一個反射,對于這種情況,我們有以下兩種更處理方法
- 如果矩陣HHH的任何一個奇異值為0,則期望的旋轉矩陣為
X=V′UTX = V^{'}U^T X=V′UT
這里V′V^{'}V′是通過改變矩陣VVV第三列的符號獲得的。 - 如果矩陣HHH的任何一個奇異值都不為0,則最小二乘方法可能是無效的,我們需要使用類似RANSAC的技術。
計算時間需求
在VAX 11/780上進行計算機模擬,以在時間需求方面比較三種算法(SVD,四元數,迭代)。在每次模擬中,都會生成一組3D點{pi}\{p_i\}{pi?}。他們隨機分布在一個中心為(0,0,0)的尺寸為6×6×66\times6\times66×6×6的立方體中。然后將點{pi}\{p_i\}{pi?}平移(80,60,70),接著繞著通過原點并且方向余弦為(0.6,0.7,0.39)的旋轉軸旋轉75°75^{\degree}75°,最后在結果點的每一個坐標上添加均值為0,標準差為0.5的高斯隨機噪聲來計算得到{pi′}\{p_i^{'}\}{pi′?}。然后使用三種算法來估計R^\hat{R}R^和T^\hat{T}T^,對應的CPU使用時間如表I所示。對于迭代算法,迭代次數在括號中給出。
我們注意到,SVD和四元數算法的計算時間需求是可比的,而迭代算法需要更長的時間。但是,在迭代算法中,解的計算精度為7位。如果我們可以接受百分之十的精度,那么迭代次數可以減少2-3倍。此外,收斂速率可以通過超松弛來增加。
參考文獻
總結
以上是生活随笔為你收集整理的雷达系列论文翻译(一):Least-Squares Fitting of Two 3-D Point Sets的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态毕业设计答辩PPT模板
- 下一篇: 个人观点:Cisco和Juniper认证