4、相机内参模型:针孔相机模型、畸变模型、内参矩阵K

聊到多传感器融合,相机内参是绕不开的基础。说白了,相机就是把三维世界投影到二维图像上。这个投影过程怎么描述?就是靠内参模型。我这些年做融合项目,踩过最多的坑,反而是这些最基础的东西没搞透。

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

针孔相机模型,你想想看,就是一个小孔成像。光线穿过小孔,在后面的感光平面上形成倒像。嗯,这里要注意,我们通常把成像平面放到小孔前面来简化计算,这样图像就是正的了。

数学上怎么描述?一个三维点 P(X, Y, Z) 投影到图像上的点 p(u, v):

u = f * X / Z + cx
v = f * Y / Z + cy

这里 f 是焦距,cx、cy 是光心在像素坐标系中的偏移。我在项目中遇到过,有人直接把 cx、cy 设为图像宽高的一半,结果标定出来的外参怎么都对不上。后来发现,实际的光心偏移往往有几十个像素的偏差。

核心要点:针孔模型是线性的,但真实相机都有畸变。千万别直接用针孔模型去处理原始图像。

4.2 畸变模型——现实总是不完美的

为什么会有畸变?因为镜头不是理想的小孔。我刚开始做感知时,拿着标定板拍了一组图,投影误差死活降不下去。后来才发现,我忘了加畸变模型。

4.2.1 径向畸变

径向畸变,说白了就是光线经过透镜时,边缘弯曲得比中心厉害。分为两种:

  • 桶形畸变:图像边缘向外凸出,像木桶。广角镜头常见。
  • 枕形畸变:图像边缘向内凹陷。长焦镜头常见。

数学上,我们用多项式来修正:

x_corrected = x * (1 + k1 * r² + k2 * r⁴ + k3 * r⁶)
y_corrected = y * (1 + k1 * r² + k2 * r⁴ + k3 * r⁶)

其中 r 是像素点到光心的距离。k1、k2、k3 是径向畸变系数。一般用 k1、k2 就够了,k3 是给大畸变镜头准备的。

我的经验:标定时如果只给 k1、k2,结果往往还行。但如果你用鱼眼镜头,必须加上 k3,不然边缘的误差会让你怀疑人生。

4.2.2 切向畸变

切向畸变,是因为镜头和成像平面不平行。说白了,就是镜头装歪了。这个在量产车上比较常见,因为装配公差。

x_corrected = x + (2 * p1 * x * y + p2 * (r² + 2 * x²))
y_corrected = y + (p1 * (r² + 2 * y²) + 2 * p2 * x * y)

p1、p2 是切向畸变系数。我建议,只要做量产项目,一定要标定 p1、p2。我曾经遇到过一台车,切向畸变导致车道线投影偏差了 3 个像素,融合出来的目标位置直接偏了半米。

避坑指南:我曾经在标定时只用了径向畸变,结果融合后的点云投影到图像上,边缘区域总是对不上。后来加上切向畸变,问题就解决了。别省这一步。

4.3 内参矩阵 K——把一切串起来

内参矩阵 K,就是把上面所有参数打包成一个 3x3 的矩阵:

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

fx、fy 是 x、y 方向的焦距。理论上它们应该相等,但实际因为传感器制造误差,往往差一点点。cx、cy 是光心偏移。

完整的投影过程,其实就是三步:

  1. 世界坐标转相机坐标(外参干的)
  2. 相机坐标归一化,加上畸变
  3. 用内参矩阵 K 投影到像素坐标

我习惯把内参标定放在融合项目的第一步。为什么?因为内参不准,后面所有对齐都是白搭。你想想看,雷达点云投影到图像上,如果内参偏了 5 个像素,那融合出来的目标位置误差会放大到几十厘米。

重要提醒:内参矩阵 K 是相机自身的属性,不随外参变化。换一个镜头,或者变焦,都要重新标定。

4.4 知识体系总览

下面这张图,是我自己总结的相机内参模型的知识结构。每次带新人,我都会先让他们看这张图,搞清楚各个模块之间的关系。

相机内参模型知识体系 针孔相机模型 线性投影:u = f*X/Z + cx 畸变模型 非线性修正 内参矩阵 K 3x3 矩阵封装 + → 径向畸变 桶形 / 枕形 k1, k2, k3 系数 切向畸变 镜头与传感器不平行 p1, p2 系数 K 矩阵元素 fx, fy, cx, cy 焦距 + 光心偏移 完整投影流程 世界坐标 → 相机坐标(外参) → 归一化平面 → 畸变修正 → 内参矩阵K → 像素坐标 标定顺序:先内参(含畸变),后外参。内参不准,一切白搭。

这张图把整个流程串起来了。从针孔模型开始,加上畸变修正,最后用内参矩阵 K 完成投影。我每次做融合项目,都会把这张图打印出来贴在工位上。

个人习惯:我建议你在做多传感器融合之前,先用 OpenCV 的 calibrateCamera 把内参标定好。标定板拍 20-30 张图,重投影误差控制在 0.1 像素以内,再往下走。

嗯,相机内参模型就聊到这里。记住一句话:内参是相机自己的身份证,畸变是现实世界的修正项,K 矩阵是投影的数学工具。搞懂了这些,后面的融合工作才能站得住脚。

可可精品资料库