MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
MATLAB是matrix & laboratory两个词的组合,意为矩阵工厂(矩阵实验室),软件主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式。
相机标定的原理
相机标定(Camera calibration)是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P的过程。在传统的相机模型中共有4种坐标系,标定的过程分为两个部分:
第一步:从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括R,t(相机外参)等参数;
第二步:从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括K(相机内参)等参数;
由上图可知:相机内参 × 相机外参 × 世界坐标系 = Z c × 像素坐标系
相机标定用于估计图像或摄像机的镜头和图像传感器的参数。通过标定校准,可以处理镜头失真、深度估计、物体测量和3D场景重建等。
相机参数包括相机内参、相机外参和畸变系数。通过相机的标定校准,可以:
绘制相机的相对位置(坐标系转换)和校准模式。计算重新投影误差。计算参数估计误差。相机标定
我使用的是大华工业相机,用待标定的相机在大华的SDK中拍20张左右的棋盘格照片,,存放到一个文件夹里。
1.打开MATLAB,在APP中选择CameraCalibrator
2.点击添加图片,把拍好的照片导入
这里的25表示的棋盘格中一个格子的大小是25x25,这个要根据你的棋盘格每个格子的大小自己进行修改。
3.选择三阶切向畸变和斜切:
4.仔细检查左边添加的每一张图片,去除坐标轴X,Y轴相反或坐标原点选错的图片。
然后点击绿色的三角形,进行相机标定
平均重投影误差要在0.5以下
看柱形图,如果都在0.5以上,那这些图片用不了,重新拍照。
如果有几个高于0.5,选中高于0.5的柱形,右键把图片移除
右上角是重建平均误差,只要平均误差小于0.5,就可以认为这是相机标定的结果是可靠的
筛选完后,点击绿色的 √ 子
确定,然后最小化窗口
回到matlab主页。
依次输入下面的代码,然后回车
format longcameraParams.IntrinsicMatrixcameraParams.RadialDistortioncameraParams.TangentialDistortion
可以得到最后的结果:
内参乘以1000倍,就是最终结果
1707.085055883454(fx) 0 0
0 1709.125160650983 (fy)
673.356532831026 (u0) 587.411038791306 (v0) 0
0.046524886260076 (k1) -0.15030371055971 (k2) 0.863657162780043 (k3)
0.010186565522162 (p1) 0.005102624642897 (p2)
经验:
1.相机参数:曝光8000,增益2.0,亮度默认50,自动白平衡为连续,缩放为100%(点击1:1)
2.标定环境不能太暗,也不能太亮。暗的话调亮度为60或70,不能调太高。
3.标定距离不能太远,2米之内。
4.照片总数为25张左右,最多只能删掉10张。
5.如果环境太暗,相机标定时可以用灯光照射标定板,使角点清晰可见
标定时相机要放平,棋盘格的角点要清晰可见,晚上标定的话用灯光照射棋盘格
首先超近距离拍3张,中,中左,中右。后退一点,再拍3张,中,中左,中右。再后退一点,拍9张,中,中左,中右,上中,上左,上右,下中,下左,下右。在后退一点,标定板微侧着来拍4张,都在中间拍,中侧,斜侧,左右侧。再往前一点侧着拍6张,标定板以不同的角度拍,标定板侧的角度不能过大。
5.误差要在0.5以下,超出0.5的就删,最多只能删掉10张,不行就重来。要是删掉几张后误差突然变大,退出标定,用这些照片重新标,只用小于0.5以下这种情况的。
6.看误差,误差最高的图片在哪个位置,下次拍照就减少那个位置,但每个方向必须要有一张图片