[机器视觉]详解相机标定

《A Flexible New Technique for Camera Calibration》

关键词:针孔模型、齐次形式

针孔相机模型(pinhole camera model)

针孔模型:将相机简化成小孔成像,物理世界中的点“点”投影到成像表面

可将其整理成另一种等价形式:

  • 焦距):从针孔到图像平面的距离
    其实上述焦距本质上是投影距离(是几何属性),不同于透镜的焦距(是透镜的属性)。对于透镜,当且仅当配置的焦距与镜头的焦距匹配时,图像才会对焦,故人们倾向于对这两个术语互换使用。
  • 主点()(principal point):光轴与图像平面的交点
  • :成像平面上一点,物理单位,像素单位.
  • :物理世界中一点,物理单位.

公式推导

坐标系转换

像素图像坐标系 <=相机内参== 相机坐标系 <=相机外参== 世界坐标系

(1)像素图像坐标系 ↔ 物理图像坐标系

每像素的物理尺寸:

整理成齐次坐标形式:
像素单位 ← 物理单位

物理单位 ← 像素单位

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

整理成齐次坐标形式:
物理图像坐标系 ← 相机坐标系

(3)相机坐标系 ↔ 世界坐标系

相机坐标系 ← 世界坐标系

(4)像素图像坐标系 ↔ 世界坐标系

代入

左乘矩阵的逆 $inv(
\begin{bmatrix}
d_x & 0 & -u_0d_x \\
0 & d_y & -v_0d_y \\
0 & 0 & 1 \\
\end{bmatrix}
)=
\begin{bmatrix}
\frac{1}{d_x} & 0 & u_0 \\
0 & \frac{1}{d_y} & v_0 \\
0 & 0 & 1 \\
\end{bmatrix}
$:

代入
像素图像坐标系 ← 世界坐标系

整理可得:

等式右边的前2个矩阵维度由变为,对结果无影响:
$
\begin{bmatrix}
α_x & 0 & u_0 & 0 \\
0 & α_y & v_0 & 0 \\
0 & 0 & 1 & 0 \\
\end{bmatrix}
\begin{bmatrix}
r_{11} & r_{12} & r_{13} & t_1 \\
r_{21} & r_{22} & r_{23} & t_2 \\
r_{31} & r_{32} & r_{33} & t_3 \\
0 & 0 & 0 & 1 \\
\end{bmatrix}
\\
=
\begin{bmatrix}
α_x r_{11} + u_0 r_{31} & α_x r_{12} + u_0 r_{32} & α_x r_{13} + u_0 r_{33} & α_x t_1+ u_0 t_3 \\
α_y r_{21} + v_0 r_{31} & α_y r_{22} + v_0 r_{32} & α_y r_{23} + v_0 r_{33} & α_y t_2 + v_0 t_3 \\
r_{31} & r_{32} & r_{33} & t_3 \\
\end{bmatrix}
\\
=
\begin{bmatrix}
α_x & 0 & u_0 \\
0 & α_y & v_0 \\
0 & 0 & 1 \\
\end{bmatrix}
\begin{bmatrix}
r_{11} & r_{12} & r_{13} & t_1 \\
r_{21} & r_{22} & r_{23} & t_2 \\
r_{31} & r_{32} & r_{33} & t_3 \\
\end{bmatrix}
$

故微调矩阵形式:

OpenCV文档中给出的公式如下,两者一致:

OpenCV中符号 我的公式中符号
:以像素为单位的焦距(单位:像素)
:透镜的物理焦距长度(单位:毫米)
:成像装置每个单元尺寸(单位:像素/毫米)

:每一个像素在x轴上的物理尺寸(单位:毫米/像素)
:比例因子 :物体在相机坐标系中的z坐标

OpenCV中的相关部分

针孔相机模型

针孔相机模型:通过透视变换将3D点投影到图像平面中来形成场景视图

  • 世界坐标系的3D点
  • :以像素为单位的投影点坐标(图像坐标系
  • 相机内参
  • 相机外参
  • 主点(通常在图像中心)
  • :以像素为单位的焦距

上式等价于下式():

考虑畸变

  • 径向畸变(radial distortion):
  • 切向畸变(tangential distortion):
  • 薄透镜畸变(thin prism distortion):

两种径向畸变:

  • 桶型畸变(barrel distortion,
  • 枕型畸变(pincushion distortion,

OpenCV还可以考虑图像传感器的倾斜,对于粒子图像测速( particle image velocimetry,PIV)或使用激光扇的三角测量(triangulation with a laser fan)非常有用。
参数:

所有的畸变系数(6+2+4+2=14个):

相机标定函数

1
2
retval, cameraMatrix, distCoeffs, rvecs, tvecs = 
cv2.calibrateCamera( objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs[, rvecs[, tvecs[, flags[, criteria]]]] )

标定的过程:

  • 内参:$cameraMatrix=
    \begin{bmatrix}
    f_x & 0 & c_x \\
    0 & f_y & c_y \\
    0 & 0 & 1 \\
    \end{bmatrix}$
    • 相机的几何模型:相机的自然单位(像素)↔物理世界的单位(米)
    • 透镜的畸变模型
  • 外参:$rvecs, tvecs$

齐次坐标:便于在矩阵中表示平移

论文简述

总体步骤

  1. 估算单应性矩阵H
  2. 计算相机内参
  3. 计算径向畸变k1,k2,和相机外参
  4. 最大似然估计

基础方程

实现功能

阅读源码

OpenCV

《学习OpenCV 3(中文版)》
相机模型——针孔相机
内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
关于齐次坐标的理解(经典)
齐次坐标的理解
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”
齐次坐标的理解