4. 相机内参矩阵:定义、推导与物理意义

说到相机内参矩阵,我脑子里第一个蹦出来的画面,就是当年在实验室调第一台车载摄像头时的场景。那时候刚入行,觉得标定就是拍几张棋盘格,跑个算法就完事了。结果装车一跑,车道线全歪了。后来才发现,我对内参矩阵的理解,说白了就是“知其然不知其所以然”。

今天咱们就把这块硬骨头啃下来。你想想看,相机为什么能把三维世界“压缩”成一张二维图片?这个压缩过程,内参矩阵就是那个“压缩算法”的核心。

4.1 内参矩阵的定义

先给个直观的定义:内参矩阵,就是描述相机内部光学和几何特性的一个3x3矩阵。它负责把相机坐标系下的三维点,映射到图像平面上的像素坐标。

数学上长这样:

K = [fx  0  cx]
    [ 0  fy  cy]
    [ 0   0   1]

这里面:

  • fx, fy:分别是x和y方向的焦距(单位是像素)
  • cx, cy:主点偏移,也就是光轴与图像平面的交点坐标

嗯,这里要注意:fx和fy的单位是像素,不是毫米。我见过不少新手在这栽跟头,拿着镜头参数上的焦距(比如4mm)直接往里套,结果算出来的投影坐标全不对。

核心理解:内参矩阵K,本质上是一个“缩放+平移”的变换。它把相机坐标系下的点,先缩放到图像坐标系,再平移到像素坐标系。

4.2 内参矩阵的推导

咱们一步步来。假设相机坐标系下有一个点 P = (X, Y, Z)。它投影到图像平面上的物理坐标是 (x, y)。根据小孔成像模型:

x = f * X / Z
y = f * Y / Z

这里f是物理焦距(单位是毫米)。但图像传感器是用像素来衡量的,所以得把毫米转成像素。怎么转?靠像素尺寸:

u = x / dx + cx
v = y / dy + cy

其中dx, dy是每个像素的物理尺寸(毫米/像素)。把上面两个式子合起来:

u = f * X / (Z * dx) + cx
v = f * Y / (Z * dy) + cy

令 fx = f / dx,fy = f / dy,就得到了:

u = fx * X / Z + cx
v = fy * Y / Z + cy

写成矩阵形式就是:

[u]   [fx  0  cx] [X]
[v] = [ 0  fy  cy] [Y]
[1]   [ 0   0   1] [Z]

注意这里最后要除以Z(归一化),才能得到真正的像素坐标。所以完整的投影公式是:

s * [u, v, 1]^T = K * [X, Y, Z]^T

s就是Z值,也叫尺度因子。

我的经验:在实际项目中,我习惯把内参矩阵和畸变参数一起保存。因为车载摄像头通常带有明显的径向畸变,如果只标定内参不标定畸变,车道线检测的精度会大打折扣。

4.3 焦距与主点偏移

焦距(fx, fy)

  • fx和fy通常很接近,但不完全相等。为什么?因为传感器像素不一定是完美的正方形。
  • fx越大,说明相机“看得越远”,但视场角越小。车载摄像头一般用广角,fx相对较小。
  • 我遇到过一台相机,fx和fy差了5%以上。查了半天,发现是传感器贴歪了。嗯,制造公差有时候就是这么坑。

主点偏移(cx, cy)

  • 理想情况下,主点应该在图像正中心,也就是 (width/2, height/2)。
  • 但实际上,由于镜头安装误差,主点会偏移。偏移量通常在几个到几十个像素之间。
  • 我曾经标定过一台相机,cx偏移了30多个像素。如果不校正这个偏移,车辆前方的目标测距会偏差好几米。
参数 理想值 实际范围(车载摄像头) 影响
fx 取决于镜头和传感器 500 ~ 2000 像素 视场角、测距精度
fy ≈ fx 500 ~ 2000 像素 图像纵横比校正
cx width/2 ±20 像素 目标定位偏移
cy height/2 ±20 像素 地平线位置偏移

4.4 内参的物理意义

说白了,内参矩阵就是回答三个问题:

  1. 相机“看”得有多远?——fx, fy决定
  2. 图像中心在哪?——cx, cy决定
  3. 像素是方的还是扁的?——fx/fy的比值决定

举个例子。假设你有一个720p的摄像头,标定得到:

K = [800  0  360]
    [  0  800 240]
    [  0    0   1]

这意味着:

  • 焦距是800像素。如果传感器像素大小是3um,那物理焦距就是 800 * 0.003 = 2.4mm
  • 主点在 (360, 240),正好是图像中心(720/2=360, 480/2=240)
  • fx = fy,说明像素是正方形的

避坑指南:我曾经在项目里直接用OpenCV的标定结果,没检查内参矩阵的合理性。结果发现fx只有200多,明显不对。后来一查,是标定板图片分辨率搞错了。所以拿到内参后,第一件事就是看看fx、fy是否在合理范围内。

4.5 内参矩阵在车载视觉中的应用

内参矩阵不是标定完就扔一边的。它在车载视觉里天天用:

  • 车道线检测:需要把图像坐标反投影到世界坐标系,内参矩阵是反投影的“钥匙”
  • 障碍物测距:单目测距必须知道内参,否则距离全是错的
  • 鸟瞰图生成:逆透视变换(IPM)依赖内参矩阵和相机外参
  • 多相机拼接:每个相机的内参必须单独标定,拼接时才能对齐

我个人习惯,在项目初期就把内参矩阵固化到配置文件中。每次启动时加载,而不是每次重新标定。因为车载摄像头的内参相对稳定,除非镜头松动或者更换了传感器。

一句话总结:内参矩阵是相机从三维到二维的“翻译官”。搞懂了它,你才算真正入门了车载视觉标定。

下一章咱们聊聊畸变参数。那个东西更坑,但也是车载摄像头绕不过去的坎。