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 内参的物理意义
说白了,内参矩阵就是回答三个问题:
- 相机“看”得有多远?——fx, fy决定
- 图像中心在哪?——cx, cy决定
- 像素是方的还是扁的?——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)依赖内参矩阵和相机外参
- 多相机拼接:每个相机的内参必须单独标定,拼接时才能对齐
我个人习惯,在项目初期就把内参矩阵固化到配置文件中。每次启动时加载,而不是每次重新标定。因为车载摄像头的内参相对稳定,除非镜头松动或者更换了传感器。
一句话总结:内参矩阵是相机从三维到二维的“翻译官”。搞懂了它,你才算真正入门了车载视觉标定。
下一章咱们聊聊畸变参数。那个东西更坑,但也是车载摄像头绕不过去的坎。