ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

机器视觉项目成败的关键:工业光学系统设计从原理到实操

机器视觉项目成败的关键:工业光学系统设计从原理到实操 做机器视觉这些年被问得最多的一个问题是算法模型选哪个更靠谱但真正让项目烂尾的往往不是模型而是“光”。十讲里我毫不犹豫把第二讲留给工业光学系统设计因为这是整个机器视觉项目里最容易被低估、也最能一票否决成败的环节。图像链路中光源、镜头、相机共同决定了信号质量的上限算法只是在已有图像上做文章图像里没有的特征再强的模型也变不出来。我见过太多项目算法组反复调参三个月最后发现是反光把缺陷藏住了换个打光方案一个晚上问题就解决了。所以业内那句“90%的项目死在光上”一点不夸张。这一讲适合谁无论是刚入行的视觉工程师还是正在带项目的技术负责人甚至只是准备上视觉检测设备的制造企业都应该花时间把光学系统这块捋清楚。下面我结合自己做过的项目从原理到实操把工业光学系统设计这件事拆开讲。1. 先搞清楚为什么“光”能决定项目的死活1.1 成像质量是算法的地基很多做算法的同事容易陷入一个误区以为只要模型够强什么图都能救。实际上整个视觉系统的信息流是这样的被测物体被光源照亮经过镜头的折射聚焦在相机传感器上完成光电转换最终变成一张数字图像算法再到这张图像里找特征。这意味着算法看到的所有信息在光子进入镜头的那一刻就已经定型了。我常跟团队里的小朋友打比方算法是装修图像是毛坯房。毛坯房墙体歪了、地面裂了装修再豪华也改变不了结构问题。放在视觉项目里就是对比度不足、反光淹没特征、边缘发虚这类问题算法顶多帮你修补一点点不可能无中生有。反过来如果打光方案得当把微小的划痕变成图像里的高亮特征那后端的阈值分割、形态学处理甚至深度学习模型都会变得非常轻松。这也是为什么我在项目初期永远先盯光学方案而不是先铺开一堆算法模型。所有视觉任务的共同基础都是对比度测量要边缘清晰缺陷检测要灰度差足够大OCR要字符和背景分离干净。光做不好谈什么都白搭。1.2 项目常见的“死法”其实就那几样我把这些年见到过的项目失败案例归了一下类发现“死在光上”的项目翻来覆去就那么几种情形。第一种是对比度不够。典型场景是浅划痕检测产品表面是细腻的漫反射面你用普通的白光漫射照明划痕和周围背景的灰度差可能只有十几个灰度级。算法无论怎么调阈值都会有大量漏检和误检。这种问题单靠算法优化很难解决但换成暗场低角度光划痕立刻从背景里跳出来。第二种是镜面反光和眩光。金属件、陶瓷件、弧形表面在直射光下会形成大片高光像素直接饱和变成纯白目标区域的信息全部丢失。我在一个连接器针脚检测项目里就吃过这个亏当时用高角度环形光图像上针脚是一片刺眼的白斑后续算法根本无从下手。第三种是阴影和环境光干扰。结构件上的凸台、螺孔在单向光的照射下会产生长阴影这些阴影经常被误判成缺陷。更麻烦的是产线环境光不稳定上午自然光强、下午灯光角度变图像整体亮度跟着波动固定阈值立马失效。第四种是光学系统的匹配问题。比如景深不够工件有高度差时边缘发虚比如光源频闪和相机曝光不同步图像上出现横向明暗条纹再比如光源和镜头不匹配画面出现暗角。这些问题外表看像随机故障根子都在光学设计环节没有算清楚。我这样说不是吓唬人而是想让大家建立一个概念光这件事能不能想明白决定了一个视觉项目的天花板。接下来我们就从选型开始一步步看工业光学系统到底该怎么设计。2. 工业光学系统设计四大件怎么选、怎么搭2.1 光源选型颜色、形状、尺寸的逻辑光源是整个光学系统里成本最低、却最值得花时间琢磨的部件。市面上的机器视觉光源基本都是LED从颜色上分有白光、红光、蓝光、绿光、红外、紫外从形状上分有条形光、环形光、圆顶光、背光、同轴光、点光源还有用在线扫相机上的线光源。颜色的选择逻辑本质上是光和物体表面相互作用的结果。人眼看到物体有颜色是因为物体反射了特定波长的光、吸收了其他波长的光。放到机器视觉里这个特性可以直接用来拉对比度如果目标和背景颜色不同选一种波长让目标反射强、背景吸收强灰度差就出来了。举个例子检测黄色塑料件上的黑色杂质用蓝色光照射效果往往比白光好因为蓝色波长会被黄色材料吸收整体变暗而黑色杂质在任何光下都很暗两者的区分度反而需要仔细调。再补充一点单色光配合相同波长的滤光片是最抗环境光干扰的组合。因为环境光里的日光、灯光都是宽谱光滤光片可以帮你在成像时只留下你需要的波段其他杂光全部挡在外面。我在很多产线项目里都用这招效果很稳。光源形状的选择主要看安装空间和照射面积。大面积均匀照明用面光源或者多根条形光拼接空间紧张、需要环绕照射就用环形光高反光曲面用圆顶光消除眩光测量轮廓优先背光源需要光路极直、减少杂散光的场景可以考虑同轴光。这里我给一个朴素的建议选型前先画一张简单的空间草图把相机、工件、安装支架的相对位置画出来光源形状能不能放进去、角度能不能调一眼就清楚比对着样本册纠结半天管用得多。2.2 照明方式明场、暗场、背光、同轴、结构光怎么选照明方式才是光学设计的灵魂。同样一个光源换个照射角度看到的可能是完全不同的世界。我把常用的几种方式整理成一张对照表方式光线路径典型效果适合场景明场照明光源和相机同侧光线直接反射进镜头表面亮、背景亮均匀表面、大面积外观检测、字符识别暗场照明光源低角度斜射镜面反射光线偏出镜头背景暗、缺陷亮划痕、凹坑、凸起、细小异物背光照明光源在工件背后工件呈现剪影轮廓清晰尺寸测量、外形检测、透明件内部异物同轴光垂直照射、垂直反射回镜头消除倾斜反光PCB、晶圆、高反光平面上的细微特征结构光投射条纹/栅格图案分析图案畸变获取高度和深度信息3D测量、平整度检测、焊道质量这里重点说一下暗场照明的原理因为很多人不理解为什么“让光斜着打”反而能看清划痕。光滑表面在低角度光的照射下镜面反射光会按照入射角对称的角度弹走大概率进不了正上方的镜头所以背景呈现黑色而划痕的边缘是粗糙的断续面会把光散射到各个方向其中一部分正好进入镜头于是在暗背景上划痕就是一个亮点。这种“缺陷变亮点”的思路是解决高反光表面细小缺陷最有力的武器。同轴光也值得多说一句。它的核心结构是半反半透镜光源发出的光经过透镜反射后垂直照射到工件上反射光再垂直穿过透镜进入相机。因为入射光和反射光都垂直于工件表面所以倾斜面或弧形面产生的杂乱反光被大大抑制适合看平整面上的细微特征。缺点是对漫反射明显的表面效果一般要结合实际情况选择。2.3 镜头与相机焦距、景深、远心镜头最关键光源定下来了接下来是镜头和相机。很多人先选相机再选镜头甚至先按情绪买一个大靶面相机回头发现没有合适的镜头匹配非常被动。正确的顺序应该是先根据精度需求确定相机分辨率再根据视场和工作距离计算镜头焦距然后验证景深和畸变是否满足要求。焦距计算很简单焦距等于工作距离乘以相机传感器宽度再除以视场宽度。举例来说我的检测视场要覆盖60mm工作距离大约300mm相机是1/1.8英寸靶面传感器宽约7.2mm那么焦距等于300乘7.2除以60结果是36mm可以选35mm定焦镜头再微调工作距离来适应实际画幅。这个公式我用过无数次误差基本可以忽略真正要小心的是商家标称的焦距有时会有偏差实物装上去必须再拍尺子验证。景深问题同样常见。工件有高度差或者来料摆放不平时镜头景深不够就会导致部分区域发虚。景深和光圈大小直接相关光圈越小景深越大但通光量下降图像会变暗。这也是为什么工业视觉现场经常使用小光圈加高亮光源的组合用光源的亮度去补偿光圈的缩小换取更大的景深。如果工件高度差实在太大就要考虑使用带有景深扩展功能的镜头或者调整机械定位减小高度差。测量类项目里我强烈建议优先考虑远心镜头。普通镜头天生有近大远小的透视效应物体稍微离远一点图像就小一点这在精密测量里就是实打实的误差。远心镜头通过特殊的光学设计让主光线近似平行在一定工作距离范围内放大倍率基本不变能够把透视误差压到极低。缺点是贵、体积大、景深也有限所以什么时候上远心镜头要在项目方案阶段就评估清楚。2.4 一套可复用的光学设计流程很多人问光学设计有没有标准流程我的回答是有而且必须按流程走否则必翻车。以下是我在每个项目里都会执行的步骤第一步拿到真实样件了解产线布局、安装空间和节拍。没有样件就不要谈选型拿别人的照片设计光源十有八九要返工。第二步明确要看的特征。是划痕还是凹坑是尺寸还是颜色特征的尺寸和容差是多少。这一步直接决定照明方式和光源颜色。第三步初步确定照明方式。先根据工件表面状态判断是明场、暗场还是背光不要纠结太多后面实验会修正。第四步选定光源颜色、形状和尺寸同时确认安装空间和调节自由度。第五步搭建简易实验台把样件放上去调整光源角度、高度和亮度观察图像效果并保存不同参数下的图片做对比。第六步根据图像效果确定相机分辨率和镜头焦距验证视场和景深。第七步设计同步方案包括外部触发信号、光源频闪控制器、多路光源分时切换等。第八步做稳定性测试连续运行8小时以上模拟产线的环境光开关、工件来料波动等情况。第九步输出完整的光学配置规格书把光源型号、安装角度、工作距离、曝光时间、增益、光圈、镜头焦距全部记录下来方便后续复制项目或者故障排查。这套流程看起来繁琐但每走一步都能帮你避免一个将来要花十倍时间填的坑。3. 四个典型场景的“光”是怎么设计的3.1 反光金属表面划痕暗场加偏振直接上一个我做过很多次的项目类型拉丝铝外壳表面的划痕检测。这种件表面既有镜面反光又有拉丝纹理属于典型的“难搞表面”。如果按常规思路用高角度白光直射相机拍出来就是一片大亮斑拉丝纹理也会形成方向性散射被算法误报成缺陷。这时候正确打法是低角度暗场环形光让光滑表面把光反射到镜头外面背景变暗划痕边缘散射光回到镜头缺陷变成亮点。这里有个细节环形光的低角度不是越低越好太低了光源会受安装空间的限制太高了镜面反射光又可能重新进入镜头一般从10度到30度之间起步用实验找到最合适的角度。再更进一步可以在光源前加偏振片在镜头前也加偏振片两者的偏振方向正交。这样做的原理是镜面反射光会保留偏振特性经过正交偏振片后被滤掉而漫反射光的偏振方向被打乱能通过镜头前的偏振片。结果是眩光被大幅抑制划痕的散射信息保留下来。拉丝铝件的拉丝纹理方向性很强我会转动镜头前的偏振片角度观察纹理在图像里的变化找到一个拉丝纹理被压暗、而深层划痕仍然清晰的角度这个调试技巧非常实用。3.2 透明薄膜杂质背光加结构光透明材质是另一个让人头疼的方向。你正面打光光直接穿过薄膜或者玻璃大部分信息都丢了气泡和杂质很难看清楚。我的常规方案是背光照明在薄膜后面放一块均匀面光源有杂质的地方会遮挡光线形成暗点气泡的折射会把光偏折形成亮边或者暗边轮廓一下就有了。但背光只能解决“有没有东西”的问题解决不了“表面平不平”的问题。如果还要检测薄膜表面的凹坑、凸起或者压痕我建议上结构光。最简单的做法是在薄膜上方投射一组黑白条纹然后用相机看条纹的变形。平面区域条纹是直的有凹坑或者凸起的地方条纹会发生弯折根据弯折的程度就能定位和评估缺陷深度。这个方法看起来比背光复杂但信息量大得多尤其适合那种既要看异物又要看平整度的复合检测需求。再补充一个经验检测彩色透明薄膜时光源颜色不能随意用白光要选一个和薄膜颜色互补的波长。比如偏黄色的薄膜蓝光更容易被吸收膜本身变暗里面的杂质反而因为遮挡和散射变得更容易分辨。这个颜色逻辑在透明件检测里同样适用。3.3 PCB焊点检测环形低角度加同轴光PCB焊点检测是我见过光源配得最复杂的场景之一。焊点表面是球面镜面不管光从哪里打总会在某个位置形成刺眼的反光斑而且每个焊点的球面朝向略有不同反光斑的位置也跟着变。用单一方向光拍照十个焊点里可能三个亮、四个暗、剩下两个花掉算法根本没法统一处理。我常用的组合是低角度环形光加同轴光。低角度环形光从多个方向同时照射焊点的轮廓和连锡等立体信息能稳定成像同轴光则负责垂直照明把焊点表面的氧化、污染这类平面特征看清楚。两条光路可以通过频闪分时工作一个相机曝光周期内分别点亮不同光源把两帧图像合成或者干脆分两次拍摄让算法分别提取不同特征。还有一个细节焊点检测加偏振片要慎重。偏振确实能消除镜面反射但也会把焊点的立体感打掉导致桥连、虚焊这类缺陷不好认。所以如果项目必须用偏振我会设计成明场、暗场、偏振三路光切换而不是一根筋压到底。3.4 曲面字符读取穹顶光的价值金属曲面上的激光打标字符或者压印字符用普通环形光打上去曲面不同位置的反射角度不同图像上经常出现一大块高光把字符遮住。我曾经在一个电机壳体的字符识别项目里被这个问题折磨过很久最后靠穹顶光解决。穹顶光的结构像一个乒乓球切开一半内壁涂高漫反射材料LED从半球底部向上照射光线在内壁反复漫反射后再均匀照到工件上。因为没有直射光曲面反射造成的局部高光被极大削弱字符和底材的灰度关系稳定下来OCR的识别率一下就上去了。不过在检测带有深度的压印字符时穹顶光因为“太均匀”会把字符边缘的阴影也消掉字符灰度反而变浅。所以我会在穹顶光之外再加一路低角度暗场光让字符棱边产生一点立体阴影两种光路配合使用识别效果最好。4. 打光到底“行不行”怎么量化验证4.1 用灰度直方图和对比度值说话很多项目报告里写着“打光效果良好”但什么叫良好我建议所有视觉工程师都学会用数据说话。最简单的量化方法是看图像灰度直方图如果目标和背景分别集中在两个不同的灰度峰中间有明显谷底那这个打光基本合格如果直方图只有一个大峰或者两个峰重叠在一起那算法后面必然痛苦。我平时会写一个极简的Python脚本来算对比度系数。取缺陷目标区域和背景区域各自的灰度均值对比度系数等于两者灰度差的绝对值除以两者灰度之和再稍微加一个小量防除零。这个值越接近1表示目标和背景分离得越干净如果算出来只有0.3甚至更低就要回头调光源了。脚本很简单用OpenCV读图后框两个区域就能算你可以直接抄去用。4.2 环境光干扰与频闪稳定性测试只拍一张漂亮图是不够的产线环境是动态的。我做的第一件事是在不同时间、不同产线状态下分别拍照白天自然光强的时候、晚上日光灯全开的时候、旁边有叉车经过的时候统计图像的灰度均值变化范围。如果目标背景的灰度差因为环境光波动而明显变化就说明光学系统还没有密封好或者没有配合滤光片。这时候最可靠的武器是外部触发加脉冲发光。让光源只在相机曝光的那一瞬间点亮曝光结束光源就熄灭配合窄带滤光片环境光的累积量被压到极低。这个方案我几乎在所有在线检测项目里都用了只要控制器选得稳图像亮度基本不受环境光影响长期运行也不漂移。还有一类问题出在光源本身。便宜的LED控制器如果PWM调光频率太低人眼看着正常但高速相机一拍就能看到明暗条纹。排查方法很简单把相机曝光时间设得很短比如1/500秒拍摄一张均质白板如果图像上有横条纹那就说明光源电流纹波或者PWM频率不达标换控制器或者把频率调到20kHz以上。4.3 光源衰减与长期一致性一个很容易被忽略但实际很致命的点是LED光源的光衰。LED虽然名字里带个“长寿命”但如果散热设计不好亮度会在几个月内下降百分之二三十。视觉系统是按调试当天的亮度设定阈值和曝光的光源慢慢变暗图像灰度逐步下跌算法误判率就会悄悄上升。这种情况在项目中段爆发排查起来非常费劲。我的习惯是选型时给光源留出亮度余量正常情况下不要把亮度调到百分之一百跑至少留出百分之二十的余量。同时项目验收时留一张标准白板的基准图后续每隔一段时间拍一张同位置的白板对比灰度均值的变化就能提前发现光源衰减的趋势。产线灰尘大的话还要定期清洁光源表面和镜头前端有时候图像突然变暗不是光源坏了只是上面盖了一层灰。5. 常见光学问题的排查速查表最后把我在项目里高频遇到的光学问题整理成一张速查表遇到异常可以现查现用。现象常见原因检查与解决方向图像整体过曝一片白光源过亮、增益或光圈过大降低光源亮度缩小光圈降低曝光和增益局部高光斑目标区域饱和镜面反射或球面反射改低角度暗场加偏振片换穹顶光特征和背景灰度拉不开波长或照明方式选错依次试不同单色光尝试暗场或背光边缘发虚细节模糊景深不足或相机振动缩小光圈调整工作距离和物距固定相机图像出现横向明暗条纹光源PWM频率低或触发不同步提高PWM频率使用外部触发脉冲发光亮度随时间波动环境光变化或光源热衰减增加遮光罩使用频闪加滤光片检查散热工件位置稍有变化图像亮度突变照明方向性过强换更大角度环形光或穹顶光多通道光源切换后首帧异常控制器稳定时间不足增加通道稳定延时丢弃前一到两帧排查有个基本顺序先看图像整体再看局部细节然后检查光源控制器参数最后怀疑硬件坏了。不要一上来就拆设备换光源很多问题是配置问题拆了反而更难查。我再分享一个多年的习惯每次做完打光调试我都会把工件放在一个简易转台上旋转拍摄一圈看看哪个角度下特征最稳定。这个操作看似费时间却能提前暴露很多在单一角度下看不到的问题尤其是在工件的来料方向可能变化的情况下这套测试尤其必要。光学设计不是一个一锤定音的环节而是需要回到现场反复确认的工程问题把这一步做扎实项目后面会省心很多。
返回列表