3、光照不均问题分析:光照模型、常见光照不均类型与影响
光照不均,说白了就是图像里不该亮的地方太亮,该亮的地方又太暗。我做了这么多年图像处理,遇到最多的坑就是光照问题。你想想看,一个好好的算法,换张光照均匀的图跑得飞起,一到真实场景就崩了。嗯,今天我们就来彻底拆解一下这个问题。
3.1 光照模型:理解光的物理本质
要解决光照不均,先得知道光是怎么来的。我个人习惯把光照模型分成三类:
| 模型类型 | 核心公式/描述 | 典型场景 |
|---|---|---|
| 朗伯反射模型 | I = ρ · L · cos(θ) | 漫反射表面(纸张、墙壁) |
| 镜面反射模型 | I = ρ · L · (R·V)^n | 金属、玻璃、水面 |
| 混合模型 | I = I_diffuse + I_specular | 大多数真实物体 |
这里 ρ 是表面反射率,L 是光源强度,θ 是入射角。我在项目中遇到过最典型的案例:用朗伯模型去处理金属零件表面,结果补偿出来的图像全是假高光。为什么?因为金属的镜面反射分量占了主导,朗伯模型根本hold不住。
关键认知:光照不均的本质是入射光能量在空间上的非均匀分布。补偿的核心就是把这个分布估计出来,然后反着做一遍。
3.2 常见光照不均类型
实际项目中,光照不均就三种面孔。我一个个说。
3.2.1 渐变光照
这是最常见的。光源在某个方向,图像从一边到另一边亮度逐渐变化。比如:
- 窗口进来的自然光,从左到右渐暗
- 单侧补光灯,中心亮边缘暗
- 镜头暗角效应,四角比中心暗15%-30%
我曾经在一条产线上做缺陷检测,相机装在传送带正上方,两侧各一盏LED灯。结果图像从左到右亮度差了40个灰度级。一开始没注意,算法把渐变的边缘误判成缺陷,误报率飙到60%。后来加了个背景拟合,才压下来。
3.2.2 阴影
阴影比渐变难搞。它有两个特点:
- 边界锐利:物体遮挡造成的阴影,边缘往往只有几个像素的过渡
- 强度不确定:阴影区的亮度可能是正常区的30%-70%,取决于光源角度和遮挡物距离
我建议你特别注意一种情况:自阴影。就是物体本身凸起的部分给自己投下的阴影。这在3D检测里特别常见,比如芯片引脚、螺丝头、浮雕文字。自阴影和真实缺陷在视觉上几乎一模一样,很多新手在这里翻车。
3.2.3 高光
高光是光照不均里最头疼的。为什么?因为高光区域的信息是丢失的——像素值直接饱和到255,你根本不知道它原本是什么颜色。
避坑指南:我曾经在金属表面字符识别项目里,高光区域把字符完全吞掉了。试了十几种补偿算法,最后发现——物理上改变光源角度比任何算法都管用。记住:算法不是万能的,光学设计才是第一道防线。
三种光照不均的对比:
| 类型 | 空间分布 | 边缘特征 | 信息丢失程度 | 补偿难度 |
|---|---|---|---|---|
| 渐变 | 平滑、连续 | 无锐利边缘 | 低(像素未饱和) | ★☆☆ |
| 阴影 | 局部、块状 | 锐利边缘 | 中(像素未饱和) | ★★☆ |
| 高光 | 点状、片状 | 渐变到饱和 | 高(像素饱和) | ★★★ |
3.3 光照不均对后续任务的影响
这个问题我每次上课都要强调。光照不均不是「看着不舒服」那么简单,它直接破坏算法的数学假设。
3.3.1 对阈值分割的影响
全局阈值分割假设整张图的背景亮度一致。光照不均一上来,这个假设就碎了。举个例子:
# 光照均匀时,Otsu阈值能完美分割
threshold = 128
binary = image > threshold # 效果很好
# 光照不均时,同一阈值在暗区把目标当背景
# 在亮区把背景当目标
# 结果:一团糟
我记得有个项目做PCB焊点检测,光照不均导致Otsu阈值在图像不同区域差了50个灰度级。最后不得不改用局部自适应阈值,但计算量翻了三倍。
3.3.2 对特征提取的影响
光照不均会改变特征的数值。比如:
- 梯度方向:阴影边缘会产生虚假的强梯度
- 纹理特征:LBP、GLCM等纹理描述子对光照敏感
- 颜色特征:RGB值随光照强度线性变化
你想想看,一个SIFT特征点在光照均匀时能匹配上,换了光照方向就匹配不上了。这不是特征点的问题,是光照在捣乱。
3.3.3 对深度学习模型的影响
深度学习也不是万能的。我做过对比实验:
| 模型 | 均匀光照准确率 | 不均匀光照准确率 | 下降幅度 |
|---|---|---|---|
| ResNet-50 | 97.2% | 81.5% | -15.7% |
| YOLOv5 | 95.8% | 76.3% | -19.5% |
| UNet(分割) | 93.4% | 72.1% | -21.3% |
数据不会骗人。光照不均能让最先进的模型准确率直接掉20个点。而且模型越大,对光照的「记忆」越强,泛化能力反而越差。
我的建议:别指望靠数据增强解决所有光照问题。加一些随机亮度、对比度变化确实有用,但真实场景的光照不均远比数据增强模拟的复杂。最好的策略是:先做物理层面的光学优化,再做算法层面的补偿,最后才是模型层面的鲁棒性训练。
3.4 光照不均知识体系
下面这张图是我自己整理的,把光照不均的核心脉络画清楚了。你看一遍就能记住。
这张图把光照不均的三个维度串起来了。你从根节点往下看:左边是理论(光照模型),中间是现象(三种类型),右边是后果(对任务的影响)。搞清楚了这三者的关系,后面讲补偿算法时你就能理解——为什么不同的光照类型要用不同的补偿方法。