相机标定参数求 焦距 计算机视觉
一、影响摄像机标定的因素有哪些
摄像机标定是指确定摄像机的几何和光学参数,以及摄像机相对于世界坐标系的方位。摄像机标定精度是用重投影误差来表示,即根据标定结果计算世界坐标点的成像点坐标与真实的图像点坐标的差值,而摄像机的标定精度的大小,直接影响着机器视觉系统的精度。
美国TEO从多年从事摄像机的生产与研发着手,为热爱摄像机的朋友们总结了影响摄像机标定精度的主要因素,有以下几个方面:
1、图像处理算法:当选择的成像数学模型一定时,图像坐标和世界坐标的精度是直接影响摄像机标定精度的因素。
2、标靶精度:图像坐标:标靶特征点的图像处理检测精度,目前系统采用子像素检测技术,达到误差小于0.02个像素的精度。
标靶:特征点加工精度,系统标靶加工精度误差小于0.1mm。并进行二次测量获取更高精度的特征点坐标值。
3、相机镜头标靶硬件搭配:
①同样视场范围内相机的分辨率越大,标定精度越高;
②镜头决定视场范围,标靶大小小于视场的1/5时会减小摄像机的标定精度。
4、*作技巧:
①将标靶放在测量区域内,调节好镜头焦距和光圈,使标靶能够清晰成像;
②标定是将标靶放在测量区域内进行标定,在哪儿测量在那儿标定;
③标定时标靶处于静止状态或小幅度的晃动,减少由于相机的曝光时间引起的运动模糊造成的误差;
④使标靶尽可能多的放置在系统测量范围内不同位置进行标定;
⑤在测量范围的深度方向上(Z方向)有一定的平移,或绕X轴和Y轴有一定的旋转;
5、外界环境干扰:
①光线过亮或过暗,标靶特征圆与背景对比度低,会引起检测不到标靶,或检测精度低;
②光照不均匀,使得标靶部分过亮或过暗会也引起检测不到标靶,或检测精度低;
摄像机标定可以分为传统的摄像机标定方法和摄像机自标定方法两大类。传统的摄像机标定需要标定参照物,基本方法是在一定的摄像机模型下,通过对特定标定参照物进行图像处理,为了提高计算精度,还需确定非线性畸变校正参数,并利用一系列数学变换公式计算及优化,来求取摄像机模型内部参数和外部参数。而自标定法利用摄像机本身参数之间的约束关系来标定,相对于传统方法有更好的灵活性和实用性。
二、计算机视觉******相机内外参***相机标定
一直在做图像处理,也经常听到相机内参相机外参,我却没深入理解什么是相机内外参,什么是相机标定。
1、相机内参数是与相机自身特性相关的参数,比如相机的焦距、像素大小等;
摄像机内参矩阵反应了相机自身的属性,各个相机是不一样的,需要标定才能知道这些参数。作用:告诉我们摄像机坐标的点在1的基础上,是如何继续经过摄像机的镜头、并通过针孔成像和电子转化而成为像素点的。
摄像机内参(Camera Intrinsics)矩阵:(需要注意的是,真实的镜头还会有径向和切向畸变,而这些畸变是属于相机的内参的)
fx s x0
K= 0 fy y0
0 0 1
其中,fx,fy为焦距,一般情况下,二者相等,x0、y0为主点坐标(相对于成像平面), s为坐标轴倾斜参数,理想情况下为0。
内参矩阵的参数含义:
f:焦距,单位毫米
dx:像素x方向宽度,单位毫米,1/dx:x方向1毫米内有多少个像素(dx、dy为一个像素的长和高)
f/dx:使用像素来描述x轴方向焦距的长度
f/dy:使用像素来描述y轴方向焦距的长度
u0,v0,主点的实际位置,单位也是像素(原点的平移量)
2、相机外参数是在世界坐标系中的参数,比如相机的位置、旋转方向等。相比于不变的内参,外参会随着相机运动发生改变。
摄像机的旋转平移属于外参,用于描述相机在静态场景下相机的运动,或者在相机固定时,运动物体的刚性运动。因此,在图像拼接或者三维重建中,就需要使用外参来求几幅图像之间的相对运动,从而将其注册到同一个坐标系下面来。(近我在研究多幅图像的图像拼接)
摄像机外参矩阵:包括旋转矩阵和平移矩阵。作用:告诉我们现实世界点(世界坐标)是怎样经过旋转和平移,然后落到另一个现实世界点(摄像机坐标)上。
旋转矩阵和平移矩阵共同描述了如何把点从世界坐标系转换到摄像机坐标系。
旋转矩阵:描述了世界坐标系的坐标轴相对于摄像机坐标轴的方向
平移矩阵:描述了在摄像机坐标系下,空间原点的位置
摄像机外参(Camera Extrinsics)矩阵:
其中, R是旋转矩阵,t是平移向量.
3、相机标定(或摄像机标定):一句话就是世界坐标到像素坐标的映射,其中世界坐标是人为定义的。
相机标定的目的是确定相机的一些参数的值。通常,这些参数可以建立定标板确定的三维坐标系和相机图像坐标系的映射关系,换句话说, 你可以用这些参数把一个三维空间中的点映射到图像空间,或者反过来。相机需要标定的参数通常分为内参和外参两部分。
标定就是已知标定控制点的世界坐标和像素坐标我们去解算这个映射关系,一旦这个关系解算出来了我们就可以由点的像素坐标去反推它的世界坐标,当然有了这个世界坐标,我们就可以进行测量等其他后续*作了。上述标定又被称作隐参数标定,因为它没有单独求出相机的内部参数,如相机焦距,相机畸变系数等。
一般来说如果仅仅只是利用相机标定来进行一些比较简单的视觉测量的话,那么就没有必要单独标定出相机的内部参数了。至于相机内部参数如何解算,相关论文讲的很多。
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。
无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。
4、畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能由于摄像机镜头的原因。
畸变矩阵:告诉我们为什么像素点并没有落在理论计算该落在的位置上,还产生了一定的偏移和变形!!!
参考链接:
计算机视觉-相机内参数和外参数_liulina603的专栏-CSDN博客_相机参数
旋转矩阵(Rotate Matrix)的性质分析- caster99-博客园(cnblogs)
SLAM入门之视觉里程计(2):相机模型(内参数,外参数)- Brook_icv-博客园(cnblogs)
三、相机标定的内参、外参、畸变参数
摘自知乎
成像的过程实质上是几个坐标系的转换。首先空间中的一点由世界坐标系转换到摄像机坐标系,然后再将其投影到成像平面(图像物理坐标系),后再将成像平面上的数据转换到图像平面(图像像素坐标系)。
在左图中,我们把相机看作是针孔,现实世界中的点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轴上缩放了β倍。同时,原点平移了[c x, c y ] T。
因此可以得到 P'与像素坐标的关系:
代入P与P'的关系式可得:
其中,我们用f x,f y替换了αf和βf。f x,f y的单位是像素。
用齐次坐标,把上式写出矩阵的形式:
也可以把Z写到等式左边去,就变成了:
上式中,K即为相机的内参矩阵(Intrinsics)。通常来说,相机的内参在出厂之后就是固定的了。
在上面的推导中,我们用的是P在相机坐标系的坐标(也就是以相机为O点),所以我们应该先将世界坐标系中的P w给变换到相机坐标系中的P。
相机的位姿由旋转矩阵R和平移向量t来描述,因此:
再代入之前的内参的式子,得到:
后面一个等号蕴含了一个齐次坐标到非齐次坐标的转换。其中,R, t为相机的外参(Extrinsics)。
透镜由于制造精度以及组装工艺的偏差会引入畸变,导致原始图像的失真。镜头的畸变分为径向畸变和切向畸变两类。
顾名思义,径向畸变就是沿着透镜半径方向分布的畸变,产生原因是光线在原理透镜中心的地方比靠近中心的地方更加弯曲,这种畸变在普通廉价的镜头中表现更加明显,径向畸变主要包括桶形畸变和枕形畸变两种。以下分别是枕形和桶形畸变示意图:
成像仪光轴中心的畸变为0,沿着镜头半径方向向边缘移动,畸变越来越严重。畸变的数学模型可以用主点(principle point)周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2,对于畸变很大的镜头,如鱼眼镜头,可以增加使用第三项k3来进行描述,成像仪上某点根据其在径向方向上的分布位置,调节公式为:
公式里(x0,y0)是畸变点在成像仪上的原始位置,(x,y)是畸变较真后新的位置,下图是距离光心不同距离上的点经过透镜径向畸变后点位的偏移示意图,可以看到,距离光心越远,径向位移越大,表示畸变也越大,在光心附近,几乎没有偏移。
下图显示某个透镜的切向畸变示意图,大体上畸变位移相对于左下——右上角的连线对称的,说明该镜头在垂直于该方向上有一个旋转角度。
径向畸变和切向畸变模型中一共有5个畸变参数,在Opencv中他们被排列成一个5*1的矩阵,依次包含k1、k2、p1、p2、k3,经常被定义为Mat矩阵的形式,如Mat distCoeffs=Mat(1,5,CV_32FC1,Scalar::all(0));这5个参数就是相机标定中需要确定的相机的5个畸变系数。求得这5个参数后,就可以校正由于镜头畸变引起的图像的变形失真,下图显示根据镜头畸变系数校正后的效果: