摄像机矩阵详解

之前学习摄像机模型的时候弄得不是太清楚,现在记录一下。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值