图像拼接步骤——相机标定

前言

图像拼接技术中,有如下几个关键的步骤:
相机标定,预处理操作(畸变矫正、滤波),图像投影变换、图像配准(特征点提取及匹配)图像拼接(几何变换)、图像融合、亮度与颜色的均衡处理等。
在这里插入图片描述

什么是相机标定

相机标定简单来说是根据相机的几何模型求最终的投影矩阵的过程(从世界坐标系换到像素坐标系),也就是求解内外参以及畸变参数的过程。

为什么要进行相机标定

在图像拼接中,良好的相机标定是拼接的基础,标定结果影响拼接效果的好坏。
由于安装设计(透镜和成像平面不平行)及摄相机间的差异,会造成视频图像之间存在缩放(镜头焦距不一致造成)、倾斜(垂直旋转)、方位角(水平旋转)差异。这些均属于物理差异,因此我们需要对物理差异预先校准,从而得到一致性好的图像,便于后续图像拼接。

标定参数

标定参数包括:内参、外参以及畸变参数

1.外参数矩阵:在两幅图的图像拼接中,外参矩阵可描述两幅图像之间的旋转平移关系。
2.内参数矩阵:相机内部参数(焦距)
3.畸变参数(k1,k2,p1,p2,k3):由于透镜的存在,光线投影到成像平面会产生畸变,主要包括切向和径向畸变在这里插入图片描述

切向畸变和径向畸变

安装过程中,透镜和成像平面不平行会造成切向畸变p。
而由于透镜的先天条件(形状),会造成径向畸变(与中心距离有关,如果是枕形畸变,那么越远离中心,也就是越靠近边缘,畸变就会越严重,桶形畸变反之)。

径向畸变模型:
以下公式由泰勒展式得出,(因为畸变比较小,可用泰勒级数的低阶项来近似),(x,y)为实际图像像素坐标点(含畸变),(xdis,ydis)为理想图像像素坐标(不含畸变)

在这里插入图片描述
切向畸变模型:在这里插入图片描述
因此同时包含切向和径向的畸变模型:
在这里插入图片描述

枕形畸变和桶形畸变

径向畸变又包含如下两种。

桶形畸变:因为镜头中央的放大倍率大于边缘的放大倍数,大多出现这种畸变的镜头是广角镜头,牺牲直线投影来得到更宽的视野。

枕形畸变:由于镜头边缘的放大倍率大于中心的放大倍数引起,朝着中心弯曲,倾向于出现在变焦镜头的较长焦距端。

在这里插入图片描述

由此,当我们得到标定的畸变参数后,反演补偿即可对相机进行校正。而校正的过程就将相当于将扭曲的曲线变回到直线的过程,校正后的图像,拼接效果更佳,不会破坏实际景物的视觉一致性。
在这里插入图片描述


补充:
图像畸变校正算法有着重复性和数据并行性,所以采用FPGA来加速是一种很好的方式,另外该算法实质上也是进行像素操作,从曲线变成直线(前向映射)或者从直线变成曲线(逆向映射),都容易出现像素丢失或者映射到非整数位置等现象,因此需要引入插值算法来进行填充。

如何进行相机标定

采用Matlab进行标定
方法:

打印一张标定棋盘格图片,并将其贴在一个平面上,作为标定物。
通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
利用棋盘格角点,检测特征点(Harris角点)
根据角点位置信息及图像中的坐标,估算内外以及畸变参数。

步骤如下(以单目相机校准为例):
1、标定棋盘格的获取
在matlab命令行输入,并等待

open checkerboardPattern.pdf

在这里插入图片描述
2、将棋盘格固定,后用相机拍摄,得到不同方向的照片。
3、把拍摄的图片存放在特定文件夹下,比如D:\matlab\toolbox\vision\visiondata\calibration\myself
补充:如果没有拍摄,也可以用软件自带的棋盘格图,在matlab安装路径下找到即可:
D:\MATLAB\R2018b\toolbox\vision\visiondata\calibration\mono
在这里插入图片描述


在APP栏找到相机标定
在这里插入图片描述

点击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 

在工作区也可以查看相应的参数

在这里插入图片描述
双目标定和单目标定相同,只是需要输入左右相机的图片。

有了旋转矩阵,平移向量以及畸变参数,可以得到输出像素与输入像素之间的对应关系。


总结
对于同一个相机,相机的内参矩阵取决于相机的内部参数,无论标定板和相机的位置关系是怎么样的,相机的内参矩阵不变。

外参矩阵反映的是标定板和相机的位置关系。对于不同的图片,标定板和相机位置的关系有变化,所以每张图片对应的外参矩阵都是不同的。

如果每次标定结果不同,可能的来源:
a. 计算的内外参数的初值不同,可能因为相机标定过程中,使用迭代优化时没有收敛到最小值,只是收敛到了局部最小值。
b. 标定获得数据不稳定,标定板的大小不合适,这个影响也很大。


根据内参矩阵和畸变参数思考如何采用FPGA进行图像校正。
映射后的坐标和输出图像像素坐标之间的关系:

1、将输出的某像素(Xp,Yp)转换到输出图像中(Xd,Yd)。
2、根据畸变模型K得到畸变图像(Xcorrect,Ycorrect)。
3、根据畸变图像到像素坐标系转换,得到最终映射的畸变坐标(Xs,Ys)。

在这里插入图片描述

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值