问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

相机标定(Camera calibration)原理、步骤

创作时间:
作者:
@小白创作中心

相机标定(Camera calibration)原理、步骤

引用
CSDN
1.
https://blog.csdn.net/lql0716/article/details/71973318

相机标定是图像测量和机器视觉应用中的关键环节,其目的是建立相机成像的几何模型并求解相关参数。本文详细介绍了相机标定的原理、步骤以及使用Matlab进行相机标定的具体方法,内容涵盖坐标系转换、相机内参和畸变参数等核心概念。

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。

常用术语

  • 内参矩阵: Intrinsic Matrix
  • 焦距: Focal Length
  • 主点: Principal Point
  • 径向畸变: Radial Distortion
  • 切向畸变: Tangential Distortion
  • 旋转矩阵: Rotation Matrices
  • 平移向量: Translation Vectors
  • 平均重投影误差: Mean Reprojection Error
  • 重投影误差: Reprojection Errors
  • 重投影点: Reprojected Points

1、坐标系的转换

1.1 世界坐标系

世界坐标系(world coordinate),也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

1.2 相机坐标系

相机坐标系(camera coordinate),也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。

1.3 世界坐标系转换为相机坐标系

其中为33的旋转矩阵,为31的平移矢量,为相机坐标系的齐次坐标,为世界坐标系的齐次坐标。

1.4 像素坐标系、图像坐标系

图1:

像素坐标系(pixel coordinate)
如图1,像素坐标系是一个二维直角坐标系,反映了相机CCD/CMOS芯片中像素的排列情况。原点位于图像的左上角,轴、轴分别于像面的两边平行。

像素坐标系中坐标轴的单位是像素(整数)。

像素坐标系不利于坐标变换,因此需要建立图像坐标系,
其坐标轴的单位通常为毫米(mm),
原点是相机光轴与相面的交点(称为主点),即图像的中心点,轴、轴分别与轴、轴平行。故两个坐标系实际是平移关系,即可以通过平移就可得到。

图像坐标系转换为像素坐标系
其中,、分别为像素在、轴方向上的物理尺寸,为主点(图像原点)坐标。

1.5 针孔成像原理

图2:

如图,空间任意一点与其图像点之间的关系,与相机光心的连线为,与像面的交点即为空间点在图像平面上的投影。

该过程为透视投影,如下矩阵表示:

其中,为比例因子(不为0),为有效焦距(光心到图像平面的距离),是空间点在相机坐标系中的齐次坐标,是像点在图像坐标系中的齐次坐标。

1.6 世界坐标系转换为像素坐标系

其中,、,称为、轴的尺度因子,称为、轴的尺度因子,称为相机的内部参数矩阵,称为相机的外部参数矩阵,称为投影矩阵。

2 相机内参与畸变参数

2.1 相机内参

  • 参看1.6节所述

2.2 畸变参数

畸变参数(distortion parameters)
畸变(distortion)
是对直线投影(rectilinear projection)的一种偏移。
简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。
畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种
光学畸变(optical aberration),
可能由于摄像机镜头的原因。

畸变一般可以分为:径向畸变、切向畸变
1、径向畸变来自于透镜形状
2、切向畸变来自于整个摄像机的组装过程
畸变还有其他类型的畸变,但是没有径向畸变、切向畸变显著

畸变图示

径向畸变
实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响。
如下图,光线在原理透镜中心的地方比靠近中心的地方更加弯曲。对于常用的普通透镜来说,这种现象更加严重。筒形畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。
对于径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。

径向畸变包括:枕形畸变、桶形畸变

切向畸变

切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。

切向畸变可分为:薄透镜畸变、离心畸变

切向畸变图示:

2.2.1 opencv中的畸变模型

  • 径向畸变模型:
    以下公式由泰勒展式得出,在opencv中,,为真实坐标(发生畸变),为理想坐标。
  • 切向畸变模型:
  • 理想坐标与真实坐标:
    也即:

实际计算过程中,如果考虑太多高阶的畸变参数,会导致标定求解的不稳定。

