焦距 / 像素尺度
值越大,视场越窄,同一归一化坐标对应更大的像素偏移。
Projection Pipeline
每一步都有不同的坐标单位和有效范围。把齐次投影公式拆开阅读,比只记住一个 3×4 camera matrix 更容易定位方向、尺度、畸变和可见性问题。
CAD、地图或机器人坐标系中的 3D 点
m / mm相机光学坐标系;可见针孔射线要求 Z > 0
m / mm焦距为 1 的归一化成像平面
dimensionless图像数组中的列、行坐标
pxCamera Intrinsics
焦距以像素为单位时,已经包含物理焦距与像素尺寸的比例;主点是光轴与成像面的交点,不必严格位于图像几何中心。skew 在现代相机中常取 0,但公式上应知道它的位置。
值越大,视场越窄,同一归一化坐标对应更大的像素偏移。
定义归一化坐标原点映射到哪个像素;裁剪与 padding 会改变它。
描述像素轴不完全正交的耦合,现代数字相机通常近似为 0。
K 必须和分辨率绑定保存;相同镜头在不同输出尺寸下数值不同。
Interactive Lab
三个实验共享一套 640×480 相机内参。先移动 3D 点并观察透视与畸变,再模拟 crop/resize 如何更新 K,最后从像素和原始深度恢复相机坐标并比较 Z-depth 与 range。
Interactive · Camera Geometry
Coordinate chain
Intrinsic matrix
Field of view
这里假设图像尺寸固定;主点偏移不会改变按传感器宽高计算的名义 FOV。
Scale
Updated focal length
Updated principal point
Affine image transform
K′ = A K若图像还发生 padding、flip 或任意仿射变换,应把完整像素变换 A 左乘到 K,而不是只改焦距。Deprojected point
Unit viewing ray
Z-depth vs. range
Lens Distortion
常规 OpenCV 模型先做透视除法,再在归一化平面应用径向与切向畸变,最后乘 K。去畸变是这个过程的逆问题,通常需要迭代或查表。
| 模型 | 核心投影 | 典型参数 | 适用场景 | 注意事项 |
|---|---|---|---|---|
| Pinhole | x=X/Z, y=Y/Z | fx, fy, cx, cy, skew | 普通镜头、已去畸变图像、基础几何推导 | 无法覆盖显著广角畸变 |
| Radial–Tangential | 针孔 + radial/tangential distortion | k1…k6, p1, p2,可含 thin-prism/tilt | OpenCV 常规模型、工业相机标定 | 参数过多时可能过拟合或互相补偿 |
| Fisheye / Equidistant | 以入射角 θ 为核心,而非简单 X/Z | fx, fy, cx, cy + fisheye coefficients | 鱼眼、超广角、环视与头戴设备 | 不能直接套普通 pinhole/radtan 系数 |
| Omnidirectional / Unified | 先映到单位球或统一成像面 | 内参 + mirror/unified parameters | 猫adioptric、超大视场和全向相机 | 投影、反投影与雅可比都依赖具体模型 |
Image-space Transform
resize、crop、padding、flip 和旋转都会改变像素坐标。只要增强可以写成二维仿射或射影矩阵 A,就应让像素和相机矩阵一起变换;否则 PnP、坐标图与投影监督会产生系统误差。
非等比缩放允许 sx≠sy,此时 fx 与 fy 分别更新。
焦距不因纯裁剪改变,主点可以合法地落在新图像外。
在左侧和顶部补边会分别增加 cx 和 cy。
镜像可能改变手性,不能只靠 K′=AK 就当成普通 3D 旋转。
Depth & RGB-D
RGB-D 数据经常看起来已经对齐,但原始 RGB 与深度通常来自不同光心、不同分辨率和不同畸变模型。反投影、外参变换与再投影的顺序必须明确。
同一平面 z=常数的像素深度相同;离主点越远,实际光心距离越大。
若直接代入 Z-depth 公式,边缘点会被放到错误位置。
Z = fB/d;零视差、亚像素精度和基线误差会强烈影响远处深度。
BOP 的 raw depth 乘 depth_scale 得毫米;其他设备常见 m、mm 或设备单位。
反光、透明、黑色表面和遮挡边界容易产生空洞或 flying pixels。
深度→RGB 和 RGB→深度并非简单 resize;必须经过 3D 外参和重投影。
| 深度来源 | 几何机制 | 常见优势 | 典型问题 |
|---|---|---|---|
| 双目 / 多目 | 视差 + 三角化 | 被动、户外适应较好 | 弱纹理、重复纹理、远距离误差增大 |
| 结构光 | 投射已知图案并三角化 | 近距离精细、弱纹理可用 | 阳光干扰、反光/透明、工作距离受限 |
| ToF | 调制光飞行时间或相位 | 直接测距、帧率较高 | 多径、飞点、温漂、相位歧义 |
| 单目预测 | 学习图像到深度/逆深度 | 无需深度硬件、覆盖稠密 | 尺度、泛化和边界几何不确定 |
Camera Calibration
相机标定联合估计内参、畸变和每幅标定图的外参。可靠结果依赖模型选择、视图覆盖、角点质量、焦距稳定性和独立验证,而不是只看一个总体 RMS。
普通镜头、鱼眼与全向相机不能只靠增加更多 k 系数互相替代。模型过简单会留下系统残差,过复杂则可能不稳定。
标定板应覆盖中心、四角、不同距离和倾角;只在图像中心平移,无法充分约束畸变与焦距。
最小化角点重投影误差,同时估计 K、畸变参数以及标定板相对相机的姿态。
平均误差很小不代表模型正确。应观察每幅图、图像位置和射线方向上的残差,寻找边缘系统偏差。
用未参与标定的图像、直线、已知长度或多视角重投影验证,并记录分辨率、对焦和变焦状态。
6D Pose Connection
同一组 2D–3D 对应在不同 K 下对应不同空间射线,因此会恢复出不同的 R、t。畸变未处理也会直接进入重投影残差。
网络输入经 letterbox、动态裁剪或多尺度训练后,应更新 K、2D 关键点、bbox 和坐标图所使用的像素变换。
渲染器的 FOV、主点、坐标轴和像素中心约定需要转换到训练数据定义;畸变通常在渲染后单独模拟。
render-and-compare、ICP 和深度残差要求 RGB、深度、CAD、K 与外参处在一致的分辨率、单位和 frame 中。
Debug Protocol
先验证一个相机点能否得到预期像素,再加入外参、畸变、图像增强和深度对齐。一次把所有模块都打开,只会让多个错误互相抵消。
[0,0,Z] 应投到 (cx,cy),与 Z 大小无关;失败通常是 K 排布、齐次除法或像素轴错误。
[Z/fx,0,Z] 应比主点向右约 1 px;它能直接核验 fx、列向量和 +x 方向。
先令 D=0 验证针孔投影,再加入 distortion;不要同时调 K 与 D 猜原因。
同时输出 Pc、normalized、distorted 与 pixel,确认单位从 m/mm 到无量纲再到 px。
把四个角点和主点经过 crop/resize/pad,检查 K′=AK 是否给出完全相同的新像素。
用已知 z=常数的平面反投影,检查点云是否平整;弯曲常提示畸变、K 或深度定义错误。
轴方向、轮廓偏移和尺度误差的视觉形态不同,可进一步区分外参、K 与单位问题。
Next geometry topic · 05