SVD分解(奇異值分解)求旋轉矩陣
參考文獻:http://igl.ethz.ch/projects/ARAP/svd_rot.pdf
一 問題描述
假設P={p1,p2,...,pn}和Q={q1,q2,...,qn}是兩組Rd空間中的對應點集,現在想要根據這個兩個點集的資料來計算出它們之間的剛性轉置資訊,可以知道這其實是一個最小二乘求優問題,問題可以用如下計算式描述:
其中wi>0,是點集中每個點對的權重。
要求(1)式中的最小值,即為求式中對R和t求導數為0的解。
二 計算位移
將(1)式中的R設為不變數對t進行求導,同時令F(t)=(R,t),對F(t)求導可得:
從上可以看出,問題經過轉化後變得更加簡單,對原來的點集做一個減中心點的預處理,然後再求兩個最小二乘的旋轉量。
三 計算旋轉量
將(8)式用矩陣表示形式展開,可得:
(由於旋轉矩陣R是正交矩陣,因而有RRT = I)。同時可以知道上式中yiTRxi和xiTRTyi都是標量,而一個標量的轉置仍然等於標量本身,因而有:
現在變成要求(11)式的最小值,而該式中只有一項與R有關,其他兩項(xiTxi和yiTyi)都是常量,所以問題轉換為求其中一項可變數的最小值,即
(14)式中的轉換是將累加轉換成矩陣相乘,其中W是n×n的對角矩陣,X和Y是3×n的矩陣,這些矩陣相乘後的跡就等於等式左邊的值。同時,對於矩陣的跡,有如下變換關係:
(18)式中最後一步的變換也用到了(15)式的性質。由於U、R、V都是正交矩陣,那麼M=V
由上述兩式可以知道,要求最大跡,就必須使得mii的值等於1,而M又是正交矩陣,那麼M就必然是單位矩陣,即有
I = M = VTRU => V = RU ⇒ R = VUT(21)
四 旋轉結果校正
到上面(21)式為止,求得的R是最優的正交矩陣,但是這個正交矩陣既可以是旋轉矩陣,也可以是反射矩陣。反射矩陣參見博文“旋轉和反射”。
根據R的行列式值可以判斷該結果是旋轉矩陣還是反射矩陣,假如是反射矩陣,那麼其行列式值就為-1。如果我們嚴格限定我們求解的必須是旋轉矩陣,那麼當前求解出來的反射矩陣就不符合要求。這個時候就必須求解下一個符合要求的最優解。
將目標問題重新組織成如下形式:
如果我們將mii當作變數,它的取值範圍就是[-1,1]。函式f對於mii來說是線性的,所以它在定義域的邊界上才取得極值。很顯然對於所有的mii來說,所有都取1能取得最大的極值,但是該取值必須被排除(用這個得出的R是反射矩陣),那麼下一個最優的(m11,m22,...,mdd)取值就是(1,1,...1,-1),即除最後一個值取-1外,其他的值仍然為1。
為什麼是取最後一個mdd為-1,這是進行SVD分解之後,Σ矩陣裡對角線上的值經過了排序的,即σd的值最小。