← 返回知识体系
04 成像几何 3D 视觉 RGB-D 数据工程

Camera Models & Imaging Geometry

相机模型与
成像几何

相机不是把 3D 点直接“压扁”成像素。完整链路先用外参把点送入相机坐标系,再做透视除法、畸变和内参映射;RGB-D 还要处理深度尺度、反投影与传感器之间的外参。

Projection Pipeline

从物体点到像素,必须经过四个空间

每一步都有不同的坐标单位和有效范围。把齐次投影公式拆开阅读,比只记住一个 3×4 camera matrix 更容易定位方向、尺度、畸变和可见性问题。

01 · OBJECT / WORLD

Op 或 Wp

CAD、地图或机器人坐标系中的 3D 点

m / mm
→ R, t
02 · CAMERA

Cp = [X,Y,Z]ᵀ

相机光学坐标系;可见针孔射线要求 Z > 0

m / mm
→ ÷ Z
03 · NORMALIZED

(x, y) = (X/Z, Y/Z)

焦距为 1 的归一化成像平面

dimensionless
→ D(·), K
04 · PIXEL

p = [u,v]ᵀ

图像数组中的列、行坐标

px
Full projective chain · distortion omitted
s[uv1]=K[CROCtO][XOYOZO1],s=ZCs\begin{bmatrix}u\\v\\1\end{bmatrix}=\mathbf K\begin{bmatrix}{}^{C}\mathbf R_{O}&{}^{C}\mathbf t_{O}\end{bmatrix}\begin{bmatrix}X_O\\Y_O\\Z_O\\1\end{bmatrix},\qquad s=Z_C
本站延续 ^A T_B 记号:外参 ^C T_O 将物体系坐标送到相机系。这里的 s 是齐次比例,针孔模型下等于相机坐标 ZC;加入畸变后不能再只靠一个线性 3×4 矩阵完成全部投影。

Camera Intrinsics

K 描述的是相机射线怎样落到像素网格

焦距以像素为单位时,已经包含物理焦距与像素尺寸的比例;主点是光轴与成像面的交点,不必严格位于图像几何中心。skew 在现代相机中常取 0,但公式上应知道它的位置。

Intrinsic matrix
K=[fxscx0fycy001],u=fxx+sy+cx,v=fyy+cy\mathbf K=\begin{bmatrix}f_x&s&c_x\\0&f_y&c_y\\0&0&1\end{bmatrix},\qquad u=f_xx+sy+c_x,\quad v=f_yy+c_y
fx、fy、cx、cy、s 都以像素为单位。很多视觉代码假设 skew s=0;实验室也采用这一常见简化。像素坐标通常 u 向右、v 向下。
fx, fy

焦距 / 像素尺度

值越大,视场越窄,同一归一化坐标对应更大的像素偏移。

cx, cy

主点

定义归一化坐标原点映射到哪个像素;裁剪与 padding 会改变它。

s

skew

描述像素轴不完全正交的耦合,现代数字相机通常近似为 0。

W, H

图像尺寸

K 必须和分辨率绑定保存;相同镜头在不同输出尺寸下数值不同。

Nominal field of view
FOVx=2tan⁡−1 ⁣(W2fx),FOVy=2tan⁡−1 ⁣(H2fy)\mathrm{FOV}_x=2\tan^{-1}\!\left(\frac{W}{2f_x}\right),\qquad \mathrm{FOV}_y=2\tan^{-1}\!\left(\frac{H}{2f_y}\right)
该公式默认主点居中并使用理想针孔边界。若主点明显偏移,应分别计算左右/上下半视场;有畸变的实际有效 FOV 还受裁切与模型影响。

Interactive Lab

把投影、内参更新和反投影连起来

三个实验共享一套 640×480 相机内参。先移动 3D 点并观察透视与畸变,再模拟 crop/resize 如何更新 K,最后从像素和原始深度恢复相机坐标并比较 Z-depth 与 range。

Interactive · Camera Geometry

针孔相机与 RGB-D 几何实验室

沿着相机坐标、归一化平面、畸变坐标和像素坐标逐步观察投影,并练习图像变换后的内参更新与深度反投影。
OpenCV optical frame +x 右 · +y 下 · +z 前 pixel = (u, v)
CAMERA SPACE IMAGE / PIXEL SPACE Oᵢ = (0, 0) 640 × 480 px Pᶜ = (X, Y, Z) → (x, y) = (X/Z, Y/Z) → (xd, yd) → p = (u, v)
目标射线 投影轮廓 主点 示意图按 640×480 映射,SVG 仅用于教学可视化

Coordinate chain

逐级投影结果

VISIBLE
相机坐标
归一化坐标
畸变后坐标
像素坐标

Intrinsic matrix

相机矩阵 K

3 × 3
[
]

Field of view

由焦距决定的视场

640 × 480
水平 FOV
垂直 FOV
像素纵横比

这里假设图像尺寸固定;主点偏移不会改变按传感器宽高计算的名义 FOV。

Lens Distortion

畸变作用在归一化射线上,不是对像素随便做形变

常规 OpenCV 模型先做透视除法,再在归一化平面应用径向与切向畸变,最后乘 K。去畸变是这个过程的逆问题,通常需要迭代或查表。

Radial–tangential distortion · common form
r2=x2+y2,L(r)=1+k1r2+k2r4+k3r6xd=xL(r)+2p1xy+p2(r2+2x2)yd=yL(r)+p1(r2+2y2)+2p2xy\begin{aligned}r^2&=x^2+y^2,\quad L(r)=1+k_1r^2+k_2r^4+k_3r^6\\x_d&=xL(r)+2p_1xy+p_2(r^2+2x^2)\\y_d&=yL(r)+p_1(r^2+2y^2)+2p_2xy\end{aligned}
k 系数描述径向畸变,p1/p2 描述镜头与传感器不完全平行导致的切向畸变。OpenCV 还支持 rational、thin-prism 和 tilted sensor 扩展;系数顺序必须按具体 API 核对。
模型核心投影典型参数适用场景注意事项
Pinholex=X/Z, y=Y/Zfx, fy, cx, cy, skew普通镜头、已去畸变图像、基础几何推导无法覆盖显著广角畸变
Radial–Tangential针孔 + radial/tangential distortionk1…k6, p1, p2,可含 thin-prism/tiltOpenCV 常规模型、工业相机标定参数过多时可能过拟合或互相补偿
Fisheye / Equidistant以入射角 θ 为核心,而非简单 X/Zfx, fy, cx, cy + fisheye coefficients鱼眼、超广角、环视与头戴设备不能直接套普通 pinhole/radtan 系数
Omnidirectional / Unified先映到单位球或统一成像面内参 + mirror/unified parameters猫adioptric、超大视场和全向相机投影、反投影与雅可比都依赖具体模型
模型越复杂不一定越准确。如果数据视角覆盖不足,更多畸变参数可能与焦距、主点互相补偿,得到很低的训练重投影误差却在新图像上失效。应选择“足够解释残差的最简单模型”。

Image-space Transform

图像增强也属于相机几何

resize、crop、padding、flip 和旋转都会改变像素坐标。只要增强可以写成二维仿射或射影矩阵 A,就应让像素和相机矩阵一起变换;否则 PnP、坐标图与投影监督会产生系统误差。

Update intrinsics after an image transform
p′=Ap,K′=AK,Acrop+resize=[sx0−sxx00sy−syy0001]\mathbf p'=\mathbf A\mathbf p,\qquad \mathbf K'=\mathbf A\mathbf K,\qquad \mathbf A_{\mathrm{crop+resize}}=\begin{bmatrix}s_x&0&-s_xx_0\\0&s_y&-s_yy_0\\0&0&1\end{bmatrix}
裁剪左上角为 (x0,y0),输出相对裁剪区域的缩放为 sx、sy。若网络随后将像素归一化到 [−1,1],还要继续左乘对应的像素归一化矩阵。
RESIZE

焦距和主点一起缩放

非等比缩放允许 sx≠sy,此时 fx 与 fy 分别更新。

CROP

主点减去裁剪原点

焦距不因纯裁剪改变,主点可以合法地落在新图像外。

PADDING

主点加上 padding 偏移

在左侧和顶部补边会分别增加 cx 和 cy。

FLIP / ROTATE

同时更新标签语义

镜像可能改变手性,不能只靠 K′=AK 就当成普通 3D 旋转。

Depth & RGB-D

一个深度像素,只有配上 K、尺度和相机 frame 才是 3D 点

RGB-D 数据经常看起来已经对齐,但原始 RGB 与深度通常来自不同光心、不同分辨率和不同畸变模型。反投影、外参变换与再投影的顺序必须明确。

Back-project Z-depth
Cp=ZK−1[uv1]=[(u−cx)Z/fx(v−cy)Z/fyZ]{}^{C}\mathbf p=Z\mathbf K^{-1}\begin{bmatrix}u\\v\\1\end{bmatrix}=\begin{bmatrix}(u-c_x)Z/f_x\\(v-c_y)Z/f_y\\Z\end{bmatrix}
该式假设像素与 K 匹配且已处理畸变,输入深度表示相机 z 坐标。若传感器输出的是沿射线的 range d,应使用单位射线乘 d。
Depth camera to RGB camera
Crp=CrTCd Cdp,pr=π ⁣(Kr,Dr,Crp){}^{C_r}\mathbf p={}^{C_r}\mathbf T_{C_d}\,{}^{C_d}\mathbf p,\qquad \mathbf p_r=\pi\!\left(\mathbf K_r,\mathbf D_r,{}^{C_r}\mathbf p\right)
先用深度相机 Kd 反投影,在 3D 中通过 RGB–Depth 外参变换,再用 RGB 相机 Kr 与畸变 Dr 投影。多个深度点可能落到同一 RGB 像素,需要 z-buffer 或插值策略。
Z-DEPTH

沿相机 z 轴的坐标

同一平面 z=常数的像素深度相同;离主点越远,实际光心距离越大。

RANGE

光心到点的欧氏距离

若直接代入 Z-depth 公式,边缘点会被放到错误位置。

DISPARITY

双目视差与深度近似成反比

Z = fB/d;零视差、亚像素精度和基线误差会强烈影响远处深度。

DEPTH SCALE

存储整数不是物理单位

BOP 的 raw depth 乘 depth_scale 得毫米;其他设备常见 m、mm 或设备单位。

INVALID VALUE

0、NaN 与饱和不是表面

反光、透明、黑色表面和遮挡边界容易产生空洞或 flying pixels。

ALIGNMENT

对齐会改变采样与遮挡关系

深度→RGB 和 RGB→深度并非简单 resize;必须经过 3D 外参和重投影。

深度来源几何机制常见优势典型问题
双目 / 多目视差 + 三角化被动、户外适应较好弱纹理、重复纹理、远距离误差增大
结构光投射已知图案并三角化近距离精细、弱纹理可用阳光干扰、反光/透明、工作距离受限
ToF调制光飞行时间或相位直接测距、帧率较高多径、飞点、温漂、相位歧义
单目预测学习图像到深度/逆深度无需深度硬件、覆盖稠密尺度、泛化和边界几何不确定

Camera Calibration

标定不是得到一个 K 文件,而是验证一个成像模型

