摘自:https://zhuanlan.zhihu.com/p/389653208
https://blog.csdn.net/zb1165048017/article/details/71104241
demo演示:http://ksimek.github.io/perspective_camera_toy.html
demo中提供了三种外参接口(世界坐标系,相机坐标系,look-at),三种交互效果不同,前两种的方向相反,世界坐标系中向左移动表示相机坐标系中向右移动,但是它们都有六个参数控制:
tx表示沿着水平方向移动相机
ty表示沿着垂直方向移动相机
tz表示沿着前后方向移动相机
px表示镜头不平移,但是绕x轴做俯仰旋转
py表示镜头不平移,但是绕垂直轴y轴做左右摇头旋转
pz表示镜头不平移,但是绕z轴做顺时针(或者逆时针)旋转
————————————————
demo也提供了内参的接口,包括四个参数控制:
焦距(Focal length):镜头的前后缩进(不是缩放)
轴倾斜(Axis Skew):可以导致球变形,平面上显示椭球形
x0表示主点偏移,相机不动,左右移动成像平面
y0 表示主点偏移,相机不动,上下移动成像平面
————————————————
相机参数都有哪些?估计它们需要的条件?评估所估算的相机参数好坏的标准?
①主要包含内参(intrinsics)、外参(extrinsics)、畸变系数(distortion coefficients)
②估计参数需要3D世界坐标及其对应的2D图像点。比如在重构3D姿态的时候,需要同时输入图片及图片中对应的人的骨骼2D坐标点。
③评估所估计相机参数的方法就是:首先画出相机和校准模式的相对位置;随后计算投影误差;最后计算参数的估算误差。在matlab中有Camera Calibrator来进行相机校准和评估参数精确度。
外参数([R|t])描述世界坐标系与相机坐标系的变换关系,参数包括:旋转R,平移T。
内参数(K)描述相机坐标系,图像坐标系,像素坐标系之间的变换关系,参数包括主点坐标,焦距,单位像素宽与高。
相机成像主要有4个坐标系:
成像的过程实质上是几个坐标系的转换。首先空间中的一点由世界坐标系转换到 摄像机坐标系 ,然后再将其投影到成像平面 ( 图像物理坐标系 ) ,最后再将成像平面上的数据转换到图像平面 (图像像素坐标系 ) 。
对应的左乘矩阵公式
摘要:本文介绍了相机的内参和外参以及推导过程,由三个部分组成:第一部分,相机内参; 第二部分,相机外参;第三部分,总结。
1 相机内参
在左图中,我们把相机看作是针孔,现实世界中的点P经过相机的光心O,投影到物理成像平面上,变为点P’。
在右图中,对这个模型进行了一个简化,将其看作是一个相似三角形。
下面我们来对这个模型进行建模。
设O−x−y−z为相机坐标系,习惯上我们把z轴指向相机前方,x向右,y向下。O为摄像机的光心,也是针孔模型中的针孔。
设真实世界点中的P的坐标为[X,Y,Z]T,成像的点P’的坐标为[X’, Y’, Z’]T, 物理成像平面和光心的距离为f(即为焦距)。
根据右图中的三角形相似关系,有:
其中,有负号是因为坐标轴方向,也就表示了成的像是倒立的。为了表示起来更方便,我们把成像平面从相机的后面对称到前面去,如下图所示。这样,负号就没有了。
在对称后,有:
整理解出P’的坐标:
上面两个式子就描述了P点与它所成像的坐标关系,可以看到,X对应的X’与焦距f有关,与距离Z有关。映射到成像平面上还不够,我们还需要将这个像给放到像素坐标系内。
我们设在物理成像平面上固定着像素平面o-u-v。
设P’在像素平面坐标系上的坐标是[u, v]T。
像素坐标系通常定义方式是:原点o’位于图像的左上角,u轴向右与x轴平行,v轴向下与y轴平行。我们设像素坐标在u轴上缩放α倍,在v轴上缩放了β倍。同时,原点平移了[cx, cy]T。
因此可以得到P’与像素坐标的关系:
用齐次坐标,把上式写出矩阵的形式:
上式中,K即为相机的内参矩阵(Intrinsics)。通常来说,相机的内参在出厂之后就是固定的了。
2 相机外参
相机外参的作用是把坐标从【世界坐标系】转换到【相机坐标系】中
在上面的推导中,我们用的是P在相机坐标系的坐标(也就是以相机为O点),所以我们应该先将世界坐标系中的Pw给变换到相机坐标系中的P。
相机的位姿由旋转矩阵R和平移向量t来描述,因此:
旋转矩阵:R 【欧拉角:wiki百科】
Rot(x, θ) 表示绕X轴旋转 θ表示旋转的角度 其它同理。矩阵右下角的表示放大倍数,矩阵第4行和第4列可以不要
3 镜头畸变
透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真。镜头的畸变分为径向畸变和切向畸变两类。
- 径向畸变
顾名思义,径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在普通廉价的镜头中表现更加明显,径向畸变主要包括桶形畸变和枕形畸变两种。以下分别是枕形和桶形畸变示意图:
成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,如鱼眼镜头,可以增加使用第三项k3来进行描述,成像仪上某点根据其在径向方向上的分布位置,调节公式为:
公式里(x0,y0)是畸变点在成像仪上的原始位置,(x,y)是畸变较真后新的位置,下图是距离光心不同距离上的点经过透镜径向畸变后点位的偏移示意图,可以看到,距离光心越远,径向位移越大,表示畸变也越大,在光心附近,几乎没有偏移。
- 切向畸变
切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。畸变模型可以用两个额外的参数p1和p2来描述:
下图显示某个透镜的切向畸变示意图,大体上畸变位移相对于左下——右上角的连线对称的,说明该镜头在垂直于该方向上有一个旋转角度。
径向畸变和切向畸变模型中一共有5个畸变参数,在Opencv中他们被排列成一个5*1的矩阵,依次包含k1、k2、p1、p2、k3,经常被定义为Mat矩阵的形式,如Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0));这5个参数就是相机标定中需要确定的相机的5个畸变系数。求得这5个参数后,就可以校正由于镜头畸变引起的图像的变形失真,下图显示根据镜头畸变系数校正后的效果:
3 总结
本文介绍了:
- 从相机坐标系转换到像素坐标系中,相机内参的作用
- 从世界坐标系转换到相机坐标系中,相机外参的作用
相机内参是这样的一个矩阵:
里面的参数一般都是相机出厂就定下来的,可以通过相机标定的方式人为计算出来。
相机外参是旋转矩阵R和平移向量t构成,一般来说写成:
这个矩阵决定了相机的位姿。