• MATLAB自带相机标定应用程序,有camera calibrator和stereo camera calibrator两类相机标定应用程序。其操作简单、直观,能够获得相机的内、外参数以及畸变参数等。其中,camera calibrator用于单目相机标定;stereo camera calibrator用于双目相机标定。两者操作方式相同,唯一区别在于stereo camera calibrator添加图片时会弹出添加两个相机图片的操作框。本文使用Matlab2017a自带的Camera Calibrator工具箱完成单目相机的内参标定。
  • 相机标定 python 单目相机标定_c++

  • 首先需要打印一张标定板图像,将它贴在一个平面上,作为标定物,或者直接购买一个标定板。推荐一个生成相机标定板文件(pdf)的网站:标定文件生成网站可选择多种标定板样式。
  • 平面标定板具有以下几个优点:
    1.易于操作;
    2.尺寸可以制作的非常精确;
    3.非常方便应用在背光照明应用中,只需要使用透明材料制作放置标志点的底盘即可。
  • 通过调整标定板或摄像机的方向,为标定物拍摄一组不同方向的照片,最好大于10张图片,本文使用的图片链接:标定图片。
  • 打开Matlab,在Matlab中找到APP,点击进入,找到Camera Calibrator工具箱
  • 相机标定 python 单目相机标定_开发语言_02


  • 相机标定 python 单目相机标定_相机标定 python_03

  • 进入工具箱,点击Add Images
  • 相机标定 python 单目相机标定_开发语言_04

  • 将所有图片添加进去,对于标定图像数量,位姿越多,标定结果也会越精确,建议在10到20幅之间。按照上图中的1、2、3进行相机标定操作。我们可以选择径向畸变系数以及是否计算切向畸变和倾斜,通过优化选项可以设置内参矩阵以及径向畸变参数的输出形式。
  • 相机标定 python 单目相机标定_c++_05


  • 相机标定 python 单目相机标定_相机标定_06

  • 注:这里表示由三张图片不可用。
  • 相机标定 python 单目相机标定_c++_07


  • 相机标定 python 单目相机标定_相机标定_08

  • 点击 Export Camera Parameters,可在matlab工作空间里可以看到相机参数的属性。查看相机内参可以直接命令行输入cameraParams.IntrinsicMatrix
    同理可以查看其它参数。

中文名

英文名

内参矩阵

Intrinsic Matrix

焦距

Focal Length

主点

Principal Point

径向畸变

Radial Distortion

切向畸变

Tangential Distortion

旋转矩阵

Rotation Matrices

平移向量

Translation Vectors

平均重投影误差

Mean Reprojection Error

重投影误差

Reprojection Errors

重投影点

Reprojected Points

  • 相机参数输出camera calibrator应用程序相机标定参数输出:
  • MATLAB相机标定结果中的内参矩阵默认格式为

其中fx,fy、分别为x轴和y轴的有效焦距;s为u轴和v轴的不垂直因子,一般令s=0; u0,v0是光学中心。注意事项:
1.制作棋盘格标定板时,黑色与白色方格尺寸需相同,所有方格尺寸一致
2.采集标定板图像时,应采集多幅不同位姿的标定板图像,采集图像数量不应太少,建议10~20幅为宜;
3.采集图像时,相机焦距不能调节,会改变相机的内参数,导致标定失败;
4.MATLAB相机标定程序能够自动计算重投影误差,重投影误差越小表示相机标定的精度越高。

  • 相机标定参数的准确度

相机标定过程中如果标定板放置不适当的话将会导致相机参数中某个参数或某些参数不能得到唯一值。为了得到高准确度的相机参数必须避免这种情况的发生。除了这个影响外,影响相机参数准确度的主要因素就是用于进行相机标定的图像数量。下面显示了用于相机标定的图像数量对参数的影响。

相机标定 python 单目相机标定_开发语言_09

从图中可以看出相机参数的准确度随使用图像数量的增加而明显增加。为什么使用相当多的标定图像可以提高相机标定精度?这主要是因为相机参数之间存在不容忽视的相关性这些参数只能通过多次无关测量进行求解。为了得到更准确的相机参数,我们需要这样做:
1.标定板在图像中最好能够覆盖整个视野(覆盖图像的每个角落可以使得径向畸变系数更准确)
2.标定板覆盖较大的深度范围(将标定板绕它的轴和轴旋转或者放置在不同距离的位置上)

  • 标定结果评判标准

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

提出问题:重投影误差是否可以完全正确反应出标定(内外参)结果是否正确?
不一定,这个重投影误差还受以下因素影响:
①图像角点检测精度,如果角点检测精度差,会直接影响到重投影误差;
②相机本身存在噪声,相机抖动;
③与相机分辨率有关,由于单位是像素。在其它条件一致的情况下,分辨率越大的相机,它的像素越密集,得到的重投影误差也会大;
④优化算法

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

  • 应用

①单目:PnP问题
根据三维标定靶与二维平面之间的对应点坐标,求解三维标定靶与二维平面之间的转换关系(旋转和平移矩阵)在OpenCV中可通过函数solvePnP实现。
②双目测量
用两个相机拍摄的图片中可以恢复三维信息,这是由于二维图片中的一点对应于三维空间中的一条射线,由两条射线的交点可以确定这个点在三维空间中的位置。