相机畸变与标定
相机畸变与标定
一、相机畸变
定义:相机镜头的畸变实际上是光学透镜固有的透视失真的总称。
相机畸变的分类:
1、枕形畸变:又称鞍形形变,视野中边缘区域的放大率远大于光轴中心区域的放大率,常用在远摄镜头中(下图左);
2、桶形畸变,与枕形畸变相反,视野中光轴中心区域的放大率远大于边缘区域的放大率,常出现在广角镜头和鱼眼镜头中(下图中);
3、线性畸变:光轴与相机所拍摄的诸如建筑物类的物体的垂平面不正交,则原本应该平行的远端一侧和近端一侧,以不相同的角度汇聚产生畸变。这种畸变本质上是一种透视变换,即在某一特定角度,任何镜头都会产生相似的畸变(下图右)。
二、相机的畸变模型
相机的针孔模型,只是真实相机的一个近似,由于存在各种镜头的畸变和变形,所以真实的相机要比模型复杂的多。在引入各种非线性的畸变修正之后,就形成看复杂的非线性成像模型。镜头的畸变主要分为径向畸变、离心畸变和薄棱镜畸变三类。
2.1 径向畸变
定义:使像点产生径向位置的偏差。径向畸变又分为正向畸变和负向畸变,正向畸变称为枕形畸变,负向畸变称为桶形畸变;
特点:由镜头的形状缺陷所造成的畸变,关于相机主光轴对称。
其中,为像点到中心店的距离;为径向畸变系数。
2.2 离心畸变
定义:光学系统的光学中心和几何中心不一致(镜头各器件的光学中心)所造成的畸变;
特点:既包含径向畸变,又包含镜头主光轴不对称多造成的切向畸变。
2.3 薄棱镜畸变
定义:镜头设计缺陷与加工安装误差所造成;
特点:同时引起径向畸变和切向畸变,高价位镜头可以忽略薄棱镜畸变。
三.相机畸变矫正
在用相机进行单目测距时,需要用到一个叫相机内参的东西,而这需要靠相机标定来得到。这些大概要从相机模型说起了:
小孔成像模型就是最简单通用的一种相机模型,这个模型用下面一个图说明一下。
其中f为熟知的相机参数——焦距,而光轴与成像平面的交点称为主点,X表示箭头长度,Z是相机到箭头的距离。在上图这个简单且理想的小孔成像"相机"中,可以轻松的写出黄色箭头在现实世界坐标系与成像平面坐标系之间的转换关系。
但是在实际相机中,成像平面就是相机感光芯片,针孔就是透镜,然而主点却并不再在成像平面的中心了(也就是透镜光轴与感光芯片中心并不在一条线上了),因为在实际制作中是无法做到将相机里面的成像装置以微米级别的精度进行安装的,因此需要引入两个新的参数Cx和Cy,来对硬件的偏移进行矫正。
上式中引入了两个不同的焦距fx和fy,这是因为单个像素在低价成像装置上是矩形而不是正方形。其中,fx是透镜的物理焦距长度与成像装置的每个单元尺寸Sx的乘积。
通过上式可以知道 相机内参的四个参数了,分别是fx,fy,Cx,Cy。但在计算中,常通过一些数学技巧来进行一定的变换,从而得到下式。
其中:
通过上面的式子,可以将空间中的点和图片中的点一一对应起来。式中的矩阵M就是常听说的相机 内参矩阵了。
四.相机外参
而有相机内参,就有相机外参了,相机外参来源于相机自身的畸变,畸变可以分为径向畸变(有透镜的形状造成)和切向畸变(由整个相机自身的安装过程造成)。
镜像畸变是由凸透镜本身形状引起的,好的透镜,经过一些精密处理,畸变并不明显,但在普通网络相机上畸变显得特别突出。可以把畸变看作r=0附近的泰勒奇数展开的前几项来便是。一般为前两项 k1 , k2,对于鱼眼透镜 ,会用前三项 k3 。成像装置上某点的径向位置可以根据以下等式进行调整,这时便有了3个或2个的未知变量。
这里(x,y)是成像装置上畸变点的原始位置,(Xcorrected,Ycorrected)是矫正后的新位置。
切向畸变是由于制造上的缺陷使透镜不与成像平面平行而产生的。切向畸变可以用两个参数p1 和 p2 来表示:
至此,得到了共五个参数: K1 K2 K3 P1 P2,这五个参数是消除畸变所必须的,称为畸变向量,也叫相机外参。
五.相机标定
在上文,相机内参加上相机外参一共有至少8个参数,而要想消除相机的畸变,就要靠相机标定来求解这8个未知参数。
说完相机模型,又要说一下相机标定了,相机标定是为了求解上面这8个参数的,那求解出这8个参数可以干什么呢?可以进行软件消除畸变,也就是在得知上面8个参数后,利用上面罗列的数学计算式,将每个偏移的像素点归位。
标定需要用到一个叫 标定板的东西,有很多种类,但常用的大概就是棋盘图了, 棋盘要求精度需要很高,格子是正方形,买一张标定板很贵的,在csdn上下棋盘图也要画好多c币,所以大家可以用word画一张,很简单的,只要做一个5列7行的表格,拉大到全页,再设置每个格子的宽高来将它设为正方形再涂色就可以了。这张图里有符号,但打印出来就没有了,建议大家自己画一张就OK了。
标定过程是就不在这里说了,CSDN上的教程一抓一大把,在完成标定后会返回相机的内参和外参。有了相机内参外参后,就可以进行相机消畸变了。