- 前言
- 什么是相机标定
- 为什么要进行相机标定
- 标定参数
- 切向畸变和径向畸变
- 枕形畸变和桶形畸变
- 如何进行相机标定
在图像拼接技术中,有如下几个关键的步骤:
相机标定,预处理操作(畸变矫正、滤波),图像投影变换、图像配准(特征点提取及匹配)图像拼接(几何变换)、图像融合、亮度与颜色的均衡处理等。
相机标定简单来说是根据相机的几何模型求最终的投影矩阵的过程(从世界坐标系换到像素坐标系),也就是求解内外参以及畸变参数的过程。
为什么要进行相机标定在图像拼接中,良好的相机标定是拼接的基础,标定结果影响拼接效果的好坏。(希望能在图像拼接中,免去物理偏差造成的影响)
标定参数标定参数包括:内参、外参以及畸变参数
1.外参数矩阵:在两幅图的图像拼接中,外参矩阵可描述两幅图像之间的旋转平移关系。
2.内参数矩阵:相机内部参数(焦距)
3.畸变参数(k1,k2,p1,p2,k3):由于透镜的存在,光线投影到成像平面会产生畸变,主要包括切向和径向畸变,
安装过程中,透镜和成像平面不平行会造成切向畸变p。
而由于透镜的先天条件(形状),会造成径向畸变(越靠近边缘,畸变就会越严重)。
径向畸变模型:
以下公式由泰勒展式得出,(因为畸变比较小,可用泰勒级数的低阶项来近似),(x,y)为理想坐标坐标(无畸变),(xdis,ydis)为校正前坐标(有畸变)
切向畸变模型:
因此同时包含切向和径向的畸变模型:
径向畸变又包含如下两种。
桶形畸变:因为镜头中央的放大倍率大于边缘的放大倍数,大多出现这种畸变的镜头是广角镜头,牺牲直线投影来得到更宽的视野。
枕形畸变:由于镜头边缘的放大倍率大于中心的放大倍数引起,朝着中心弯曲,倾向于出现在变焦镜头的较长焦距端。
由此,当我们得到标定的畸变参数后,反演补偿即可对相机进行校正。而校正的过程就将相当于将扭曲的曲线变回到直线的过程
补充:
图像畸变校正算法有着重复性和数据并行性,所以采用FPGA来加速是一种很好的方式,另外该算法实质上也是进行像素操作,从曲线变成直线,就容易出现像素丢失等现象,因此需要引入插值算法来进行填充。(FPGA实现校正的时候,希望将畸变图像从存储器中读取,然后根据畸变参数进行校正,校正后的图像存储在输出端的存储器中,最终送到显示器显示)
采用Matlab进行标定
方法:
打印一张标定棋盘格图片,并将其贴在一个平面上,作为标定物。
通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
利用棋盘格角点,估算内外以及畸变参数。
步骤如下(以单目相机校准为例):
1、标定棋盘格的获取
在matlab命令行输入,并等待
open checkerboardPattern.pdf
2、将棋盘格固定,后用相机拍摄,得到不同方向的照片。
3、把拍摄的图片存放在特定文件夹下,比如D:matlabtoolboxvisionvisiondatacalibrationmyself
点击Add images添加所拍摄的图片
4、自动跳转到标定板的规格选择界面:棋盘格中一个格子的尺寸,默认为25mm×25mm,需要根据自己所用棋盘格图案的实际尺寸来调节,必须和实际长度相同。
5、添加完成后会出现检测结果,如下图所示,总图像10张,失败1张。添加失败的原因可能是图像较远无法清晰识别出棋盘格,单击view images可查看为被添加进去的图像。
6、普通相机选择Standard模式,鱼眼相机选择Fisheye模式
7、参数选项
径向畸变(即Radial Distortion下选择3个系数Coefficients)
勾选Skew(歪斜)(倾斜因子很小,也可以不考虑)
切向畸变(Tangential Distortior)
8、单击Calibrate进行标定
9、右上角:重投影误差(平均误差小于0.5像素即可)
右下角:可切换视图(以相机为中心或以图像为中心),相当于每次拍摄照片相对于相机的位置,也就是相机的外参。
10、点击“Export Camera Parameters”,输出相机参数到matlab命令窗口
得到如下的结果:
11、命令行键入如下可直接得到相机内参矩阵
cameraParams.IntrinsicMatrix
命令行键入如下可得到径向畸变参数
cameraParams.RadialDistortion
在工作区也可以查看相应的参数
双目标定和单目标定相同,只是需要输入左右相机的图片。
有了旋转矩阵,平移向量以及畸变参数,可以得到输出像素与输入像素之间的对应关系。
根据畸变参数如何采用FPGA进行图像校正



