相机内外参矩阵:从3D世界坐标到2D像素坐标变换
- 介绍
- **1. 内参矩阵(Intrinsic Matrix, K)**
- **2. 外参矩阵(Extrinsic Matrix, [R|t])**
- **3. 完整投影过程(世界坐标 → 像素坐标)**
- **步骤1:世界坐标 → 相机坐标(外参变换)**
- **步骤2:相机坐标 → 归一化图像坐标(透视投影)**
- **步骤3:归一化坐标 → 像素坐标(内参变换)**
- **整合公式(直接投影)**
- **4. 关键坐标变换总结**
- **5. 畸变参数(补充)**
- **6. 示例(OpenCV 模型)**
- **总结**
介绍
相机参数矩阵描述了三维世界到二维图像的投影关系,分为内参矩阵(Intrinsic Matrix)和外参矩阵(Extrinsic Matrix)。以下是详细解释和坐标变换公式:
1. 内参矩阵(Intrinsic Matrix, K)
作用:将相机坐标系下的3D点投影到图像像素坐标系(2D),描述相机自身的几何和光学特性。
公式:
K=[fxsu00fyv0001]K = \begin{bmatrix} f_x & s & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix} K=fx00sfy0u0v01
参数含义:
- (f_x, f_y):焦距(单位为像素),分别表示x和y方向的缩放因子(受传感器尺寸和镜头焦距影响)。
- (u_0, v_0):主点坐标(Principal Point),即光轴与图像平面的交点(通常接近图像中心)。
- (s):轴倾斜参数(Skew),描述图像坐标轴的倾斜程度(现代相机通常为0)。
2. 外参矩阵(Extrinsic Matrix, [R|t])
作用:将世界坐标系下的3D点变换到相机坐标系,描述相机在空间中的位置和姿态(旋转+平移)。
公式:
外参=[R∣t]=[r11r12r13txr21r22r23tyr31r32r33tz]\text{外参} = [R \mid t] = \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\ r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z \end{bmatrix} 外参=[R∣t]=r11r21r31r12r22r32r13r23r33txtytz
参数含义:
- (R):3×3旋转矩阵(正交矩阵),表示相机相对于世界坐标系的朝向。
- (t):3×1平移向量,表示相机光心在世界坐标系中的位置。
3. 完整投影过程(世界坐标 → 像素坐标)
设一个3D点在世界坐标系中的齐次坐标为 Pw=[Xw,Yw,Zw,1]TP_w = [X_w, Y_w, Z_w, 1]^TPw=[Xw,Yw,Zw,1]T,其投影到像素坐标 p=[u,v,1]Tp = [u, v, 1]^Tp=[u,v,1]T 的流程如下:
步骤1:世界坐标 → 相机坐标(外参变换)
[XcYcZc1]=[Rt01][XwYwZw1]或Pc=R⋅Pw+t\begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} = \begin{bmatrix} R & t \\ 0 & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \quad \text{或} \quad P_c = R \cdot P_w + t XcYcZc1=[R0t1]XwYwZw1或Pc=R⋅Pw+t
步骤2:相机坐标 → 归一化图像坐标(透视投影)
[xy1]=1Zc[XcYcZc]⇒{x=Xc/Zcy=Yc/Zc\begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \frac{1}{Z_c} \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix} \quad \Rightarrow \quad \begin{cases} x = X_c / Z_c \\ y = Y_c / Z_c \end{cases} xy1=Zc1XcYcZc⇒{x=Xc/Zcy=Yc/Zc
步骤3:归一化坐标 → 像素坐标(内参变换)
[uv1]=K[xy1]=[fxx+sy+u0fyy+v01]\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} f_x x + s y + u_0 \\ f_y y + v_0 \\ 1 \end{bmatrix} uv1=Kxy1=fxx+sy+u0fyy+v01
整合公式(直接投影)
Zc[uv1]=K⋅[R∣t][XwYwZw1]Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \cdot [R \mid t] \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} Zcuv1=K⋅[R∣t]XwYwZw1
4. 关键坐标变换总结
坐标系 | 符号 | 转换关系 |
---|---|---|
世界坐标系 (World) | PwP_wPw | 参考全局坐标 |
相机坐标系 (Camera) | PcP_cPc | Pc=RPw+tP_c = R P_w + tPc=RPw+t |
归一化坐标系 (Normalized) | (x,y)(x,y)(x,y) | x=Xc/Zc,y=Yc/Zcx = X_c/Z_c, y = Y_c/Z_cx=Xc/Zc,y=Yc/Zc |
像素坐标系 (Pixel) | (u,v)(u,v)(u,v) | u=fxx+u0,v=fyy+v0u = f_x x + u_0, v = f_y y + v_0u=fxx+u0,v=fyy+v0 |
5. 畸变参数(补充)
实际相机还需考虑镜头畸变(径向畸变、切向畸变),使用以下模型修正归一化坐标 (x,y)(x, y)(x,y):
{xcorrected=x(1+k1r2+k2r4)+2p1xy+p2(r2+2x2)ycorrected=y(1+k1r2+k2r4)+p1(r2+2y2)+2p2xy\begin{cases} x_{\text{corrected}} = x (1 + k_1 r^2 + k_2 r^4) + 2 p_1 x y + p_2 (r^2 + 2x^2) \\ y_{\text{corrected}} = y (1 + k_1 r^2 + k_2 r^4) + p_1 (r^2 + 2y^2) + 2 p_2 x y \end{cases} {xcorrected=x(1+k1r2+k2r4)+2p1xy+p2(r2+2x2)ycorrected=y(1+k1r2+k2r4)+p1(r2+2y2)+2p2xy
其中 r2=x2+y2r^2 = x^2 + y^2r2=x2+y2,参数 k1,k2k_1, k_2k1,k2 为径向畸变系数,p1,p2p_1, p_2p1,p2 为切向畸变系数。
6. 示例(OpenCV 模型)
在OpenCV中,投影过程定义为:
u = f_x * (X_c / Z_c) + u_0
v = f_y * (Y_c / Z_c) + v_0
外参通过 solvePnP
求解,内参和畸变参数通过 calibrateCamera
标定。
总结
- 内参矩阵 KKK:相机自身属性(焦距、主点、倾斜)。
- 外参 [R∣t][R \mid t][R∣t]:相机在世界中的位置和姿态。
- 投影公式:Zcp=K[R∣t]PwZ_c p = K [R \mid t] P_wZcp=K[R∣t]Pw
- 畸变模型:修正非线性误差,提升精度。