本質矩陣分解


定義

 本質矩陣是歸一化圖像坐標下的基本矩陣的特殊形式

E=t^R


 

性質

一個 3X3 矩陣是本質矩陣的充要條件是它的奇異值中有兩個相等而第三個是 0

證明: 正交矩陣$W=\begin{bmatrix}1&-1&0\\1&0&0\\0&0&1\end{bmatrix}$    反對稱矩陣$Z=\begin{bmatrix}0&-1&0\\1&0&0\\0&0&0\end{bmatrix}$  

其中t^R轉換成矩陣形式為t^R, S是反對稱矩陣,E=SR.

根據定義:

  S=kUZUT   ,U是正交矩陣。

  Z=diag(1,1,0)W

  得S=kUdiag(1,1,0)WUT, 忽略尺度時視k=1

由SVD分解E可得

   E=Udiag(1,1,0)VT=SR

在相差一個常數k的意義下,

  E=SR=Udiag(1,1,0)WUTR=Udiag(1,1,0)VT

  故WUTR=V

這正是E的奇異值分解並如所需要證明的具有兩個相等的奇異值,反之,一個具有兩個相同奇異值的矩陣可以用同樣方法分解為 SR.


分解

 (1)若E可由SVD分解為E=Udiag(1,0,0)VTR和 t有四種分解的情況

其中R 有兩種情況;

  由於 

  E=SR=Udiag(1,1,0)VT=Udiag(1,1,0)WUTR

 

  即  WUTR=VT  ,  其中 R ,   W,  U   ,V 為正交矩陣 

  得      R=UWVT    or  UWTV    其中U V 是E通過SVD分解出的  W 是前面提及的反對稱矩陣  ;

       當R=UWTVT    時為負號

證明

  E=SR=(UZUT)(UXVT)   ,x是正交矩陣,旋轉矩陣,

    =U(ZX)VT=Udiag(1,0,0)VT

  故ZX=diag(1,1,0)

因為X是旋轉矩陣,所以x= W

當 x=WT     得  ZX=diag(-1,-1,0)         忽略符號 -->      ZX=diag(1,1,0)

 

(2)己知本質矩陣 E=Udiag(1,1,0)VT和前一個相機位置矩陣P[R |t ], 那么第二個像機矩陣 P'[R |t ] 有下列幾種可能的選擇:

  P'2=[UWVT|u3]  or  [UWVT|u3 ]  or  [UWTVT|u3]  or  [UWTVT|u3]

  即 t取U的最后一列

 

R部分上面已證明 t部分證明如下

 

S的F范數的平方為2,意味着如果S=t^(包含尺度因子) ,則 ιι ιι=1,這是對兩個攝像機矩陣基線的一種常用的歸一化

由叉乘性質得

  St=0

 


 

不嚴謹推導

利用最小二乘思想(SVD分解求方程組類似)

  min  ιι St ιι  ,   st  ιι ιι=1

  ιι St ιι  = tTSTSt

    =σ  ιι ιι

 

STS的最小特征值對應的特征向量為最優解

  STS=UZTUTUZUT

    =UTZTZUT

    =UTdiag(1,1,0)UT

 

其中U為S的特征向量 ,取最后一行為最小解

即  Su=oS       ,u為S最小特征值對應的特征向量,此時Su 最小

 


 

 代碼 

from orbslam2

 1 /**
 2  * @brief 分解Essential矩陣
 3  *
 4  * F矩陣通過結合內參可以得到Essential矩陣,分解E矩陣將得到4組解 \n
 5  * 這4組解分別為[R1,t],[R1,-t],[R2,t],[R2,-t]
 6  * @param E  Essential Matrix
 7  * @param R1 Rotation Matrix 1
 8  * @param R2 Rotation Matrix 2
 9  * @param t  Translation
10  * @see Multiple View Geometry in Computer Vision - Result 9.19 p259  chinese 174
11  */
12 void Initializer::DecomposeE(const cv::Mat &E, cv::Mat &R1, cv::Mat &R2, cv::Mat &t) {
13     Mat u, w, vt;
14     SVDecomp(E, w, u, vt);
15     //t為 u的最后一行
16     u.col(2).copyTo(t);
17     t /= norm(t);
18 
19     Mat W(3, 3, CV_32F, cv::Scalar(0));
20     W.at<float>(0, 1) = -1;
21     W.at<float>(1, 0) = 1;
22     W.at<float>(2, 2) = 1;
23 
24     R1 = u * W * vt;
25     if (cv::determinant(R1) < 0)// 旋轉矩陣有行列式為1的約束
26         R1 = -R1;
27 
28     R2 = u * W.t() * vt;
29     if (cv::determinant(R2) < 0)
30         R2 = -R2;
31 
32 }

 

 

 參考  《計算機視覺中的多視圖幾何》

   

 

 

 

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM