相機內外參矩陣:從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=?fx?00?sfy?0?u0?v0?1??
參數含義:
- (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]=?r11?r21?r31??r12?r22?r32??r13?r23?r33??tx?ty?tz???
參數含義:
- (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 ?Xc?Yc?Zc?1??=[R0?t1?]?Xw?Yw?Zw?1??或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??=Zc?1??Xc?Yc?Zc????{x=Xc?/Zc?y=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??=K?xy1??=?fx?x+sy+u0?fy?y+v0?1??
整合公式(直接投影)
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} Zc??uv1??=K?[R∣t]?Xw?Yw?Zw?1??
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=fx?x+u0?,v=fy?y+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+k1?r2+k2?r4)+2p1?xy+p2?(r2+2x2)ycorrected?=y(1+k1?r2+k2?r4)+p1?(r2+2y2)+2p2?xy?
其中 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_wZc?p=K[R∣t]Pw?
- 畸變模型:修正非線性誤差,提升精度。