1. 程式人生 > 其它 >論文基礎-5幾何知識

論文基礎-5幾何知識

尤拉公式證明:

SVD求得兩個對應點集合的旋轉矩陣R和轉移矩陣t的數學推導

參考:

https://blog.csdn.net/u012836279/article/details/80351462

計算兩個對應點集之間的旋轉矩陣R和轉移矩陣T

數值方法解出的近似旋轉矩陣,SVD轉化為正交的標準旋轉矩陣 旋轉矩陣標準化 正交矩陣

參考連結:https://zhuanlan.zhihu.com/p/104735380

參考視訊課:https://www.bilibili.com/video/BV1ax411R7Hd?p=20

在譚平老師(SFU)在浙江大學的計算機視覺的公開課(強烈推薦講的很好,連結如上)中聽到了這個問題,在這裡記錄一下:

在求解涉及旋轉的優化問題過程中,通過解線性方程組或者採用優化方法得到的旋轉矩陣的數值解,往往沒有考慮到正交約束,會得到一個存在誤差的近似旋轉矩陣,也就是說這個矩陣並不是一個嚴格正交的標準正交矩陣,不滿足。因此,需要將矩陣近似為最接近的正交矩陣。
處理方法:採用SVD分解近似旋轉矩陣,然後將奇異值矩陣用單位陣替代即可,得到

Matlab簡單的示例如下

% Standard Rotation Matrix
R = [0.0115185,  0.999321,    0.0351458;
     -0.998647,   0.00971046,  0.051195;
      0.0508185, -0.0356881,   0.998074
]; % S is identity matrix [U, S, V] = svd(R); % Rotation Matrix Solved without Constraint (Error) R1 = [0.01, 0.99, 0.03; -0.99, 0.01, 0.05; 0.05, -0.03, 0.99]; % S1 is not identity matrix [U1, S1, V1] = svd(R1); % Approximate Matrix R2 = U1 * V1'; % S2 is identity matrix [U2, S2, V2]
= svd(R2);

這裡還要注意一個問題,之前也遇到過。處理完以後得到的 R 不一定就是旋轉矩陣,因為旋轉矩陣是行列式值為1的正交矩陣,而正交矩陣的行列式值為。因此還要檢驗 R 的行列式是否為1,如果是-1,則得到了一個Reflection,需要將奇異值矩陣(單位陣)的最後一列的1置為-1,這樣得到的 R 就是旋轉矩陣了,這個處理方式參考了https://zhuanlan.zhihu.com/p/104735380,以及Arun 的經典文章 Least-Squares Fitting of Two 3-D Point Sets,這種情況在求解兩組三維點相對位姿時有時會出現。