2.2.2 张氏标定中的畸变模型

  • 张正友的方法只考虑了径向畸变,没有考虑切向畸变
  • 模型:
  • 理想情况下(没有畸变)图片的像素坐标为:
  • 真实的像素坐标为:
  • 真实坐标与理想坐标的关系式(泰勒展开):
    andare the ideal (distortion-free) and real (distorted) normalized image coordinates.
    其中,是径向畸变系数(coefficients of the radial distortion)。
    像素坐标表示为:
    即:

2.2.3 Tasi畸变模型

  • Tasi畸变模型同张氏畸变模型类似,也只考虑了径向畸变

2.3 相机标定

  • 相机标定步骤:
    1、打印一张棋盘格,把它贴在一个平面上,作为标定物。
    2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片。
    3、从照片中提取棋盘格角点。
    4、估算理想无畸变的情况下,五个内参和六个外参。
    5、应用最小二乘法估算实际存在径向畸变下的畸变系数。
    6、极大似然法,优化估计,提升估计精度。

3 Matlab相机标定

  • 打开matlab,找到“Camera Calibrator”并打开
  • 在新窗口中选择添加图片“Add Images”
  • 添加图片之后,会有如下提示,设置棋盘格的实际大小之后,点击ok
  • 点击“Calibrate”开始计算
  • 点击“Export Camera Parameters”,输出到matlab命令窗口

  • 导出的数据如下:
cameraParams = 
  cameraParameters (具有属性):
   Camera Intrinsics
    IntrinsicMatrix: [3x3 double]
        FocalLength: [510.6720 511.9534]
     PrincipalPoint: [332.3800 238.4849]
               Skew: 0
   Lens Distortion
        RadialDistortion: [0.0618 -0.4877]
    TangentialDistortion: [0 0]
   Camera Extrinsics
      RotationMatrices: [3x3x50 double]
    TranslationVectors: [50x3 double]
   Accuracy of Estimation
    MeanReprojectionError: 0.1923
       ReprojectionErrors: [77x2x50 double]
        ReprojectedPoints: [77x2x50 double]
   Calibration Settings
                        NumPatterns: 50
                        WorldPoints: [77x2 double]
                         WorldUnits: 'mm'
                       EstimateSkew: 0
    NumRadialDistortionCoefficients: 2
       EstimateTangentialDistortion: 0
estimationErrors = 
  cameraCalibrationErrors (具有属性):
    IntrinsicsErrors: [1x1 intrinsicsEstimationErrors]
    ExtrinsicsErrors: [1x1 extrinsicsEstimationErrors]  
  • 在命令窗口输入以下命令即可获得内参矩阵和径向畸变:
>> cameraParams.IntrinsicMatrix
ans =
  510.6720         0         0
         0  511.9534         0
  332.3800  238.4849    1.0000
>> cameraParams.RadialDistortion
ans =
    0.0618   -0.4877  

参考资料

  • 机器学习、深度学习、计算机视觉、自然语言处理及应用案例——干货分享(持续更新……)
  • 旋转矩阵、欧拉角、四元数理论及其转换关系
  • 基于生长的棋盘格角点检测方法–(1)原理介绍
  • opencv角点检测、棋盘格检测、亚像素cvFindCornerSubPix()
  • 相机标定(Camera calibration)
  • OpenCV相机标定和姿态更新
  • Camera Calibration and 3D Reconstruction
  • Camera Calibration
  • 相机姿态估计(二)–单目POSIT算法
  • 相机位姿估计1:根据四个特征点估计相机姿态
  • Head Pose Estimation using OpenCV and Dlib
  • opencv角点检测、棋盘格检测、亚像素cvFindCornerSubPix()
  • 关于OpenCV的那些事——相机标定
  • 计算机视觉-相机内参数和外参数
  • 张正友相机标定算法【2】
  • Python+OpenCV学习(17)—摄像机标定
  • 相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
  • 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
  • MATLAB–相机标定教程
  • 《学习opencv》
  • 张正友相机标定论文《A Flexible New Technique for Camera Calibration》
  • OpenCV相机标定
  • 畸变模型
  • 相机的那些事儿 - 概念、模型及标定
  • 相机标定(二)之相机畸变模型
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号