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

20 篇文章 14 订阅
1 篇文章 0 订阅

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


author@jason_ql(lql0716)
http://blog.csdn.net/lql0716


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

  • 常用术语
    内参矩阵: 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) (xw,yw,zw) ,也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

1.2 相机坐标系

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

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

xcyczc1=[R0t1]xwywzw1

其中 R 为3*3的旋转矩阵, t 为3*1的平移矢量, (xc,yc,zc,1)T 为相机坐标系的齐次坐标, (xw,yw,zw,1)T 为世界坐标系的齐次坐标。

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

  • 图1:
    此处输入图片的描述

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

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

  • 图像坐标系转换为像素坐标系

uv1=1/dX0001/dY0u0v01XY1

其中, dX dY 分别为像素在 X Y轴方向上的物理尺寸, u0,v0 为主点(图像原点)坐标。

1.5 针孔成像原理

图2:
此处输入图片的描述

如图,空间任意一点 P 与其图像点p之间的关系, P 与相机光心o的连线为 oP oP 与像面的交点 p 即为空间点P在图像平面上的投影。
该过程为透视投影,如下矩阵表示:

sXY1=f000f0001000xyz1

其中, s 为比例因子(s不为0), f 为有效焦距(光心到图像平面的距离),(x,y,z,1)T是空间点 P 在相机坐标系oxyz中的齐次坐标, (X,Y,1)T 是像点 p 在图像坐标系OXY中的齐次坐标。

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

suv1=1/dX0001/dY0u0v01f000f0001000[R0t1]xwywzw1=αx000αy0u0v01000[R0t1]xwywzw1=M1M2Xw=MXw

其中, αx=f/dX αy=f/dY ,称为 u v轴的尺度因子, M1 称为相机的内部参数矩阵, M2 称为相机的外部参数矩阵, M 称为投影矩阵。

2 相机内参与畸变参数

2.1 相机内参

  • 参看1.6节所述

2.2 畸变参数

  • 畸变参数(distortion parameters)

    畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。

    简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。

    畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能由于摄像机镜头的原因。

  • 畸变一般可以分为:径向畸变、切向畸变

    1、径向畸变来自于透镜形状
    2、切向畸变来自于整个摄像机的组装过程

    畸变还有其他类型的畸变,但是没有径向畸变、切向畸变显著

  • 畸变图示
    此处输入图片的描述

  • 径向畸变

    实际摄像机的透镜总是在成像仪的边缘产生显著的畸变,这种现象来源于“筒形”或“鱼眼”的影响。

    如下图,光线在原理透镜中心的地方比靠近中心的地方更加弯曲。对于常用的普通透镜来说,这种现象更加严重。筒形畸变在便宜的网络摄像机中非常厉害,但在高端摄像机中不明显,因为这些透镜系统做了很多消除径向畸变的工作。
    此处输入图片的描述

    对于径向畸变,成像仪中心(光学中心)的畸变为0,随着向边缘移动,畸变越来越严重。

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

  • 切向畸变

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

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

    • 切向畸变图示:
      此处输入图片的描述

2.2.1 opencv中的畸变模型

  • 径向畸变模型:

以下公式由泰勒展式得出,在opencv中 K=1 r2=x2+y2 , (x,y) 为真实坐标(发生畸变), (x,y) 为理想坐标。

δxr=x(k1r2+k2r4+k3r6+K)

δyr=y(k1r2+k2r4+k3r6+K)

  • 切向畸变模型:

δxd=2p1xy+p2(r2+2x2)+K

δyd=2p1(r2+2y2)+2p2xy+K

  • 理想坐标 (x,y) 与真实坐标 (x,y)

x=x+δxr+δxd

y=y+δyr+δyd

也即:

[xy]=(1+k1r2+k2r4+k3r6)[xy]+[2p1xy+p2(r2+2x2)2p1(r2+2y2)+2p2xy]

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

2.2.2 张氏标定中的畸变模型

  • 张正友的方法只考虑了径向畸变,没有考虑切向畸变

  • 模型:

    • 理想情况下(没有畸变)图片的像素坐标为:

      (u,v)

    • 真实的像素坐标为:

      (u¯,v¯)

    • 真实坐标与理想坐标的关系式(泰勒展开):
      (x,y) and (x¯,y¯) are the ideal (distortion-free) and real (distorted) normalized image coordinates.

      x¯=x+x[k1(x2+y2)+k2(x2+y2)2]

    y¯=y+y[k1(x2+y2)+k2(x2+y2)2]

    其中 k1 k2 是径向畸变系数(coefficients of the radial distortion)。

    像素坐标表示为:

    u¯=u+(uu0)[k1(x2+y2)+k2(x2+y2)2]

    v¯=v+(vv0)[k1(x2+y2)+k2(x2+y2)2]

    即:

    [(uu0)(x2+y2)(vv0)(x2+y2)(uu0)(x2+y2)2(vv0)(x2+y2)][k1k2]=[u¯uv¯v]

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

参考资料

  • 185
    点赞
  • 1266
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 44
    评论
相机标定工具gml camera calibration是一种计算机视觉领域的工具,用于对相机进行标定,以提高图像处理和计算机视觉任务的精度和准确性。 相机标定是指通过测量相机的内部和外部参数,包括焦距、畸变等,用数学模型来描述相机的成像特性和几何关系的过程。相机标定是进行三维重建、图像匹配、姿态估计等计算机视觉任务的前提。 gml camera calibration是一种相机标定工具,它能够自动提取相机的内部和外部参数,并且能够校正图像的畸变。通过使用gml camera calibration,我们可以获得更准确和稳定的相机参数,从而提高图像处理和计算机视觉任务的质量。 使用gml camera calibration进行相机标定的过程一般包括以下几个步骤:首先,需要收集一组已知的二维图像点和对应的三维世界坐标点作为标定数据。然后,通过对这组数据进行处理,可以得到相机的内部参数,如焦距、主点和径向畸变系数。最后,利用得到的内部参数和其他几何信息,可以计算得到相机的外部参数,包括相机的位置和姿态。 相机标定计算机视觉领域中非常重要的一个技术,它对于提高图像处理和计算机视觉任务的准确性和可靠性具有重要意义。gml camera calibration作为一种相机标定工具,提供了自动化的标定方法和算法,可以极大地简化了相机标定的过程,并且能够获得更准确和可靠的相机参数,从而提高计算机视觉任务的成果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI人工智能科学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值