最详细、最完整的相机标定讲解

2019 年 11 月 24 日 计算机视觉life


点击上方“计算机视觉life”,选择“星标”

快速获得最新干货

本文转载自新机器视觉

最近做项目要用到标定,因为是小白,很多东西都不懂,于是查了一堆的博客,但没有一个博客能让我完全能看明白整个过程,绝大多数都讲的不全面,因此自己总结了一篇博客,给自己理一下思路,也能够帮助大家。(张正友标定的详细求解还未完全搞明白,后面再加)


参考博客:


相机标定(Camera calibration)原理、步骤
(http://blog.csdn.net/lql0716/article/details/71973318?locationNum=8&fps=1)

相机标定内容详解 (转载自祥的博客)
(http://blog.csdn.net/humanking7/article/details/44756073)

张正友标定介绍  
(http://blog.csdn.net/heroacool/article/details/50286677)

[图像]摄像机标定(2) 张正友标定推导详解
(http://blog.csdn.net/humanking7/article/details/44756235)

MATLAB–相机标定教程
(http://blog.csdn.net/heroacool/article/details/51023921)


在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。


畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能由于摄像机镜头的原因。


坐标转换基础


在视觉测量中,需要进行的一个重要预备工作是定义四个坐标系的意义,即 摄像机坐标系 、 图像物理坐标系、 像素坐标系 和 世界坐标系(参考坐标系) 。

一、图像坐标系(x,y)至像素坐标系(u,v)

1.两坐标轴互相垂直

此时有

2.一般情况,两轴不互相垂直

此时有

写成矩阵形式为:

二、相机坐标系(Xc,Yc,Zc)至图像坐标系(x,y)

(根据小孔成像原理,图像坐标系应在相机坐标系的另一边,为倒立反向成像,但为方便理解和计算,故投影至同侧。)

根据三角形相似性原理得:

三、世界坐标系(Xw,Yw,Zw)至相机坐标系(Xc,Yc,Zc)

四、合并公式

R、T矩阵为相机的外参矩阵。

畸变

畸变一般可以分为:径向畸变、切向畸变

径向畸变来自于透镜形状。
 切向畸变来自于整个摄像机的组装过程。

畸变还有其他类型的畸变,但是没有径向畸变、切向畸变显著,所以忽略不计。

径向畸变(桶形畸变和枕形畸变):

实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响。
 如下图,光线在原理透镜中心的地方比靠近中心的地方更加弯曲。对于常用的普通透镜来说,这种现象更加严重。筒形畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。 
 

对于径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。
 对于径向畸变可以通过下面的泰勒级数展开式进行校正:
 
 这里的x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。

切向畸变(薄透镜畸变和离心畸变):

切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。

切向畸变可以通过如下公式来矫正:
 
 这里的x、y是图像中的畸变后的位置坐标,通过校正得到真实坐标。r是该点距成像中心的距离。

opencv畸变模型

径向畸变模型:

切向畸变模型:

可得:

由公式可得畸变有k1,k2,k3,p1,p2五个参数,对于质量比较好的相机来说,切向畸变很小,可忽略,径向畸变系数k3也可忽略,只计算k1,k2两个参数。张正友标定中就默认为p1,p2为0。

张正学标定中的畸变模型:

标定方法

1、传统相机标定

最简单的相机标定为线性标定,即不考虑相机的畸变而只考虑空间坐标转换。
每个坐标点有X,Y两个变量,可列两个方程,相机内参有5个未知数,外参平移和旋转各3个,共有11个变量,因此至少需要6个特征点来求解。

2、非线性标定

当镜头畸变明显时必须考虑畸变,一般较为便宜的网络摄像头畸变特别大,而价格较贵的工业摄像头则畸变很小,因为其中已经嵌入了许多消除畸变的程序。这时线性模型转化为非线性模型,需要通过非线性标定方法求解。有最速下降法,遗传算法,高斯牛顿法和神经网络算法等。

3、张正友标定介绍

(张正友标定只考虑了径向畸变,没有考虑切向畸变)

由上面的坐标转换可得:

我们把世界坐标系放置在标定板平面上,令Z=0,这时有:


H为3X3矩阵,并且有一个元素作为齐次坐标,则有8个未知元素,一组坐标对应两个方程,则至少需要四组对应的点即可算出单应性矩阵H。

旋转矩阵为正交矩阵,因此有以下性质:

代入可得

由此可求出单应性矩阵A,因A有5个元素,则至少需要三个单应性矩阵方能求解,那么就需要三张不同的标定图片,这就是为什么标定需要用至少3张以上的图片的原因之一(我还不是完全确定是这样)

3.2.3 标定

相机标定步骤:

1、打印一张棋盘格,把它贴在一个平面上,作为标定物。
 2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。 
 3、从照片中提取棋盘格角点。 
 4、估算理想无畸变的情况下,五个内参和六个外参。 
 5、应用最小二乘法估算实际存在径向畸变下的畸变系数。 
 6、极大似然法,优化估计,提升估计精度。

Matlab工具箱标定:

1、应用程序中找到Camera Calibration

2、添加标定板拍摄图片(按Ctrl可一次添加多张)

3、输入棋盘格每格的尺寸大小

4、显示已检测出的棋盘格,点击Calibration,开始标定。

5、得到标定结果(平均误差小于0.5即可认为结果可靠,这个地方我还不是很清楚)

6、可查看标定结果和程序


来源:CSDN博客,https://blog.csdn.net/lxy_2011/article/details/80675803


从零开始学习三维视觉核心技术SLAM,扫描查看介绍,3天内无条件退款

早就是优势,学习切忌单打独斗,这里有教程资料、练习作业、答疑解惑等,优质学习圈帮你少走弯路,快速入门!

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

投稿也欢迎联系:simiter@126.com

长按关注计算机视觉life


推荐阅读

从零开始学习「张氏相机标定法」(一)成像几何模型

从零开始学习「张氏相机标定法」(二)单应矩阵

从零开始学习「张氏相机标定法」(三)推导求解

从零开始学习「张氏相机标定法」(四)优化算法前传

从零开始学习「张氏相机标定法」(五)优化算法正传

一次拍摄搞定多相机自动化标定

利用自识别标记实现复杂场景下相机标定

实战 | 相机标定

IMU标定 | 工业界和学术界有什么不同?

相机标定究竟在标定什么?

解放双手|教你进行相机与IMU外参的在线标定

综述 | 相机标定方法


最新AI干货,我在看  

登录查看更多
55

相关内容

少标签数据学习,54页ppt
专知会员服务
194+阅读 · 2020年5月22日
【天津大学】风格线条画生成技术综述
专知会员服务
31+阅读 · 2020年4月26日
3D目标检测进展综述
专知会员服务
187+阅读 · 2020年4月24日
【CMU】机器学习导论课程(Introduction to Machine Learning)
专知会员服务
58+阅读 · 2019年8月26日
实战 | 如何制作一个SLAM轨迹真值获取装置?
计算机视觉life
11+阅读 · 2019年10月16日
计算机视觉方向简介 | 多视角立体视觉MVS
计算机视觉life
14+阅读 · 2019年10月10日
【泡泡读者来稿】VINS 论文推导及代码解析(三)
泡泡机器人SLAM
30+阅读 · 2019年3月16日
【泡泡读者来稿】VINS 论文推导及代码解析(二)
泡泡机器人SLAM
32+阅读 · 2019年3月5日
【泡泡读者来稿】VINS 论文推导及代码解析(一)
泡泡机器人SLAM
112+阅读 · 2019年3月3日
实战 | 相机标定
计算机视觉life
15+阅读 · 2019年1月15日
【泡泡机器人原创专栏】IMU预积分总结与公式推导(三)
计算机视觉方向简介 | 阵列相机立体全景拼接
计算机视觉life
6+阅读 · 2018年1月3日
干货|全景视频拼接的关键技术分析
全球人工智能
13+阅读 · 2017年7月15日
Arxiv
5+阅读 · 2018年10月15日
Structure Aware SLAM using Quadrics and Planes
Arxiv
4+阅读 · 2018年8月13日
Arxiv
3+阅读 · 2018年5月21日
Arxiv
6+阅读 · 2018年2月28日
Arxiv
5+阅读 · 2018年1月17日
VIP会员
相关资讯
实战 | 如何制作一个SLAM轨迹真值获取装置?
计算机视觉life
11+阅读 · 2019年10月16日
计算机视觉方向简介 | 多视角立体视觉MVS
计算机视觉life
14+阅读 · 2019年10月10日
【泡泡读者来稿】VINS 论文推导及代码解析(三)
泡泡机器人SLAM
30+阅读 · 2019年3月16日
【泡泡读者来稿】VINS 论文推导及代码解析(二)
泡泡机器人SLAM
32+阅读 · 2019年3月5日
【泡泡读者来稿】VINS 论文推导及代码解析(一)
泡泡机器人SLAM
112+阅读 · 2019年3月3日
实战 | 相机标定
计算机视觉life
15+阅读 · 2019年1月15日
【泡泡机器人原创专栏】IMU预积分总结与公式推导(三)
计算机视觉方向简介 | 阵列相机立体全景拼接
计算机视觉life
6+阅读 · 2018年1月3日
干货|全景视频拼接的关键技术分析
全球人工智能
13+阅读 · 2017年7月15日
Top
微信扫码咨询专知VIP会员