总结 | 相机标定的基本原理与改进方法

2020 年 5 月 9 日 计算机视觉life

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

快速获得最新干货


1、相机模型
(1)各个坐标系
确定空间某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型(各个坐标系),这些坐标系之间的转换参数就是相机参数,求解参数的过程叫做相机标定(摄像机标定)。建立立体视觉系统所需要的各个坐标系,包括世界坐标系、相机坐标系、以及图像坐标系(物理和像素坐标系)。

坐标系名称

坐标系描述

世界坐标系(3D)

描述目标在真实世界中的位置引入的参考坐标系(Xw,Yw,Zw)

相机坐标系(3D)

联系世界坐标系与图像坐标系的桥梁,一般取摄像机的光学轴为z轴(Xc,Yc,Zc)

图像物理坐标系(2D)

根据投影关系引入,方便进一步得到像素坐标,单位为毫米,坐标原点为摄像机光轴与图像物理坐标系的交点位置(x,y)

图像像素坐标系(2D)

真正从相机内读到的信息,图像物理坐标的离散化,以像素为单位,坐标原点在左上角(u,v)

首先明确各个坐标系之间的转换关系:

  世界坐标系与相机坐标系

这是将一个三维的坐标系转换成另一个三维的坐标系,这两个坐标系之间的转换属于刚体转换,物体只改变在两个坐标系中的空间位置(平移)和朝向(旋转),而不改变其形状。它们之间的转换关系可以用旋转矩阵R和平移矩阵T来完成,这两个矩阵反映了世界坐标系与相机坐标系之间的转换关系,合称外参矩阵Lw。获得了外参矩阵,这样已知世界坐标系中的一点通过转换关系就可以得到此点在相机坐标系的位置,反之亦成立。 

  相机坐标系与图像物理坐标系

这是一个将三维的坐标系转化为二维的坐标系,这两个坐标系之间的转换要通过几何投影模型关系获得,下面是两个坐标系的投影关系示意图: 

   图像物理坐标系与图像像素坐标系

首先以一个形象的例子来说明两个坐标系间的区别。物理坐标系是一个连续的概念,它是以毫米为单位,就好比某一观众在电影院里的具体坐标值(3.4,5.9);而像素坐标系是一个离散的概念,它是以像素作为单位,只能是整数值坐标,就好比某一观众在电影院里的位置是(第三排,第六列)。另外还需要注意的是,这两个坐标系的原点位置也不相同,物理坐标系将原点定为摄像机光轴与图像物理坐标系的交点位置,通常称其为主点;而像素坐标系则以像素图像的左上角为原点。

(2)相机畸变模型
一般只考虑径向畸变k和切向畸变p

 其中

一般选择2或3个k值,这个是经验证过可以获得较好的结果,如果k取得再多影响不会很大可以忽略,甚至可能反而导致效果不好。
畸变模型:枕型畸变(k>0)和桶型畸变(k<0)

当k>0时,r越大(点离中心越远),畸变量越大,r越小,畸变量越小,呈枕型。

当k<0时,r越大(点离中心越远),畸变量越小,r越小,畸变量越大,呈桶型。

(3)相机标定参数

内参:

(单位长度的像素个数)

(主点坐标)

(畸变系数)

外参:R、T(旋转和平移矩阵)

2、张正友标定法

(1)标定基本原理

目标函数:

这里A为内参,R、T为旋转平移矩阵。n代表n张图片,m代表每张图片上有m个角点。

可以将三维空间中的点都投影到二维空间的对应点m^处,在二维平面上通过角点提取算法可以提取出对应角点。通过选择合适的内外参数来使得目标函数达到最小,将这一组内外参数作为实际求得的内外参数。

提出问题:为什么张正友没有使用这样一种简单直观的方式?

因为这样做要优化的量太多,如果初始值不好很容易陷入局部最优。

张正友的贡献:通过数值解法解出了一个比较准确的初始值(内外参),使得后面做最优化的方法有一个非常好的初始值,所以结果比较准。

(2)张正友标定原理

先求解单应性矩阵,根据单应性矩阵求解相机的内外参,这里不做详细过程介绍。张正友标定法通过代数求解出了一个代数意义上的内外参最优解,最后也需要将多组代数意义上的最优解代入目标函数中验证,获得物理意义上的最优解。

