攝像機矩陣詳解

之前學習攝像機模型的時候弄得不是太清楚,現在記錄一下。

1.攝像機矩陣的分解

攝像機矩陣可以表示爲如下形式:

P=[M|MC](1)

其中,C爲攝像機在世界座標系中的位置,求出攝像機的位置C只需要用M1乘以攝像機矩陣最後一列。對攝像機矩陣進一步分解可得:

P=K[R|RC]=K[R|T](2)

矩陣R是rotation矩陣,因此是正交的;K是上三角矩陣. 對P的前三列進行RQ分解就可得到KR .一般的矩陣庫裏面都只有QR分解算法,所以可以使用QR分解替代。具體解釋見這裏,Richard Hartley and Andrew Zisserman’s “Multiple View Geometry in Computer Vision”給的code,其中vgg_rq()就是分解KR. RQ分解不爲一,所以可以取使K的對角線元素都爲正的分解,可以通過改變矩陣對應列/行的符號得到。

另外T=RC ,是攝像機座標系下世界座標系原點的位置,tx,ty,tz的符號表示世界原點在攝像機的左右上下,前後關係。在三維重建中,一組標定好了的圖片序列,它們攝像機矩陣計算出來的世界座標系原點位置應該是相同了,因爲所有的攝像機都校正到同一個座標系了,(測試了數據集3D Photography Dataset中兩個攝像機矩陣計算出來的世界座標系原點確實是相同的,最起碼說明標定沒有錯誤).

其中K即爲所謂的內參,R,T爲外參。

2.攝像機外參

攝像機外參數可以表示爲3x3的旋轉矩陣R和3x1的位移向量T:

[R|t]=r1,1r2,1r3,1r1,2r2,2r3,2r1,3r2,3r3,3t1t2t3(3)

通常也會看到添加了額外一行(0,0,0,1)的版本:

[R0t1]=[I0t1]×[R001]=100001000010t1t2t31×r1,1r2,1r3,10r1,2r2,2r3,20r1,3r2,3r3,300001(4)(5)

這樣做可以允許我們把矩陣分解爲一個旋轉矩陣跟着一個平移矩陣。這個矩陣描述瞭如何把點從世界座標系轉換到攝像機座標系,平移矩陣T描述了在攝像機座標系下,空間原點的位置;旋轉矩陣R描述了世界座標系的座標軸相對攝像機座標系的的方向。

如果以世界座標系爲中心,知道了攝像機的Pose, [Rc|C] 即空間位置C和相對世界座標系座標軸的旋轉Rc,怎麼得到外參矩陣呢?給攝像機的pose矩陣添加(0,0,0,1)讓它成爲方陣,對pose矩陣求逆就可以得到外參矩陣。

[R0t1]=[Rc0C1]1=[[I0C1][Rc001]]1=[Rc001]1[I0C1]1=[RTc001][I0C1]=[RTc0RTcC1](decomposing rigid transform)(distributing the inverse)(applying the inverse)(matrix multiplication)(6)(7)(8)(9)(10)

即:

Rt=RTc=RC(11)(12)

3.攝像機內參

K=fx00sfy0x0y01(13)

其中fx,fy爲焦距,一般情況下fx=fy , x0,y0爲主點座標(相對成像平面),s爲座標軸傾斜參數,理想情況應該爲0.

內參K是2D的變換

K=fx00sfy0x0y01=100010x0y012D Translation×fx000fy00012D Scaling×100s/fx100012D Shear(14)(15)

綜合起來,攝像機矩陣可以由外參的3D變換和內參的2D變換組合起來:

P=KIntrinsic Matrix×[Rt]Extrinsic Matrix=100010x0y012D Translation×fx000fy00012D Scaling×100s/fx100012D ShearIntrinsic Matrix×(It)3D Translation×(R001)3D RotationExtrinsic Matrix(16)(17)(18)

本文主要參考於The Perspective Camera - An Interactive Tour. 作者還提供了可以交互的demo.


http://haiyangxu.github.io/posts/2014/2014-06-12-camera-matrix.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章