最近更新于 2022-05-22 22:58

简述

在单目视觉系统中,最重要的参数之一是相机的内参系数,它反映了环境信息到图像信息之间的映射关系。一个精确的内参系数是通过单目相机进行观测和测量的首要保证。相机内参系数与相机感光芯片位置、镜头位置等有关系。虽然在制作相机时可以生产指定标准的元器件并按照指定的尺寸装配摄像头,通过这些标准可以计算出摄像头的内参,但是由于工艺水平有限,元器件尺寸与标准值存在误差,同时装配位置也会与预期值有偏差使得真实的内参系数与理论值具有一定的偏差。另外在摄像头使用的过程中,镜头可能产生位移或者松动,使得内参系数再次发生改变。

本文资源下载:https://pan.baidu.com/s/1ihHe6_knNM-PLSnMtR3ifg?pwd=jwrc

测试环境

Ubuntu 20.04 x86_64
Python 3.9.10
opencv-python 4.5.5.64
jupyter 1.0.0

图像采集

将相机连接到计算机上,在 jupyter 中打开图像采集.ipynb并运行整个 notebook,通过点击捕获图像从相机获取图像,点击保存图像将图像保存到文件。

需要通过相机拍摄含有完整棋盘( chessboard.jpg)的图像,这些图像将用于相机标定。关于图像采集的建议:

  • 采集图像的整个过程中不能调整焦距(有些相机镜头可以转动调整),相机的任何镜头调整都会改变参数,如果需要调焦,那么应该在调焦后重新对相机标定再使用。
  • 从左上、右上、左下、右下和正中心五个位置采集图像
  • 采集图像时不要全部拍摄镜头表面与棋盘平行的,拍摄一些有一定倾斜角度的
  • 拍摄的图像中,棋盘必须清晰
  • 采集的图像数建议至少 20 张,太少的话标定的参数不准确
  • 标定使用的棋盘图像建议长宽不等的最好,这里我提供的就是 9×6 内角点的棋盘图像

相机标定

完成图像采集以后关闭上面的 notebook

再打开相机标定.ipynb,运行整个 notebook,程序计算出相机参数并保存到文件 camera_parameters.pkl

重投影误差越小,代表标定越准确

相机校准

通过前面的标定已经计算出了相机参数,校准的时候只需要读取相机参数,并结合相机获取的图像进行一定的处理。

这里提供了一个相机校准示例程序,通过点击捕获图像进行拍摄,上下分别显示原图和校准后的图像,如:

可以看到原图明显带有畸变,校准后图像就比较正常了

作者 IYATT-yx