也可以将畸变因子考虑在内,做进一步优化,目标函数就变为如下形式:

3、一些改进

(1)明确张正友的方法没有限制棋盘格或者圆环。

只要可以检测出需要的特征点就可以,至于图案形状是没有限制的。

(2)圆环与棋盘格的优缺点分别是什么

圆环标定板的精度会好一些,原因是因为圆的特征检测(提取圆心坐标)的鲁棒性要比正方形的特征检测(检测边缘的交点作为角点)好。

(3)比较圆环与棋盘格标定板

圆检测精度高,表现为中心拟合精度高,但是具有偏心误差,这是由于空间中的圆的圆心投影不等于投影出的椭圆的圆心。

棋盘格检测精度低,可能是因为实际的棋盘格标定板的边缘存在过渡带,不是直接的由白瞬间变黑,但不存在偏心误差,这是由于空间中两条相交直线的交点,投影到二维图像上仍然是这两条投影直线的交点,故棋盘格检测不存在偏心误差。。      

解决办法:可以将椭圆先投影为正圆,检测正圆的圆心,再通过透视投影的方法将其对应到原图像中,而不是检测椭圆的中心,通过这样一个变换把真实的圆心提取出来,这样就不存在偏心误差了。

以下是使用棋盘格标定板和圆环标定板的实验数据:

(4)标定板选择

如果知道怎么纠正偏心误差,用圆环标定板的精度一定会更高;如果不知道如何纠正偏心误差,则选择圆环标定板和棋盘格标定板的精度差不多或更差。

4、实际操作

(1)OpenCV中的函数cv::calibrateCamera

calibrateCamera(

object_points,//3维物点坐标

image_points,//通过角点检测出的2D像点坐标

imageSize,//图片尺寸

cam_intr_para,//相机内参

distCoffs,//相机畸变矩阵

rvecs,//旋转矩阵

tves//平移矩阵

)

(2)拍摄机位和数量的选择

至少需要拍不同视角的3张照片,大概需要拍20张不同视角照片,照片最好覆盖图像的每一个位置,不能只固定在中间位置上拍摄。

(3)标定结果的评判标准

重投影误差Re-projection error

用目标函数,将三维物点投影至二维图像中与二维图像中提取出的对应角点坐标做某种差值计算(目标函数)求和。

提出问题:重投影误差是否可以完全正确的反应出标定(内外参)结果是否正确?

不一定,这个重投影误差还受以下因素影响:

①图像角点检测精度,如果角点检测精度差,会直接影响到重投影误差;

②相机本身存在噪声,相机抖动;

③与相机分辨率有关,由于单位是像素。在其它条件一致的情况下,分辨率越大的相机,它的像素越密集,得到的重投影误差也会大;

④优化算法

其它评判标准:

选择两个三维的点,将其投影在二维图像上,计算这两个点的距离。用角点检测算法在这个图像上检测出对应点,也计算这两个像点之间的距离。判断两个距离的偏差。

(4)应用

①单目:PnP问题

根据三维标定靶与二维平面之间的对应点坐标,求解三维标定靶与二维平面之间的转换关系(旋转和平移矩阵)。

在OpenCV中可通过函数solvePnP实现。

②双目测量

用两个相机拍摄的图片中可以恢复三维信息,这是由于二维图片中的一点对应于三维空间中的一条射线,由两条射线的交点可以确定这个点在三维空间中的位置。


从0到1学习SLAM,戳↓

一文概览视觉SLAM详细学习路线、思维脑图

交流群

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


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

长按关注计算机视觉life



推荐阅读

从零开始一起学习SLAM | 为什么要学SLAM?

从零开始一起学习SLAM | 学习SLAM到底需要学什么?

从零开始一起学习SLAM | SLAM有什么用?

从零开始一起学习SLAM | C++新特性要不要学?

从零开始一起学习SLAM | 为什么要用齐次坐标?

从零开始一起学习SLAM | 三维空间刚体的旋转

从零开始一起学习SLAM | 为啥需要李群与李代数?

从零开始一起学习SLAM | 相机成像模型

从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?

