4、光学实验与验证:打光实验方法、图像质量评估

光学实验,说白了就是给被测物体「找光」。

我做了这么多年视觉项目,最深的体会就是:光源选对了,项目就成功了一半。很多算法搞不定的问题,换个打光方式就迎刃而解。反过来,光源没选好,再牛的算法也白搭。

4.1 打光实验方法

打光实验不是瞎试。我习惯按下面这套流程走,效率高很多。

4.1.1 光源类型选择

先搞清楚你面对的是什么缺陷。不同缺陷,吃不同的光。

缺陷类型 推荐光源 我踩过的坑
划痕、凹陷 低角度环形光 角度调太高,划痕直接「隐身」
脏污、异物 高角度环形光 用漫射光,脏污和背景混在一起
字符、二维码 同轴光 反光太强,字符被「吃掉」
透明物体 背光 正面打光,透明物体直接「消失」
金属反光面 漫射光/穹顶光 直射光会产生严重反光

举个例子。我之前做手机中框划痕检测,一开始用高角度环形光,划痕根本看不出来。后来换成低角度环形光,划痕立马「现形」。为什么?低角度光让划痕边缘产生强烈散射,而平面区域光直接反射走了,对比度一下就拉起来了。

4.1.2 角度与距离实验

光源角度和距离,是打光实验的核心变量。

我一般会做「角度扫描」实验:

  • 固定光源亮度,从10°开始,每次增加5°,拍到60°
  • 每拍一张,看一眼图像质量
  • 找到对比度最高的那个角度

距离也是同理。光源离物体太近,光斑不均匀;太远,光强不够。我习惯从5cm开始,每次增加1cm,拍到15cm。

我的小技巧: 做角度实验时,用一张白纸放在被测物旁边。如果白纸上光斑均匀,说明角度和距离基本对了。

4.1.3 多光源组合实验

有些复杂缺陷,单一光源搞不定。这时候就得组合打光。

我记得有个项目检测PCB焊点虚焊。单用环形光,焊点轮廓看不清。后来我加了同轴光,焊点表面的反光特征出来了,再配合环形光打轮廓,两个光源一叠加,虚焊和良品焊点的差异非常明显。

组合打光要注意:

  • 两个光源不能互相干扰
  • 亮度要匹配,别一个太亮一个太暗
  • 最好用分时控制,或者用偏振片隔离

4.2 图像质量评估

光打好了,图像好不好,得有量化指标。不能光靠「我觉得还行」。

4.2.1 对比度

对比度,说白了就是目标和背景的「差距」有多大。

我常用的公式:

对比度 = |(目标灰度均值 - 背景灰度均值)| / (目标灰度均值 + 背景灰度均值)

这个值在0到1之间。一般要求大于0.3。如果低于0.2,算法就很难稳定分割了。

举个例子。检测黑色塑料上的白色字符,目标灰度均值200,背景灰度均值50:

对比度 = |200 - 50| / (200 + 50) = 150 / 250 = 0.6

0.6,非常好。如果目标灰度150,背景灰度120:

对比度 = |150 - 120| / (150 + 120) = 30 / 270 = 0.11

0.11,太低了。这时候就得调整打光方式。

经验值: 对比度 > 0.3 算及格,> 0.5 算良好,> 0.7 算优秀。

4.2.2 均匀性

均匀性,就是图像不同区域的亮度是否一致。

我见过最坑的情况:一个项目用环形光,中心亮、边缘暗。算法在中心区域跑得好好的,一到边缘就误检。折腾了两天才发现是光源均匀性问题。

评估方法:

  • 拍一张纯白参考板
  • 在图像上取9个点(左上、中上、右上、左中、中心、右中、左下、中下、右下)
  • 计算这9个点的灰度均值
  • 均匀性 = 最小值 / 最大值

一般要求均匀性 > 0.8。低于0.7就得换光源或者调整距离了。

注意: 均匀性差,不一定是光源的问题。也可能是镜头边缘渐晕(vignetting)。检查方法:把光源关了,用均匀面光源照白板,如果还是中间亮边缘暗,那就是镜头的问题。

4.2.3 信噪比(SNR)

信噪比,衡量的是「有用信号」和「噪声」的比例。

我习惯这样算:

SNR = 20 * log10(信号均值 / 噪声标准差)

信号均值:取目标区域的灰度均值。
噪声标准差:取背景区域的灰度标准差。

举个例子。目标区域灰度均值180,背景区域灰度标准差5:

SNR = 20 * log10(180 / 5) = 20 * log10(36) ≈ 20 * 1.556 = 31.12 dB

31 dB,不错。一般要求SNR > 20 dB。低于15 dB,图像噪声会严重影响检测精度。

噪声来源有哪些?

  • 传感器热噪声(曝光时间越长越明显)
  • 光源频闪(用LED光源时常见)
  • 环境光干扰(没做遮光处理)
避坑指南: 我曾经在一个项目中,SNR怎么都提不上去。后来发现是光源电源不稳定,导致亮度波动。换了稳压电源,SNR直接从18 dB升到28 dB。所以,别忽略电源质量。

4.3 最佳成像参数确定

打光实验做完了,图像质量也评估了,最后一步:确定最佳成像参数。

我一般会做一个「参数矩阵」实验:

参数 取值范围 步长 我的建议
光源亮度 0 - 255 10 先定亮度,再调其他
曝光时间 100 - 10000 μs 500 μs 别超过运动模糊的极限
光圈 F2.8 - F16 1档 小光圈景深大,但光强弱
增益 0 - 24 dB 3 dB 尽量低,增益=噪声

具体步骤:

  1. 固定曝光时间和光圈,调光源亮度,直到目标区域灰度在200左右
  2. 固定亮度和光圈,调曝光时间,确保运动物体不模糊
  3. 固定亮度和曝光时间,调光圈,找到对比度和景深的平衡点
  4. 最后调增益,能不加就不加

嗯,这里要注意:增益是最后的手段。我见过有人一上来就加增益,结果图像噪声大得离谱。其实调调光源亮度或者曝光时间,效果更好。

4.4 知识体系总览

下面这张图,是我自己总结的光学实验与验证的完整流程。你可以把它当成一个检查清单,做项目时对着走一遍,基本不会漏。

光学实验与验证 - 知识体系 打光实验方法 光源类型选择 角度与距离实验 多光源组合 图像质量评估 对比度 均匀性 信噪比 最佳成像参数确定 光源亮度 曝光时间 光圈 增益 输出:稳定、高对比度、低噪声图像 打光实验 → 图像质量评估 → 参数优化 → 稳定成像

这张图的核心逻辑:先做打光实验,再评估图像质量,最后确定最佳参数。三个步骤环环相扣,缺一不可。

我见过不少工程师,打光实验做得马马虎虎,图像质量也不评估,直接调参数。结果项目上线后问题不断,返工成本高得吓人。所以,别嫌麻烦,每一步都走扎实了,后面才能省心。

总结一句话: 光学实验不是「差不多就行」,而是「差一点都不行」。你花在打光上的每一分钟,都会在算法调试阶段加倍回报给你。

公众号:蓝海资料掘金营,微信deep3321