单目相机标定是什么?
举个例子。
我拍了一张狗的图像。那么真实世界里,这个狗头是怎么变成图像里的狗头的呢。
狗头(假设狗头很小,就是一个点)在真实世界里,用一个三维坐标可以定位。在图像里,狗头是一个二维坐标点。 根据矩阵论学到的知识,要想从真狗头变到图里的狗头,实际上是一个三维坐标到二维坐标的变换,也就是映射关系。
单目相机标定,就是想要求解这个映射关系。
从相机到图像发生了哪些映射?
首先,物体在真实世界里,光要先到镜头。经过镜头成像,光会落在一个感光元件上。最终,形成了图像。
画一下重点,流程是这样的:真实世界-----》镜头-------》感光元件-----》图像。
于是,就以这四个东西,各自建坐标系,就是标定里著名的四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。
从真实世界到镜头,是一个刚性变换,意思就是仅发生了旋转和平移的变换。通过一个矩阵就可以描述旋转和平移变换。这个矩阵,就叫相机的外参矩阵。
从镜头到图像坐标系,就是初中物理学的凸透镜成像的原理。理想情况下,用最简单的相似性就可以计算出来。然而实际情况是镜头会发生畸变,这个畸变就不能简单的用矩阵来描述了,需要一个非线性的函数。
从图像坐标系到像素坐标系,就是简单的平移、离散化。具体来讲是这样的,成像元件和镜头和中心是在同一水平线上的,原点(0,0)都是它们各自的正中心。成像元件的每一个感光单元实际上就是图像的一个像素。而对于像素坐标系,坐标(0,0)的是左上角的那个像素,许多软件里也都是这样定义的。
后两步,也可以分别用矩阵来表示。俩矩阵乘一起,叫内参矩阵。
经典公式还是附上。
标定是怎么计算这些矩阵的?
这实际上是一个解方程的关系。我有一堆图像点(u,v), 还有一堆世界坐标(Xw, Yw, Zw),它们一一对应。根据上面这幅图上的数学关系,我建立一系列的方程,把内参和外参算出来就好了。最经典的求解方法就是张正友标定。
关于张正友标定存在以下几个问题:
关于方程的建立
1.图像点怎么获得?
张正友的方法是,拿一个棋盘格图像,通过角点检测,得到角点在图像里的坐标。
2.世界坐标怎么获得?
棋盘格的每个格子是已知尺寸的,比如20×20厘米这种。以棋盘格所在平面为世界坐标的z平面,以两个边为x轴和y轴。按照这个,数出来每个角点的坐标就行了。
关于方程的求解
1.求解方法
根据上述,假设我们用了一个7*6的棋盘格,我们就有42组对应的点坐标了。我们拿到的这些点有时候不能够得到精确解,只能用一些估计的方法,比如最大似然估计之类的,估计一个近似解。
2.求解流程
第一步:求解内参和外参矩阵的乘积。
内参和外参的乘积是一个3*3的矩阵,叫做单应性矩阵。
“单应性矩阵是齐次矩阵,有8个独立未知元素。当一张图片上的标定板角点数量等于4时(一个点有x坐标和y坐标,因此可以列出来两个方程),即可求得该图片对应的矩阵。当一张图片上的标定板角点数量大于4时,利用最小二乘法回归最佳的矩阵。”
第二步:求解内参矩阵。
求解内参矩阵
然后继续推呀推,最终发现:
“我们只要取3张标定板照片,即可求解内参矩阵。当标定板图片的个数大于3时(事实上一般需要15到20张标定板图片),可采用最小二乘拟合估计出矩阵,进而求解出内参矩阵。”
第三步:求解外参矩阵
第四步:求解畸变参数
张正友的方法仅考虑了幅度较大的径向畸变。
其他问题
1. 内参是相机和镜头本身的性质,只需标定一次就可以了。
2. 外参是相机和世界坐标的位置关系,一旦发生位置变化,就需要重新求解外参。求解外参的方法有PNP方法,以后熟悉了再做详细介绍。
3. 上文中公式1里,有一个尺度坐标
从3D到2D时,根据物体在世界坐标系的Z坐标
如果想2D到3D点映射时,只有图像上点坐标和内外参矩阵,计算时会发现尺度坐标
c++ 和Opencv 实现张正友标定 代码
代码放在了gitee上,里面有单目标定的测试图像和C++代码。
提供了相机标定、标定误差计算、矫正畸变图像、将3D点坐标映射至2D坐标。
代码网站如下:
幼儿园优秀毕业生崔如瑶/learn3Dgitee.com测试用图来源为:公众号麻瓜智能。 参考链接:
第三更,单目相机标定实践(完整过程)www.jianshu.com