第二章 光学成像基础:透镜成像原理、焦距与视场角(FOV)、光圈与景深、像差(球差、色差、畸变)

各位同学,欢迎来到第二章。这一章我们聊聊光学成像的底层逻辑。说实话,很多做视觉算法的同事,对这部分内容不太上心,觉得「反正图像传感器会帮我搞定」。但我个人的经验是——不懂光学,你永远调不好算法。尤其是车载场景,光线变化剧烈,镜头质量参差不齐,你写的算法在实验室跑得飞起,一上车就崩,多半是没吃透这些基础。

2.1 透镜成像原理

先问个问题:为什么镜头能把远处的景物「拉」到传感器上?

核心就是凸透镜的折射。光线穿过透镜时,会发生偏折。平行于光轴的光线,会汇聚到一点,那就是焦点。焦点到透镜中心的距离,就是焦距

成像公式很简单:

1/f = 1/u + 1/v

其中 f 是焦距,u 是物距,v 是像距。车载摄像头通常拍的是远处物体(u 很大),所以 1/u 趋近于 0,像距 v 就约等于焦距 f。也就是说,远处的景物,直接成像在焦平面上

重要结论:车载摄像头一般对焦到无穷远。这意味着,从几米到几百米外的物体,理论上都能清晰成像。但实际中,镜头工艺和传感器像素尺寸会限制这个「清晰范围」。

我记得刚入行时,有个项目用了一款廉价镜头,标称焦距 6mm。结果实车测试,50米外的车牌模糊得没法看。后来一测,实际焦距偏差了 0.3mm。嗯,这就是为什么我后来选镜头,一定要求供应商提供实测焦距报告

2.2 焦距与视场角(FOV)

焦距和视场角,是一对冤家。焦距越长,视场角越小,看得越远;焦距越短,视场角越大,看得越宽。

计算公式:

FOV = 2 * arctan( sensor_size / (2 * f) )

举个例子,车载常用的 1/3 英寸传感器(对角线约 6mm),配 6mm 镜头:

FOV ≈ 2 * arctan( 6 / (2 * 6) ) = 2 * arctan(0.5) ≈ 53°

这个视场角,大概相当于人眼单眼的视野范围。所以很多前视摄像头用这个配置。

应用场景 典型焦距 典型FOV 特点
前视主摄像头 6mm - 8mm 40° - 60° 看得远,畸变小
环视/鱼眼 2mm - 3mm 120° - 190° 看得宽,畸变大
侧视/后视 4mm - 6mm 60° - 90° 兼顾距离和宽度

我的经验:选焦距时,别只看 FOV 数字。要结合像素密度来算。比如 200 万像素传感器,配 6mm 镜头,在 100 米处一个车牌大概占 30 个像素。这个分辨率够不够做识别?你自己算算。

2.3 光圈与景深

光圈,就是镜头里那个可以开合的「瞳孔」。用 F 值表示,比如 F1.4、F2.0。F 值越小,光圈越大,进光量越多。

景深呢?说白了就是清晰的前后范围。光圈越大,景深越浅;光圈越小,景深越深。

车载摄像头有个特殊要求:大景深。因为车前面的物体,从几米到几百米,都得看清楚。所以车载镜头的光圈通常不大,F2.0 到 F2.8 比较常见。

注意:光圈不是越小越好。光圈太小(比如 F8.0),进光量不足,夜间图像噪点会爆炸。我曾经在一个夜视项目中,为了追求景深把光圈收到 F5.6,结果晚上图像全是雪花点。后来改回 F2.0,配合 ISP 的降噪,效果好了很多。

景深还和物距有关。物体越近,景深越浅。所以车载摄像头对近处物体的清晰度要求很高——你想想看,如果 3 米外有个行人,结果因为景深不够拍模糊了,那算法再强也救不回来。

2.4 像差(球差、色差、畸变)

理想透镜只存在于课本里。现实中的镜头,都有各种像差。我把它分成三类:

2.4.1 球差

球差,就是透镜边缘和中心对光线的折射能力不一样。边缘光线聚焦得近一些,中心光线聚焦得远一些。结果就是——一个点变成了一个模糊的圆

怎么解决?

  • 非球面透镜。这是目前车载镜头的主流方案。
  • 缩小光圈。光圈小了,边缘光线被挡住,球差自然减轻。

我记得有一次,供应商送来的镜头样品,中心清晰度很好,但边缘一塌糊涂。一查,就是球差没校正到位。后来换了非球面镜片,问题解决。

2.4.2 色差

色差,说白了就是不同颜色的光折射率不同。蓝光折射得厉害,红光折射得弱一些。结果就是,一个白色物体边缘会出现红蓝「镶边」。

色差分两种:

  • 轴向色差:不同颜色聚焦在不同平面上。
  • 横向色差:不同颜色成像在传感器上的位置不同。

车载摄像头对色差很敏感。因为算法要识别交通灯、刹车灯,颜色不准会出大问题。

避坑指南:我曾经在一个项目中,发现算法对红色交通灯的识别率偏低。排查了很久,最后发现是镜头色差导致红色光晕扩散到了相邻像素。后来在 ISP 里加了色差校正,识别率从 85% 提升到了 97%。

2.4.3 畸变

畸变,就是直线变弯了。分两种:

  • 桶形畸变:画面中间向外凸,像桶一样。常见于广角镜头。
  • 枕形畸变:画面四角向内凹,像枕头。常见于长焦镜头。

车载摄像头中,鱼眼镜头的畸变最严重,可以达到 50% 以上。但这不是坏事——鱼眼就是为了获得超大视场角,畸变是「有意为之」的。

不过,算法层面必须做畸变校正。否则,你检测到的物体位置和实际位置会差很多。

// 畸变校正的数学模型(简化版)
// 径向畸变:
x_corrected = x * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6)
y_corrected = y * (1 + k1 * r^2 + k2 * r^4 + k3 * r^6)

// 切向畸变:
x_corrected = x + [2 * p1 * x * y + p2 * (r^2 + 2 * x^2)]
y_corrected = y + [p1 * (r^2 + 2 * y^2) + 2 * p2 * x * y]

这里的 k1、k2、k3 是径向畸变系数,p1、p2 是切向畸变系数。这些参数需要标定得到。

核心观点:畸变校正不是「可选项」,而是「必选项」。尤其是做测距目标定位的算法,不校正畸变,误差会大到离谱。我见过一个团队,在环视拼接时没做畸变校正,结果地面上的车道线在拼接处断开了 20 厘米。这种问题,实车测试时一眼就能看出来。

小结

这一章的内容,说白了就是一句话:镜头不是完美的,但我们可以理解它的不完美,然后用算法去弥补

焦距决定你看多远,FOV 决定你看多宽,光圈和景深决定你看多清楚,像差决定你看得多准。这四个维度,是车载摄像头选型和算法设计的底层约束

下一章,我们会聊传感器——CMOS 是怎么把光变成电信号的。到时候你会发现,光学和电学的问题,其实是连在一起的。