之前学习摄像机模型的时候弄得不是太清楚,现在记录一下。
1.摄像机矩阵的分解
摄像机矩阵可以表示为如下形式:
其中, C 为摄像机在世界坐标系中的位置,求出摄像机的位置 C 只需要用 −M−1 乘以摄像机矩阵最后一列。对摄像机矩阵进一步分解可得:
矩阵
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 :
通常也会看到添加了额外一行(0,0,0,1)的版本:
这样做可以允许我们把矩阵分解为一个旋转矩阵跟着一个平移矩阵。这个矩阵描述了如何把点从世界坐标系转换到摄像机坐标系,平移矩阵 T 描述了在摄像机坐标系下,空间原点的位置;旋转矩阵 R 描述了世界坐标系的坐标轴相对摄像机坐标系的的方向。
如果以世界坐标系为中心,知道了摄像机的Pose, [Rc|C] 即空间位置 C 和相对世界坐标系坐标轴的旋转 Rc ,怎么得到外参矩阵呢?给摄像机的pose矩阵添加(0,0,0,1)让它成为方阵,对pose矩阵求逆就可以得到外参矩阵。
即:
3.摄像机内参
其中 fx , fy 为焦距,一般情况下 fx=fy , x0,y0 为主点坐标(相对成像平面), s 为坐标轴倾斜参数,理想情况应该为0.
内参 K 是2D的变换
综合起来,摄像机矩阵可以由外参的3D变换和内参的2D变换组合起来:
本文主要参考于The Perspective Camera - An Interactive Tour. 作者还提供了可以交互的demo.
http://haiyangxu.github.io/posts/2014/2014-06-12-camera-matrix.html