相机标定联合估计内参、畸变和每幅标定图的外参。可靠结果依赖模型选择、视图覆盖、角点质量、焦距稳定性和独立验证,而不是只看一个总体 RMS。

  1. 01

    选择正确模型

    普通镜头、鱼眼与全向相机不能只靠增加更多 k 系数互相替代。模型过简单会留下系统残差,过复杂则可能不稳定。

  2. 02

    采集有信息量的视图

    标定板应覆盖中心、四角、不同距离和倾角;只在图像中心平移,无法充分约束畸变与焦距。

  3. 03

    求解内参与每帧外参

    最小化角点重投影误差,同时估计 K、畸变参数以及标定板相对相机的姿态。

  4. 04

    检查残差结构

    平均误差很小不代表模型正确。应观察每幅图、图像位置和射线方向上的残差,寻找边缘系统偏差。

  5. 05

    用独立数据验证

    用未参与标定的图像、直线、已知长度或多视角重投影验证,并记录分辨率、对焦和变焦状态。

Reprojection objective
min⁡K,D,{Ri,ti}∑i∑j∥pij−π ⁣(K,D,RiPj+ti)∥22\min_{\mathbf K,\mathbf D,\{\mathbf R_i,\mathbf t_i\}}\sum_i\sum_j\left\|\mathbf p_{ij}-\pi\!\left(\mathbf K,\mathbf D,\mathbf R_i\mathbf P_j+\mathbf t_i\right)\right\|_2^2
像素误差会受到角点检测噪声、标定板平整度和模型不匹配共同影响。重投影误差低,只说明参数能解释这些观测,不自动保证真实焦距、3D 尺度或边缘外推正确。

6D Pose Connection

相机模型如何进入位姿估计系统

PNP

内参定义 2D 射线

同一组 2D–3D 对应在不同 K 下对应不同空间射线,因此会恢复出不同的 R、t。畸变未处理也会直接进入重投影残差。

TRAINING

resize/crop 必须同步标签

网络输入经 letterbox、动态裁剪或多尺度训练后,应更新 K、2D 关键点、bbox 和坐标图所使用的像素变换。

RENDER

合成相机要匹配真实射线分布

渲染器的 FOV、主点、坐标轴和像素中心约定需要转换到训练数据定义;畸变通常在渲染后单独模拟。

REFINE

轮廓与深度精修依赖同一模型

render-and-compare、ICP 和深度残差要求 RGB、深度、CAD、K 与外参处在一致的分辨率、单位和 frame 中。

Debug Protocol

投影错了,沿坐标链逐层断点检查

先验证一个相机点能否得到预期像素,再加入外参、畸变、图像增强和深度对齐。一次把所有模块都打开,只会让多个错误互相抵消。

  1. 01

    主光轴测试

    [0,0,Z] 应投到 (cx,cy),与 Z 大小无关;失败通常是 K 排布、齐次除法或像素轴错误。

  2. 02

    单位偏移测试

    [Z/fx,0,Z] 应比主点向右约 1 px;它能直接核验 fx、列向量和 +x 方向。

  3. 03

    关闭畸变

    先令 D=0 验证针孔投影,再加入 distortion;不要同时调 K 与 D 猜原因。

  4. 04

    打印每级坐标

    同时输出 Pc、normalized、distorted 与 pixel,确认单位从 m/mm 到无量纲再到 px。

  5. 05

    核对图像变换 A

    把四个角点和主点经过 crop/resize/pad,检查 K′=AK 是否给出完全相同的新像素。

  6. 06

    深度平面测试

    用已知 z=常数的平面反投影,检查点云是否平整;弯曲常提示畸变、K 或深度定义错误。

  7. 07

    最后叠加 CAD 轮廓与坐标轴

    轴方向、轮廓偏移和尺度误差的视觉形态不同,可进一步区分外参、K 与单位问题。

约定、公式与官方来源展开查看相机模型与数据格式文档

Next geometry topic · 05

多视图几何与视觉 SLAM

有了相机射线与成像模型,下一步将通过跨帧对应建立 E / F / H 约束,恢复相机运动、三角化场景,并把局部观测组织成带回环和物体状态的 SLAM 图。
进入完整专题