为什么需要标定相机

相机的数学意义:

  • 真实世界是三维的,拍摄照片是二维的
  • 相机(看成一个广义函数):输入三维场景,输出是二维图片(灰度值)
  • 彩色图是RGB三通道,每个通道可以认为是一张灰度图
  • 函数(映射关系)是不可逆的,也就是说我们无法从二维照片恢复出三维世界(二维照片没有深度信息)

相机标定的意义

  • 相机标定:使用带有pattern的标定板来求解相机参数的过程
  • 用一个简化的数学面模型来代表复杂的三维到二维成像过程
  • 相机的参数包括:相机内参(焦距)、相机外参(旋转、平移矩阵),镜头的畸变参数
  • 用途:畸变矫正,双目视觉,结构光,三维重建,SLAM,都需要相机标定,获得相机的参数才可以进行应用

坐标系变换

小孔成像原理

小孔成像说明

  • 简单没镜头
  • 有一个小的光源 (蜡烛)
  • 真实世界的3D物体,发出光线通过光圈(小孔)
  • 相机的另一侧,像平面位置,得到一个倒立的实像

坐标系介绍

必知的专用术语:

  • 世界坐标系(World Coords):点在真实世界中的位置,描述相机的位置,单位是m
  • 相机坐标系(Camera Coords): 以相机的sensor中心为原点,简历相机坐标系,单位m
  • 图像物理坐标系:经过小孔成像后得到的二维坐标系,单位是mm,坐标元旦是图中的点单目相机标定python处理_二维
  • 像素坐标系(Pixel Coords): 成像点在相机sensor上像素的行数和列数,不带任何的物理单位
  • 主点:光轴与图像平面的交点,图中的点p
  • 单目相机标定python处理_计算机视觉_02


在双目或多目系统中,世界坐标系和相机坐标系是不重合的,需要对世界坐标系通过旋转矩阵R和平移矩阵T,变换到相机坐标系

上图二维平面中,单目相机标定python处理_二维_03为图像坐标系原点,单目相机标定python处理_单目相机标定python处理_04是像素坐标系,像素坐标系相对于图像坐标系原点有些偏移。

(1)世界坐标系到相机坐标系

点p在不同坐标系的表示

  • 世界坐标系(World Coords): 单目相机标定python处理_计算机视觉_05
  • 相机坐标系(World Coords): 单目相机标定python处理_单目相机标定python处理_06

世界坐标系与相机坐标系之间的转换矩阵:

  • 单目相机标定python处理_单目相机标定python处理_07:相机坐标系相对于世界坐标系的旋转矩阵
  • 单目相机标定python处理_世界坐标系_08: 相机坐标系相对于世界坐标系的平移矩阵

转换关系数学表达:

单目相机标定python处理_单目相机标定python处理_09

单目相机标定python处理_计算机视觉_10


世界坐标系通过旋转矩阵R和偏移矩阵T,转换为相机坐标系 ,如果世界坐标系和相机坐标系重合,则R是一个单位矩阵,T是零矩阵,这样就可以把真实世界的点,转换为相机坐标系中的点

(2) 相机坐标系到图像坐标系

单目相机标定python处理_人工智能_11

  • 假设相机上的点单目相机标定python处理_计算机视觉_12 在图像坐标系的成像点是单目相机标定python处理_单目相机标定python处理_13
  • 基于小孔成像的原理
  • 空间中一点成像在平面中,与单目相机标定python处理_计算机视觉_14平面(镜头)平行,距离原点单目相机标定python处理_二维_15的平面
  • 取一个截面单目相机标定python处理_人工智能_16,可以得到右图,右图中的黑点单目相机标定python处理_世界坐标系_17,根据相似三角形关系可以计算得到:
    单目相机标定python处理_计算机视觉_18
  • 取一个截面单目相机标定python处理_计算机视觉_14,根据相似三角形关系可以计算得到:
    单目相机标定python处理_单目相机标定python处理_20
  • 结合两个三角变换关系,有:
    单目相机标定python处理_世界坐标系_21

