1. 为什么打光是工业视觉里最难讲清的一件事
干了这么多年机器视觉,我越来越觉得一个道理:算法再牛、相机分辨率再高,到了现场打光不合适,一切都是白搭。很多刚入行的朋友一上来就研究Halcon、研究深度学习,结果到了项目现场被一个反光、一个阴影折磨得焦头烂额,根本原因不是算法不行,而是图像压根没拍好。
工业视觉打光选型这事儿,说简单也简单,无非就是光源、角度、颜色、相机滤镜这些组合。但说复杂也极其复杂,同一个工件,换一种打光方式,拍出来的图像可能天差地别,直接影响后面所有检测算法的稳定性和精度。我见过太多项目死在了打光这个环节,也见过不少本来觉得很难检测的项目,换了个打光思路以后轻松搞定。
这篇文章我不打算讲那些教科书里都有的光学原理,而是从实际项目操作的角度,把我在现场摸爬滚打总结出来的打光选型思路、步骤、坑点和心得一次性讲清楚。不管你是刚入行的新人,还是被项目逼着不得不自己搞定打光的朋友,这篇文章都能给你一套可以直接拿去用的方法论。
2. 打光选型的整体思路:先别急着选光源,把需求拆明白
2.1 核心需求拆解:你要让图像呈现什么特征
很多新手拿到项目第一反应就是问“用什么样的光源”,这其实是个错误的提问方式。正确的问题应该是:我要让被测特征在图像里呈现出什么样的明暗关系?
举个例子,同样检测一个金属表面的划痕,如果你用低角度光源,划痕会变成暗背景上的亮线;如果你用高角度光源,划痕可能会变成亮背景上的暗线。两种方式都能检测,但后续的算法处理逻辑完全不同,抗干扰能力也完全不同。
所以打光选型的第一步,永远是把检测需求拆成三个维度:要凸显什么、要压掉什么、环境里有什么干扰。比如检测螺丝有无螺纹,你要凸显的是螺纹牙型的阴影变化;检测手机玻璃盖板划伤,你要压掉的是玻璃本身的镜面反光;检测PCB板上的焊点缺陷,你要避开的是周围元器件投下的杂散阴影。这三个维度确定下来,光源类型和角度基本就定了大半。
2.2 理解光的四种行为:透射、吸收、反射、散射
打光选型说到底是利用光的特性来“控制”图像。光打到物体表面无非四种结果:透射过去、被吸收、被反射、被散射。你选光源、选角度、选波长,本质上就是在放大其中一种行为,压制其他三种。
比如检测透明瓶内的液位,你需要的是透射光,让光从瓶子后方打过来,液体部分和空气部分对光的透射率不同,图像上就会形成明显的明暗分界。比如检测黑色橡胶表面的字符,你需要的是低角度散射光,让字符的凹凸在图像上形成灰度差异,而不是靠直接反射把表面打成一片白。理解这四种行为以后,你就会发现打光选型不是“试错游戏”,而是有逻辑的工程决策。
2.3 光源类型怎么选:从环形光到同轴光,各有各的脾气
市面上的工业光源看着眼花缭乱,实际用下来就是那么几大类。我把它们按适用场景做了个分类,方便你对照着选:
| 光源类型 | 光线特点 | 典型适用场景 | 常见坑点 |
|---|---|---|---|
| 环形光源 | 从四周环绕照射,角度可调 | 字符识别、引脚检测、通用外观 | 低角度环光容易让平面反光不均匀 |
| 条形光源 | 单向平行光,角度灵活 | 大面积表面检测、边缘定位 | 容易产生方向性阴影 |
| 同轴光源 | 垂直照射,光路通过分光镜 | 高反光平面检测、镜面物体 | 对脏污极其敏感,需要定期清洁 |
| 背光源 | 从背面照射,形成轮廓 | 尺寸测量、外形缺陷、透明物检测 | 只能看轮廓,看不了表面细节 |
| 穹顶光源 | 漫反射球面光 | 弧形表面、高反光球面 | 亮度普遍偏低,曝光时间要拉长 |
| 点光源 | 汇聚小光斑 | 小视野补光、配合远心镜头 | 照射范围小,位置敏感 |
这里多说一句,光源不是越贵越好,而是越匹配越好。我见过不少项目用几万块的进口光源,最后效果还不如一支几百块的条形灯配个合适角度,原因就是没有理解光的“行为”和目标物体的“表面属性”之间的关系。
2.4 角度和位置:打光的灵魂在于“控制反射方向”
光源选好只是第一步,真正考验功力的是角度和位置的把控。对于表面比较粗糙的物体,光线会发生漫反射,从各个角度看亮度差别不大,这种表面打光相对容易,角度要求没那么苛刻。但对于金属、玻璃、陶瓷这类高反光表面,光线基本遵循镜面反射规律,你的光源位置和相机位置必须满足“入射角等于反射角”的关系,否则拍出来就是一片黑或者一片白。
这里有一个我反复用到的实用技巧:拿着一个手电筒,从不同角度照向被测物体,用眼睛代替相机观察哪个角度下特征最清楚。这个方法听起来很土,但非常有效。我做了这么多项目,至少有三分之一的光源角度是手电筒照出来的,然后再用工业光源去复现那个角度和距离。
3. 光源颜色与滤镜组合:用波长解决对比度问题
3.1 互补色原理:让目标特征“跳”出来
光源颜色选择的核心依据是互补色原理:物体是什么颜色,就用它的互补色去打光,这样物体在图像里就会变暗,而其他颜色区域会相对变亮,对比度一下就拉开了。
比如检测红色印刷字符,如果你用红光打,字符和背景可能都偏亮,对比度很差;但如果你换成绿光或者蓝光,红色字符因为吸收绿光而变暗,背景因为是白色或者浅色而变亮,对比度立刻就出来了。这个原理是打光选型中最基础也最实用的一招,几乎适用于所有颜色相关的检测场景。
3.2 单色光源加滤镜:干翻环境光的干扰
工业现场的光线环境往往很恶劣,头顶的日光灯、窗口的自然光、旁边设备的指示灯都可能对你的图像造成干扰。这时候单色光源加对应波段的滤镜就是最有效的组合拳。
选一个特定波长的单色光源,比如红色光,再在相机镜头前加一块只允许红光通过的滤镜,这样环境光里的其他波长都会被滤除,相机只会接收到你的光源打出来的光。这个方法在环境光杂乱的现场特别管用,尤其是做户外或者半开放产线上的检测项目。
3.3 偏振光的妙用:压制反光,看得更“深”
很多高反光表面的检测难题,最后是靠偏振光解决的。当自然光照射到光滑表面时,反射光会产生偏振现象,而散射光不会。利用这个差异,你可以在光源前面加偏振片,在相机镜头前也加偏振片,调节两者的角度到正交关系,这样镜面反射光会被滤掉,只剩散射光进入相机。
我第一次用偏振方案是检测磨砂金属表面的微小划痕。当时用普通光源怎么打都有大面积反光,划痕根本看不清楚,加了偏振片以后,反光被压制了,划痕的散射光清清楚楚地呈现出来,图像质量直接提升了一个档次。偏振方案唯一的缺点是光强损失比较严重,通常要损失一半以上,所以对相机灵敏度或者曝光时间的要求会高一些。
3.4 红外光和紫外光:看不见的帮手
除了可见光,红外和紫外在特定场景下也有奇效。红外的穿透力强,可以透过一些半透明的包装材料直接看到内部物体,比如检测封装袋内的干燥剂有无漏装。紫外光可以激发某些材料产生荧光,用于检测隐形二维码、特殊油墨标记等等。
不过红外和紫外的选型门槛相对高一些,一是需要匹配对应的相机传感器,普通CMOS在红外波段的响应并不好;二是需要专门的滤光片配合,否则环境里的红外紫外光也会参与成像。非必要不建议新手一上来就玩这两个波段。
4. 实操案例拆解:从选型到落地的完整过程
4.1 案例一:金属连接器表面的字符识别
这个项目是给某汽车零部件厂商做连接器端子的字符识别,端子表面是镀镍金属,反光强,字符是激光打标形成的浅灰色印痕。最开始甲方给的样品看着不难,但拿到现场一装,问题全来了:一是环境光杂乱,二是金属表面反光导致字符和背景灰度差太小,三是端子形状不规则,存在弧形曲面。
我的打光方案是这么定的:字符被激光打标过后,表面粗糙度发生了变化,在暗场下字符会产生散射光,而周围光滑的镀镍面几乎不产生散射光。所以我用了两个条形光源,从左右两侧以大约10度到15度的低角度照射端子表面,相机垂直向下拍摄。字符在图像里呈现为亮色,背景是暗色,对比度非常好。
现场实测中踩了一个不小的坑:条形光源的角度如果稍微大一点,镀镍面就会把光源的灯珠直接反射进相机,画面上出现两条刺眼的亮带。后来我把光源角度降到10度以下,并微调了光源的离轴距离,亮带才消失。
4.2 案例二:透明玻璃瓶的瓶口缺陷检测
玻璃瓶瓶口检测是很多食品饮料厂商的刚需需求,主要检测瓶口有没有裂纹、崩边和毛刺。玻璃是透明材质,而且是弧形表面,常规的环形光源从上往下打,光线会在瓶口内壁来回折射,拍出来的图像花成一片,缺陷根本看不出来。
我采用的是背光加同轴的复合方案:瓶口下方放一个背光源,让光从瓶口内部透射出来,把瓶口的轮廓打出来;瓶口上方用一个同轴光源补充照射外壁的细节。透过背光,裂纹和崩边会因为光路中断而在图像上形成暗区,匹配检测算法只需要找轮廓灰度的突变就行了。
这个案例里最关键的一个参数是背光的亮度。太暗了裂纹看不清楚,太亮了瓶口边缘会出现光晕溢出,影响测量精度。我花了不少时间反复调整光源亮度和相机曝光,最终找到一个匹配点,让瓶口玻璃的边缘灰度保持在120到180之间,既保留了足够的细节,又不会过曝。
4.3 案例三:PCB板焊点锡珠的检测
PCB检测是我认为最考验打光功力的领域之一,因为板子上有太多不同材质和不同反光特性的元件,很难用一套光全部搞定。焊点检测的核心难点在于锡珠和焊盘的颜色、反光度非常相近,用普通光源拍出来全是亮亮的,根本分不清楚。
这个项目我用了红绿蓝三色光分区照射的思路。简单来说,就是利用不同颜色光在不同材质上的反射差异,让锡珠和焊盘呈现出不同的灰度。然后通过软件把三张不同色光下的图像做差值运算,锡珠的特征就非常明显了。
当然这种做法对光源控制精度要求很高,三种光的亮度必须事先做严格标定,否则图像之间的差异就不纯粹。调试过程中我在光源控制器上花了大量时间微调各路光的电流值,最终才得到了理想的图像。这种多光谱方案不一定每个项目都需要,但遇到普通打光搞不定的场景时确实值得一试。
5. 打光选型的现场调试方法与参数计算思路
5.1 用手电筒快速验证方案,再上工业光源
我在前面已经提到过手电筒验证法,这里再展开说一下具体操作流程。找一支亮度可调的手电筒,最好是白光,然后按照你预想的光源类型,用手电筒模拟环形光就绕圈照,模拟条形光就从侧面试,观察被检特征在什么角度、什么距离下最清晰。
确认好大致方向后,再用工业光源做精调。手电筒验证最大的好处是效率高,不需要把光源支架装好了才发现角度不对再拆了重装,省下的时间是实实在在的项目周期。顺便说一句,如果你连手电筒照出来的效果都不理想,那就要反思是不是光源方案的方向有问题,而不是急着换更贵的光源。
5.2 亮度、曝光、增益三者之间的平衡
很多新手在调试时只知道一味增大亮度,结果图像过曝了,细节全丢了。实际上工业相机成像有三大参数:光源亮度、曝光时间、增益,三者共同决定图像的最终亮度,但各自的影响并不相同。
光源亮度增加是线性提升整个画面的亮度,但过高的亮度可能导致高光区域溢出;曝光时间增加同样提升亮度,但会引入动态模糊和帧率下降;增益提升的是信号放大量,但也会放大噪声。一个经验法则是:先固定增益为最小值,然后以曝光时间为主调节,曝光时间到了上限后,再提升光源亮度。这个顺序可以最大程度保证图像的干净度。
5.3 光圈与景深的配合
相机光圈决定了进光量和景深范围。光圈越大,进光量越大,图像越亮,但景深变浅,物体稍微偏离焦平面就会模糊。对于被测物体厚度较大的场景,比如连接器、螺丝、异形件,建议适当缩小光圈换取更大的景深,同时通过增强光源亮度或者拉长曝光时间来做补偿。
我做异形件检测时有一个习惯:先把光圈调到F8左右,再用光源和曝光来补亮度。F8是一个比较中庸的孔径,既能保证一定的进光量,又有足够的景深覆盖物体高度差。当然,如果你的检测精度要求极高,而且被测面确实非常平整,光圈可以开到F2.8甚至更大。
5.4 灰度直方图的判定标准
打光调得好不好,不要凭眼睛看屏幕上的图像“觉得清晰”,要用灰度直方图来科学判断。理想的图像,其灰度直方图应当具有以下特征:目标和背景的灰度峰值之间有明显分离,两者之间的谷底清晰;整个直方图的灰度范围充分展布,没有大面积过曝或者欠曝区域。
如果直方图只有一个峰,说明目标特征和背景在灰度上没有拉开;如果直方图整体集中在0到50的暗区,说明打光明显不足;如果集中在200到255的亮区,说明过曝了。用直方图来判断比用眼睛可靠十倍,因为人眼对不同灰度的分辨能力其实很差,但算法对灰度的差异却极其敏感。
6. 常见打光难题与排查实录
6.1 反光太强,整个画面白茫茫一片
这是高反光表面打光时最常遇到的问题。排查思路从四个方向入手:第一,降低光源亮度,避免过量的光线进入相机;第二,调整光源角度,让镜面反射光偏离相机光轴;第三,加偏振片,直接滤除镜面反射光;第四,用漫射光源替代直射光源,比如把条形光换成穹顶光。
大部分反光问题在前三步就能解决,偏振片通常留到最后再用,因为它会带来光强损失,属于有代价的方案。另外提醒一下,如果反光来自工件周围的金属工装或者夹具,可以给这些区域贴哑光黑胶带,成本极低但效果立竿见影。
6.2 特征和背景对比度太低,算法分不开
对比度不足时,先不要急着上算法,而是回到打光本身找原因。最常用的招数是利用互补色原理换光源颜色,比如目标特征是红色,就用绿光打。其次是调整光源角度,低角度通常能增强表面凹凸特征的阴影效果,从而提升对比度。
如果换色换角度都不行,就要考虑是不是需要改变成像模式。比如从明场改成暗场,或者加入偏振、红外等辅助手段。很多看似困难的检测项目,本质上是打光思路没有打开,我见过有人对着一个铁块反复换光源亮度,其实真正的问题是角度完全不对,从亮场改成暗场就解决了。
6.3 整体偏暗,但又不能无限增加曝光时间
如果你的图像整体偏暗,但曝光时间已经拉到上限,这时要考虑三个方向。一是光源功率本身是否足够,一些小型光源在较大视野下确实会出现光照度不足的问题。二是相机增益可以适当增加一些,但需要同时接受噪声增大的代价。三是检查光源的照射面积与被测区域是否匹配,如果光源太小而视野太大,中间亮四周暗是必然的。
我自己有一个习惯,项目调试前先测一下当下的环境光强度,如果环境光本身就很暗,那对光源亮度的需求就会更高。现场装好光源以后,再实测一次光照度,记录下来作为以后维护排查的基准数据。
6.4 图像出现频闪或者明暗条纹
这种问题通常出在光源控制器和现场电源上。工业现场往往会存在大型电机、变频器等干扰源,导致光源驱动电流波动,从而在图像上表现为明暗条纹或者频闪。解决办法有几类:一是换成恒流驱动的光源控制器,避免电流波动;二是使用带PWM频率同步功能的光源控制器,让光源闪烁频率和相机曝光时间匹配;三是在电源输入端加滤波或者隔离变压器。
检测频闪有一个简单的方法:把相机改成极短曝光时间拍摄,如果明暗条纹仍然存在但位置在移动,基本可以确定是光源输出不稳定。这个时候不要去调算法,先去查电源和控制器。
7. 打光选型中的成本控制与长期稳定性考量
7.1 光源不是越贵越好,够用才是王道
工业光源的市场价格差异很大,同样的环形光,便宜的几百块,贵的可能要几千块。价格差异主要体现在光源均匀性、寿命、亮度一致性等方面。但对于很多精度要求并不是极端的项目,中档光源已经完全足够,没必要追求顶配。
我选光源时一般会关注三个点:发光均匀性、长时间点亮的亮度衰减曲线、以及售后服务响应速度。尤其是亮度衰减,有些便宜光源用两三个月就明显变暗,导致图像质量慢慢退化,这种隐性成本比买贵光源还高。所以我一般建议客户在光源这种直接决定图像质量的环节不要过度省钱,但也不需要盲从国外品牌。
7.2 长时间运行的热衰减问题
光源连续工作发热以后,LED的发光效率会发生变化,有些光源的亮度会因此下降,导致白天和晚上的检测效果不一致。这个问题在密集型产线上尤其明显。解决思路包括选用散热设计更好的光源壳体、适当降低光源的驱动电流、以及定期用标准色卡或者标准工件校验图像亮度。
我见过一个比较极端的项目,光源装在密闭的防护罩里,夏天连续运行几个小时以后,光源表面温度高到烫手,图像的亮度和均匀性都明显变差。后来在防护罩上开了散热孔,并加了一个小风扇,问题才彻底解决。做项目时一定要考虑光源的工作环境,散热的优先级比大部分人想象的高得多。
7.3 光源的安装结构稳定性
光源安装结构看起来是个小问题,实际上非常影响长期使用的稳定性。光源支架如果刚性不足,设备运行时的振动会让光源角度发生微小偏移,图像特征也会跟着变化,导致算法误判率上升。
我的建议是光源支架尽可能选择刚性好的材料,安装后做好角度锁死,并且在项目验收前做一次连续运行测试,确认光源角度、亮度在连续工作下没有漂移。很多项目前期调试一切正常,量产以后开始偶发误判,一查根源往往是光源支架松了或者光源衰减了,这些属于典型的隐性故障。
8. 我的一些个人经验与最终建议
打光选型这个环节,说难确实难,因为涉及光学、材料、机械、电气多方面的知识;说简单也简单,因为核心方法论掰开揉碎就那么几条:拆需求、选类型、调角度、配颜色、做验证。真正拉开水平的差距,是对“光的四种行为”的理解深度,以及大量项目现场积累出来的直觉。
我自己做了这么多年视觉项目,最大的体会是:不要总想着用复杂方案解决简单问题。很多场景一支条形光源、一个合适的角度就解决了,非要上同轴加偏振加多光谱,结果调试周期拉长,成本上升,稳定性还不一定好。打光方案的复杂度和项目的实际需求匹配,才是最优选择。
如果你正在做打光选型,最后再给你一个非常实用的建议:每个项目做完,把光源型号、角度、距离、亮度参数、曝光参数、直方图特征、现场环境条件这些信息记录下来,整理成自己的打光案例库。以后再遇到类似项目,直接翻案例库找参考,效率能提升一大截。我自己这个习惯已经坚持了好多年,积累下来的案例库比任何教科书都管用。