https://blog.csdn.net/MengYa_Dream/article/details/120233806
1. 相机标定的定义
相机标定是确定相机成像过程中各个参数的过程,它的核心目标是建立从三维世界坐标系到二维图像坐标系的数学映射关系。这一过程包括求解:
- 内参:描述相机内部光学特性(如焦距、主点位置、像素尺寸、畸变系数等)的参数。
- 外参:描述相机在世界坐标系中的位置和姿态(即旋转和平移)的参数。
通过相机标定,我们可以校正镜头畸变、实现图像矫正、并支持诸如三维重建、机器人导航等应用。
2. 相机成像原理和坐标系
2.1. 成像原理概述
在针孔相机模型中,三维世界中的一点经过一系列变换后在二维图像平面上成像。整个过程分为两个主要步骤:
- 外参变换:将世界坐标系下的点转换到相机坐标系
- 内参投影:将相机坐标系中的点通过透视投影映射到成像平面,再转换到像素坐标系
透视投影原理
透视投影是一种模拟人眼视觉效果的投影方式,它能够将三维空间中的物体投影到二维平面上,同时保留深度信息带来的大小变化和遮挡关系。透视投影的基本原理是基于相似三角形原理,即远处的物体看起来比近处同样大小的物体小。
视点(Eye Point)或摄像机位置:这是观察者的位置或者说是相机所在的位置。
投影平面(Projection Plane):也称作图像平面,是接收投影的二维平面。在计算机图形学中,这个平面通常位于摄像机前方某个固定距离处。
视线方向(Line of Sight):从视点出发,穿过物体直到投影平面的直线。所有这些线共同构成了所谓的“视角”。
假设有一个三维坐标系中的点 P ( x , y , z ) P(x, y, z) P(x,y,z),我们希望将其投影到一个位于 z = d z = d z=d( d > 0 d > 0 d>0)处的投影平面上。那么该点在投影平面上的投影坐标 P ′ ( x ′ , y ′ ) P'(x', y') P′(x′,y′) 可以通过以下公式计算:
x ′ = d z ⋅ x x' = \frac{d}{z} \cdot x x′=zd⋅x
y ′ = d z ⋅ y y' = \frac{d}{z} \cdot y y′=zd⋅y
这里, d d d 是投影平面到视点的距离,而 z z z 则是点 P P P 到视点的距离。这组公式说明了距离视点越远的物体,在投影平面上的影像会越小,这符合我们日常生活中的视觉经验。
2.2. 坐标系介绍与转换
1. 坐标系定义
世界坐标系 ( X w , Y w , Z w ) (X_w, Y_w, Z_w) (Xw,Yw,Zw)
用户定义的参考坐标系,用于描述三维场景中物体的位置。相机坐标系 ( X c , Y c , Z c ) (X_c, Y_c, Z_c) (Xc,Yc,Zc)
以相机光心为原点,通常令 Z c Z_c Zc 轴与相机光轴重合,描述物体相对于相机的位置。图像坐标系 ( x , y ) (x, y) (x,y)
在成像过程中,由相机光学中心投影到成像平面上的连续坐标(通常以毫米为单位),反映物理成像平面的位置。像素坐标系 ( u , v ) (u, v) (u,v)
数字图像中的离散坐标,以像素为单位。图像坐标系经过缩放和平移后(考虑传感器像素尺寸和主点位置),转换为像素坐标系。
2. 转换步骤与公式
世界坐标系 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw) ——通过外参 [ R t ] [R \quad t] [Rt] ——> 相机坐标系 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc)——透视投影——> 图像坐标系 ( x , y ) (x,y) (x,y)——内参变换——> 像素坐标系 ( u , v ) (u,v) (u,v)
A. 世界坐标系到相机坐标系(外参变换)
由旋转矩阵 R R R 和平移向量 t t t 构成刚体变换,将世界坐标点转换为相机坐标点:
[ X c Y c Z c ] = R [ X w Y w Z w ] + t \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} = R \begin{bmatrix} X_w \\ Y_w \\ Z_w \end{bmatrix} + t
XcYcZc
=R
XwYwZw
+t
这里 R R R 是 3 × 3 3\times3 3×3 旋转矩阵, t t t 是 3 × 1 3\times1 3×1 平移向量.
B. 相机坐标系到图像坐标系(透视投影)
利用针孔相机的透视投影原理,将相机坐标系中的点投影到成像平面(理想图像坐标系):
x = X c Z c , y = Y c Z c x = \frac{X_c}{Z_c},\quad y = \frac{Y_c}{Z_c} x=ZcX