简化后可以得到:
单目相机标定python处理_世界坐标系_22
单目相机标定python处理_二维_23

  • 写成矩阵形式:
    单目相机标定python处理_人工智能_24

(3) 图像坐标系到像素坐标系转换

单目相机标定python处理_计算机视觉_25

图像坐标系到像素坐标系的转换


上图中,图像中点单目相机标定python处理_单目相机标定python处理_26表示图像坐标系原点, 左上角单目相机标定python处理_人工智能_27表示像素坐标系的原点
坐标系的转换:

  • 图像坐标系的点单目相机标定python处理_单目相机标定python处理_13到像素坐标系的单目相机标定python处理_二维_29的转换
  • 图像坐标系的原点在sensor的中央,单位是mm
  • 像素坐标系的原点在sensor的左上角,单位为Pixel,也就是像素的行数和列数
  • 他们间的转换关系:
    单目相机标定python处理_人工智能_30
  • 写成矩阵形式:
    单目相机标定python处理_计算机视觉_31
  • 单目相机标定python处理_计算机视觉_32,单目相机标定python处理_二维_33:是sensor顾有参数,代表每个像素的毫米数
  • 单目相机标定python处理_单目相机标定python处理_34,单目相机标定python处理_人工智能_35:代表图像坐标系原点(光心)相对像素坐标系原点的偏移量
    综上:相机坐标系到像素的转换公式:单目相机标定python处理_单目相机标定python处理_36
    可以得到:
    单目相机标定python处理_人工智能_37
    单目相机标定python处理_单目相机标定python处理_38
  • 上式中:单目相机标定python处理_计算机视觉_39,单目相机标定python处理_世界坐标系_40,焦距除以单个像素大小
  • 相机标定过程中,单目相机标定python处理_世界坐标系_41不能标定得到,单目相机标定python处理_人工智能_42可以通过标定得到

(4) 完整的坐标系转换

  • 世界坐标系到像素坐标系转换单目相机标定python处理_计算机视觉_31
    • 单目相机标定python处理_计算机视觉_32,单目相机标定python处理_二维_33:是sensor顾有参数,代表每个像素的毫米数
    • 单目相机标定python处理_单目相机标定python处理_34,单目相机标定python处理_人工智能_35:代表图像坐标系原点(光心)相对像素坐标系原点的偏移量
      综上:相机坐标系到像素的转换公式:单目相机标定python处理_二维_48
  • 相机内参:相机的焦距,像素坐标的相对偏移量
    单目相机标定python处理_二维_49
  • 相机外参:世界坐标系到相机坐标系的转换关系,相机在世界坐标系的位姿矩阵
    单目相机标定python处理_单目相机标定python处理_50

镜头畸变

单目相机标定python处理_单目相机标定python处理_51

镜头畸变 超广角拍摄畸变会比较明显,越到边缘的地方畸变越明显

  • 经过透镜后的实际成像和理想成像之间的误差即为镜头畸变
  • 主要分为经向畸变和切向畸变
    径向畸变
  • 相加的透镜形状造成,沿透镜的径向分布
  • 分为桶形畸变和枕形畸变
  • 远离透镜中心的地方比靠近透镜中心的地方更加弯曲
  • 光心处的畸变为0,距离光心越远畸变越大
  • 廉价相机,畸变更严重
  • 径向畸变的数学多项式描述
  • (x,y)是没畸变的像素点,单目相机标定python处理_计算机视觉_52畸变后的位置
  • 单目相机标定python处理_计算机视觉_53:径向畸变系数,摄像头的内参,一般使用前两项,鱼眼相机会使用第三项

切向畸变

  • 相机sensor和镜头不平行导致的,相机比较好的话一般是不存在切向畸变的。因此一般研究径向畸变的影响。
  • 畸变的数学表示:
  • 两个畸变合并: