相机内外参矩阵:从3D世界坐标到2D像素坐标变换

相机内外参矩阵:从3D世界坐标到2D像素坐标变换

  • 介绍
      • [**1. 内参矩阵(Intrinsic Matrix, K)**](#1. 内参矩阵(Intrinsic Matrix, K))
      • [**2. 外参矩阵(Extrinsic Matrix, R\|t)**](#2. 外参矩阵(Extrinsic Matrix, [R|t]))
      • [**3. 完整投影过程(世界坐标 → 像素坐标)**](#3. 完整投影过程(世界坐标 → 像素坐标))
        • [**步骤1:世界坐标 → 相机坐标(外参变换)**](#步骤1:世界坐标 → 相机坐标(外参变换))
        • [**步骤2:相机坐标 → 归一化图像坐标(透视投影)**](#步骤2:相机坐标 → 归一化图像坐标(透视投影))
        • [**步骤3:归一化坐标 → 像素坐标(内参变换)**](#步骤3:归一化坐标 → 像素坐标(内参变换))
        • **整合公式(直接投影)**
      • [**4. 关键坐标变换总结**](#4. 关键坐标变换总结)
      • [**5. 畸变参数(补充)**](#5. 畸变参数(补充))
      • [**6. 示例(OpenCV 模型)**](#6. 示例(OpenCV 模型))
      • **总结**

介绍

相机参数矩阵描述了三维世界到二维图像的投影关系,分为内参矩阵 (Intrinsic Matrix)和外参矩阵(Extrinsic Matrix)。以下是详细解释和坐标变换公式:


1. 内参矩阵(Intrinsic Matrix, K)

作用 :将相机坐标系 下的3D点投影到图像像素坐标系 (2D),描述相机自身的几何和光学特性。
公式 :
K = f x s u 0 0 f y v 0 0 0 1 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 = r 11 r 12 r 13 t x r 21 r 22 r 23 t y r 31 r 32 r 33 t z \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点在世界坐标系中的齐次坐标为 P w = X w , Y w , Z w , 1 T P_w = X_w, Y_w, Z_w, 1^T Pw=Xw,Yw,Zw,1T,其投影到像素坐标 p = u , v , 1 T p = u, v, 1^T p=u,v,1T 的流程如下:

步骤1:世界坐标 → 相机坐标(外参变换)

X c Y c Z c 1 = R t 0 1 X w Y w Z w 1 或 P c = R ⋅ P w + 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:相机坐标 → 归一化图像坐标(透视投影)

x y 1 = 1 Z c X c Y c Z c ⇒ { x = X c / Z c y = Y c / Z c \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 =Zc1 XcYcZc ⇒{x=Xc/Zcy=Yc/Zc

步骤3:归一化坐标 → 像素坐标(内参变换)

u v 1 = K x y 1 = f x x + s y + u 0 f y y + v 0 1 \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 = fxx+sy+u0fyy+v01

整合公式(直接投影)

Z c u v 1 = K ⋅ R ∣ t X w Y w Z w 1 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 XwYwZw1


4. 关键坐标变换总结

坐标系 符号 转换关系
世界坐标系 (World) P w P_w Pw 参考全局坐标
相机坐标系 (Camera) P c P_c Pc P c = R P w + t P_c = R P_w + t Pc=RPw+t
归一化坐标系 (Normalized) ( x , y ) (x,y) (x,y) x = X c / Z c , y = Y c / Z c x = X_c/Z_c, y = Y_c/Z_c x=Xc/Zc,y=Yc/Zc
像素坐标系 (Pixel) ( u , v ) (u,v) (u,v) u = f x x + u 0 , v = f y y + v 0 u = f_x x + u_0, v = f_y y + v_0 u=fxx+u0,v=fyy+v0

5. 畸变参数(补充)

实际相机还需考虑镜头畸变 (径向畸变、切向畸变),使用以下模型修正归一化坐标 ( x , y ) (x, y) (x,y):
{ x corrected = x ( 1 + k 1 r 2 + k 2 r 4 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y corrected = y ( 1 + k 1 r 2 + k 2 r 4 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \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

其中 r 2 = x 2 + y 2 r^2 = x^2 + y^2 r2=x2+y2,参数 k 1 , k 2 k_1, k_2 k1,k2 为径向畸变系数, p 1 , p 2 p_1, p_2 p1,p2 为切向畸变系数。


6. 示例(OpenCV 模型)

在OpenCV中,投影过程定义为:

python 复制代码
u = f_x * (X_c / Z_c) + u_0
v = f_y * (Y_c / Z_c) + v_0

外参通过 solvePnP 求解,内参和畸变参数通过 calibrateCamera 标定。


总结

  • 内参矩阵 K K K:相机自身属性(焦距、主点、倾斜)。
  • 外参 R ∣ t R \\mid t R∣t:相机在世界中的位置和姿态。
  • 投影公式 : Z c p = K R ∣ t P w Z_c p = K R \\mid t P_w Zcp=KR∣tPw
  • 畸变模型:修正非线性误差,提升精度。
相关推荐
梦帮科技7 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
wzdark11 小时前
矩阵快速幂算法在图路径计算中的应用4
线性代数·算法·矩阵
轻口味12 小时前
HarmonyOS 7 新特性5:平行视界——轻视界文集的两栏阅读与窗口状态边界矩阵真机实测
华为·矩阵·harmonyos·鸿蒙·平行视界
警醒与鞭策13 小时前
Direct3D 12 中的内存管理
3d·游戏引擎·direct3d
LabVIEW开发14 小时前
LabVIEW 驱动 Andor 相机:从 SDK 到出图
数码相机·labview·labview知识·labview功能·labview程序
李游Leo16 小时前
《HarmonyOS 7 ArkGraphics 3D 空间设计开发实战》01:从空场景到第一个可运行的3D房间【鸿蒙心迹】
3d·华为·harmonyos
云飞云共享云桌面19 小时前
有个10人的SolidWorks设计团队,服务器什么配置合适,如何落地
运维·服务器·3d·自动化·电脑·制造
高升说19 小时前
避障相机与激光雷达的硬件融合:时基、外参、算力与布局的工程实现
人工智能·数码相机
李游Leo1 天前
《HarmonyOS 7 ArkGraphics 3D 空间设计开发实战》02:世界坐标、局部坐标与Transform空间变换【鸿蒙心迹】
3d·harmonyos
hahaha60161 天前
自动白平衡 & 手动白平衡
数码相机