前言
由于本人近期正在展开数字图像相关技术用于测量材料形变方向的研究,既然涉及到使用图像处理参与到测量或检测研究当中,就肯定避不开构建物空间上的任意一点与相机所拍摄到的图像上一点之间的数学关系及数学模型。之前有过标定经验的我只是单纯的使用别人封装好的函数,如今仔细推导过后才发现其中奥秘所在。我认为想要在一个技术上有所创新,最核心的还是能够将其学的透彻,我希望将自己作为一个初学者学习和推导该原理的过程记录下来,也方便之后每一个涉足该领域知识的人能更清晰更快的应用这些知识。
本文所写的内容主要参考《学习OpenCV 3 》1以及 大奥特曼打小怪兽大佬的博客第六节、双目视觉之相机标定2。但是本文的讲解思路会稍有不同,同时也会更偏向数学推导。如果本文对你的帮助不大,建议可以看一下提到的书籍与博客,可以提供一些不同角度的讲解。
本文的推导基于上一篇笔记【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解,建议先行阅读,上一篇笔记探讨了为什么要标定以及标定是在标定什么,本章节我希望探讨的有以下几个问题:
- 如何进行标定?
- 标定时候究竟需要多少标定图像?每个标定图像需要有多少特征点数?
本专栏目录:
在上一篇笔记中,我们知道了标定的主要目的是为了建立摄像机图像像素位置与物体空间位置之间的关系,即世界坐标系与像素坐标系之间的关系。而这些关系里面主要有两种模型需要解算:小孔成像模型与畸变模型,其中前者是线性的,后者是非线性的。首先来看一下小孔成像模型的表达的映射关系:
z c [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ R t 0 3 T 1 ] [ x w x w z w 1 ] z_{c}\left[\begin{array}{l} u \\ v \\ 1 \end{array}\right] =\left[\begin{array}{ccc} f_{x} & 0 & c_{x}\\ 0 &f_{y}& c_{y}\\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{cccc} R & t \\ 0_{3}^{T} & 1 \end{array}\right]\left[\begin{array}{c} x_{w} \\ x_{w} \\ z_{w} \\ 1 \end{array}\right] zc⎣⎡uv1⎦⎤=⎣⎡fx000fy0cxcy1⎦⎤[R03Tt1]⎣⎢⎢⎡xwxwzw1⎦⎥⎥⎤其中
- u , v u,v u,v表示像素坐标系下的坐标
- f x = f ⋅ s x , f y = f ⋅ s y f_{x}=f \cdot s_{x},f_{y}=f \cdot s_{y} fx=f⋅sx,fy=f⋅sy为两个组合量,表达摄像机系统的焦距与对应方向的单位尺寸像素数相乘的结果
- R R R表示从世界坐标系到相机坐标系的旋转矩阵,其实际包含的未知量只有三个,即坐标系绕三个轴的旋转角度
- t t t表示从世界坐标系到相机坐标系的平移向量,包含三个未知量
- x w , x w , z w x_{w},x_{w},z_{w} xw,xw,zw表示对应物点在世界坐标系下的坐标位置
- z c z_{c} zc表示物点在相机坐标系下的Z方向坐标值,其具体数值可以从 [ R t 0 3 T 1 ] [ x w x w z w 1 ] \left[\begin{array}{cccc} R & t \\ 0_{3}^{T} & 1 \end{array}\right]\left[\begin{array}{c} x_{w} \\ x_{w} \\ z_{w} \\ 1 \end{array}\right] [R03Tt1]⎣⎢⎢⎡xwxwzw1⎦⎥⎥⎤中提取出来,是一个中间变量
在计算机视觉中将这种从一个平面到另一个平面的投影映射称之为单应性,我们将上面这个公式稍微改写一下,将 z c z_{c} zc移动到等式的右边,设其倒数为 s = 1 / z c s=1/z_{c} s=1/zc,设摄像机系统的内参矩阵为 M = [ f x 0 c x 0 f y c y 0 0 1 ] M=\left[\begin{array}{ccc} f_{x} & 0 & c_{x}\\ 0 &f_{y}& c_{y}\\ 0 & 0 & 1 \end{array}\right] M=⎣⎡fx