第二章 相机模型与成像原理

说实话,搞视觉定位这么多年,我见过太多人一上来就调算法、跑SLAM,结果定位精度死活上不去。最后排查下来,往往是相机模型没搞明白——内参标定不准、畸变没校正,后面的一切都是空中楼阁。

这一章,咱们就把相机成像这件事彻底说透。你想想看,相机到底是怎么把三维世界变成一张二维照片的?这里面藏着哪些坑?我踩过的那些雷,今天一并告诉你。

2.1 针孔相机模型——最朴素的成像原理

针孔相机模型,说白了就是初中物理的小孔成像。光线穿过一个小孔,在后面的感光平面上形成倒立的像。虽然现在的相机镜头复杂得多,但数学上我们依然用这个模型来近似。

这里有个关键点:我们假设相机是线性模型。什么意思?就是三维空间中的一条直线,投影到图像上还是一条直线。嗯,这个假设在理想情况下成立,但实际镜头会引入畸变,这个后面再说。

核心公式:

三维点 P(X, Y, Z) 投影到图像平面上的点 p(u, v):

u = f * X / Z + c_u
v = f * Y / Z + c_v

其中 f 是焦距,c_u、c_v 是主点偏移。

我个人习惯把相机模型理解成一个「映射函数」——输入是三维坐标,输出是像素坐标。这个映射关系,就是由内参矩阵来描述的。

2.2 内参矩阵——相机的「身份证」

内参矩阵,每个相机都不一样。它包含了五个参数:

参数 符号 含义
焦距(x方向) f_x 像素单位下的水平焦距
焦距(y方向) f_y 像素单位下的垂直焦距
主点(x方向) c_x 光轴与成像平面交点的x坐标
主点(y方向) c_y 光轴与成像平面交点的y坐标
倾斜因子 s 像素坐标系倾斜(通常为0)

写成矩阵形式就是:

K = [f_x   s   c_x]
    [0    f_y  c_y]
    [0     0    1 ]

我在项目中遇到过一件事:有一次用手机摄像头做AR,标定出来的内参矩阵里 f_x 和 f_y 差了将近10%。一开始我以为是标定出错了,后来查资料才发现——手机摄像头的像素不是正方形的!所以 f_x 和 f_y 不一样是正常的。

我的经验:拿到一个新相机,第一件事就是标定内参。别偷懒,这一步省了,后面所有算法都会出问题。

2.3 畸变模型——镜头不是完美的

现实中的镜头都有畸变。你想想看,镜头是曲面玻璃,光线穿过时会发生折射,导致图像边缘的直线变弯了。畸变主要分两种:

2.3.1 径向畸变

径向畸变是沿着半径方向的变形。离中心越远,变形越明显。常见的有两种:

  • 桶形畸变:图像向外膨胀,像桶一样。广角镜头常见。
  • 枕形畸变:图像向内收缩,像枕头一样。长焦镜头常见。

数学上用泰勒级数来建模:

x_distorted = x * (1 + k1*r^2 + k2*r^4 + k3*r^6)
y_distorted = y * (1 + k1*r^2 + k2*r^4 + k3*r^6)

其中 r 是像素到主点的距离,k1、k2、k3 是径向畸变系数。

注意:k3 通常只用于鱼眼镜头。普通镜头用 k1、k2 就够了。我曾经见过有人把 k3 也加上去,结果标定出来的畸变模型反而更差了——过拟合了。

2.3.2 切向畸变

切向畸变是因为镜头和成像平面不平行造成的。说白了,就是镜头装歪了。数学上:

x_distorted = x + [2*p1*x*y + p2*(r^2 + 2*x^2)]
y_distorted = y + [p1*(r^2 + 2*y^2) + 2*p2*x*y]

p1、p2 就是切向畸变系数。

我记得有一次做双目视觉,左右相机标定完发现基线长度总是不对。排查了两天,最后发现是切向畸变没校正——其中一个相机的镜头稍微歪了一点点,导致整个三维重建都偏了。

2.4 相机标定基础——给相机「量尺寸」

相机标定,就是求解内参和畸变系数的过程。最经典的方法是张正友标定法——用棋盘格拍几张照片,然后解方程。

基本步骤:

  1. 打印一张棋盘格标定板
  2. 从不同角度拍摄10-20张照片
  3. 检测每张照片中的角点
  4. 用最小二乘法求解内参和畸变系数
  5. 用非线性优化进一步精化结果

标定结果示例(640×480分辨率):

内参矩阵 K:
[532.12   0     312.45]
[  0     531.89  245.67]
[  0       0       1   ]

畸变系数:
k1 = -0.2834, k2 = 0.0732
p1 = 0.0012, p2 = -0.0008

这里有个坑:标定板的精度直接影响标定结果。我建议用玻璃基板的标定板,不要用打印纸贴墙上——纸会变形,角点位置就不准了。

避坑指南:

  • 标定照片要覆盖整个视场——边缘、角落都要拍到
  • 标定板不要离相机太远,占画面1/3到1/2最好
  • 每张照片的标定板角度要不同——旋转、倾斜都要有
  • 标定完一定要验证——用重投影误差判断,一般小于0.5像素就算合格

2.5 知识体系总览

这一章的内容比较多,我画了一张图帮你理清思路:

相机模型与成像原理知识体系 相机成像模型 针孔相机模型 内参矩阵 畸变模型 小孔成像原理 相似三角形关系 投影公式推导 焦距 f_x, f_y 主点 c_x, c_y 倾斜因子 s 径向畸变 k1,k2,k3 切向畸变 p1,p2 畸变校正公式 相机标定(张正友法) 棋盘格角点检测 最小二乘求解 非线性优化

这张图把整个知识体系串起来了。从针孔模型出发,到内参矩阵描述映射关系,再到畸变模型修正现实偏差,最后用相机标定把这一切参数求出来。每一步都环环相扣。

嗯,这一章的内容就到这里。记住一句话:相机模型是视觉定位的基石,基石不稳,楼盖得再高也得塌。下一章咱们开始讲坐标系变换,那又是另一片天地了。


专注资料整理