从零开始一起学习SLAM | 神奇的单应矩阵

从零开始一起学习SLAM | 你好,点云

从零开始一起学习SLAM | 给点云加个滤网

从零开始一起学习SLAM | 点云平滑法线估计

从零开始一起学习SLAM | 点云到网格的进化

从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码

从零开始一起学习SLAM | 掌握g2o顶点编程套路

从零开始一起学习SLAM | 掌握g2o边的代码套路

从零开始一起学习SLAM | ICP原理及应用

从零开始一起学习SLAM | 用四元数插值来对齐IMU和图像帧

可视化理解四元数,愿你不再掉头发

视觉SLAM技术综述

研究SLAM,对编程的要求有多高?

现在开源的RGB-D SLAM有哪些?

详解 | SLAM回环检测问题

汇总 | SLAM、重建、语义相关数据集大全

吐血整理 | SLAM方向国内有哪些优秀的公司?

最强战队 | 三维视觉、SLAM方向全球顶尖实验室汇总

SLAM方向公众号、知乎、博客上有哪些大V可以关注?

汇总 | 最全 SLAM 开源数据集

综述 | SLAM回环检测方法

干货总结 | SLAM 面试常见问题及参考解答
2019 最新SLAM、定位、建图求职分享,看完感觉自己就是小菜鸡!
2019暑期计算机视觉实习应聘总结

2018年SLAM、三维视觉方向求职经验分享

经验分享 | SLAM、3D vision笔试面试问题


给优秀的自己点个赞  

登录查看更多
2

相关内容

【开放书】SLAM 中的几何与学习方法,62页pdf
专知会员服务
107+阅读 · 2020年6月5日
基于视觉的三维重建关键技术研究综述
专知会员服务
154+阅读 · 2020年5月1日
【天津大学】风格线条画生成技术综述
专知会员服务
31+阅读 · 2020年4月26日
【CVPR2020】图神经网络中的几何原理连接
专知会员服务
56+阅读 · 2020年4月8日
专知会员服务
41+阅读 · 2020年2月20日
实战 | 如何制作一个SLAM轨迹真值获取装置?
计算机视觉life
11+阅读 · 2019年10月16日
计算机视觉方向简介 | 多视角立体视觉MVS
计算机视觉life
14+阅读 · 2019年10月10日
计算机视觉方向简介 | 基于单目视觉的三维重建算法
计算机视觉life
30+阅读 · 2019年4月9日
实战 | 相机标定
计算机视觉life
15+阅读 · 2019年1月15日
视觉SLAM技术综述
计算机视觉life
25+阅读 · 2019年1月4日
干货合集 | 卷积神经网络CNN的基本原理
七月在线实验室
6+阅读 · 2018年7月27日
机器学习的5种距离度量方法
七月在线实验室
9+阅读 · 2018年5月18日
干货|全景视频拼接的关键技术分析
全球人工智能
13+阅读 · 2017年7月15日
Learning Implicit Fields for Generative Shape Modeling
Arxiv
10+阅读 · 2018年12月6日
Arxiv
11+阅读 · 2018年4月25日
Arxiv
3+阅读 · 2018年3月14日
Arxiv
4+阅读 · 2018年1月29日
Arxiv
4+阅读 · 2017年11月4日
VIP会员
相关资讯
实战 | 如何制作一个SLAM轨迹真值获取装置?
计算机视觉life
11+阅读 · 2019年10月16日
计算机视觉方向简介 | 多视角立体视觉MVS
计算机视觉life
14+阅读 · 2019年10月10日
计算机视觉方向简介 | 基于单目视觉的三维重建算法
计算机视觉life
30+阅读 · 2019年4月9日
实战 | 相机标定
计算机视觉life
15+阅读 · 2019年1月15日
视觉SLAM技术综述
计算机视觉life
25+阅读 · 2019年1月4日
干货合集 | 卷积神经网络CNN的基本原理
七月在线实验室
6+阅读 · 2018年7月27日
机器学习的5种距离度量方法
七月在线实验室
9+阅读 · 2018年5月18日
干货|全景视频拼接的关键技术分析
全球人工智能
13+阅读 · 2017年7月15日
Top
微信扫码咨询专知VIP会员