拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

机器视觉打光实战:光源选型、角度控制与案例排坑

机器视觉打光实战:光源选型、角度控制与案例排坑 各位做机器视觉的朋友或者正在往这个方向转的工程师今天想跟你们聊一个特别基础、但又特别容易被低估的环节——打光。我见过太多项目算法工程师调了一个月模型精度死活上不去最后发现是光源角度歪了两度也见过硬件选型时随便配了个环形光结果反光把特征全淹没了项目直接推翻重来。说句得罪人的话机器视觉项目里一半以上的疑难杂症根源都在打光。图像采集是视觉系统的眼睛而光源就是这双眼睛看东西时的“光线环境”。环境不对眼力再好也白搭。这篇文章不打算讲那些高深的光学仿真理论就从一个实际做项目的人的角度聊聊我这些年总结的打光技巧、选择光源的完整流程以及不同场景下的实战方案。内容覆盖了从物理原理到选型流程、再到实际案例排坑的完整链路不管是刚入门的新手还是被项目折磨得焦头烂额的老手应该都能从中找到点有用的东西。1. 先想清楚一个问题打光到底在解决什么很多人一上来就纠结“用红光还是蓝光”“用环形光还是条形光”但我觉得在选光源之前得先搞明白打光的本质目标是什么。1.1 机器视觉系统里光源不是“把东西照亮”那么简单日常拍照时我们希望光线均匀柔和把场景拍得“好看”。但机器视觉不是这样光源的核心任务是“制造对比度”把要检测的特征和背景彻底区分开。举个例子你要检测一个黑色橡胶垫圈上的细小裂纹。如果打光方式不对整个垫圈都是黑乎乎一片裂纹和背景灰度几乎一样算法根本无从下手。但如果你用低角度红光打上去裂纹边缘会产生漫反射而光滑的表面是镜面反射相机就能在图像里看到一条明亮的裂纹线——这就是打光的价值把“看不见”变成“看得见”把“难检测”变成“好检测”。我经常跟团队里的新人说一句话光源不是耗材而是视觉系统里的第一个“算法”。光源选对了、调好了后面所有算法都轻松光源没做好算法再牛也等于在垃圾数据里挖金子。1.2 打光直接影响像素精度和算法难易程度结合最近大家在聊的“机器视觉动了什么会导致像素精度变化”这个话题这里多说一句很多人以为像素精度只跟相机分辨率和视野大小有关其实光源对精度的贡献被严重忽视。当打光不均匀时同一个特征的边缘在不同位置会有不同的灰度梯度算法提取边缘时就会出现系统性偏差——可能左边检测出来的宽度是100个像素右边只有95个像素。这种误差不是算法能修回来的因为它不是随机噪声是“看起来像真的一样”的错误数据。均匀的照明是像素精度稳定的基础。另一个容易被忽视的点是光的亮度稳定性——光源使用久了或者温度变了亮度发生漂移图像整体灰度变化直接影响二值化阈值和边缘提取的稳定性。这也是为什么工业现场要用带恒流控制的专用光源控制器而不是随便拿个开关电源凑合。2. 光的三个关键物理特性方向、波长、偏振理解了打光的目标之后我们来看打光到底有哪些“旋钮”可以调。简单来说光有三个你可以操控的物理特性理解了这三个特性你就理解了90%的打光方案设计。2.1 方向角度决定了你“看”到什么光的照射方向也就是入射角度是打光设计里最重要的参数。同一个工件光从不同角度打过去相机看到的完全是两个世界。这里引入两个基础概念镜面反射和漫反射。光滑表面产生镜面反射反射角度等于入射角度像镜子一样粗糙表面产生漫反射光向各个方向散射。我们做视觉检测本质上就是利用这两种反射的差异。高角度照明30°-60°左右光大部分被规则反射适合检测表面平整度、有无凹陷或凸起。低角度照明10°-30°左右光擦着表面过去凹凸不平的地方会产生漫反射亮点平整区域则是暗的特别适合检测划痕、压伤、纹理。同轴光0°左右光垂直于表面照射并垂直反射适合高反光平面上的字符识别。这里有个经常被忽略的细节光源角度微小的变化会产生巨大的成像差异。我做过一个项目定位精度要求正负0.02毫米就因为光源支架松了角度偏了大概2度像素精度直接掉了将近5%。所以在大批量制造场景里光源固定支架的机械刚性和光源本身同样重要。装好了之后一定要做机械防松处理乐泰胶、防松垫圈该上就上这不是小题大做。2.2 波长和颜色互补色增强对比光的颜色本质上是波长。不同颜色的光打在物体上吸收和反射特性完全不同。这里有一条黄金法则用与目标特征颜色相同的波长特征变亮用与目标特征颜色互补的波长特征变暗。互补色会让目标在暗背景上变成亮的或者在亮背景上变成暗的对比度一下子就拉开了。比如一个是红色底的电路板要检测板上的黑色字符那用红光打就非常合适——红底把红光反射回来变成亮背景黑色字符吸收光保持暗色图像里就是白底黑字二值化处理不要太轻松。反过来如果用了蓝光红底可能变成暗色字符也暗整个图像灰蒙蒙对比度拉不开。还有一个细节蓝光波长更短的散射更强对细微表面缺陷更敏感红光穿透性更好适合有一定透光性的材料红外光则常用于排除环境光的干扰因为很多工业现场的照明光源如白炽灯主要能量在可见光波段用红外光源配合红外滤镜可以直接把环境光屏蔽掉。不过用红外时要注意相机是否带红外截止滤镜很多工业相机出厂默认带IRCUT得确认一下或者摘掉。2.3 偏振对付反光的关键武器做视觉的人最烦什么反光。金属表面、玻璃表面、经过抛光处理的塑料件一旦出现镜面反光要么过曝要么特征被光斑盖住算法直接崩溃。对付反光偏振片是最有效的武器之一。原理一句话反射光尤其是镜面反射带有明显的偏振特性而漫反射光基本是去偏振的。在光源前加一个偏振片起偏器在镜头前再加一个正交方向的偏振片检偏器这样就可以把镜面反射光滤掉只保留漫反射光信号。这个方案在实际项目里非常常用。比如检测锂电池表面的划痕和压痕表面本身就是高反光的金属膜不用偏振方案拍出来到处是高光点有划痕的地方完全被光斑盖住。加了偏振片之后反光消除划痕清清楚楚。不过偏振片会损失光强通常要损失60%-70%的光所以用偏振方案时光源亮度要留足余量或者相应增加相机的曝光时间。3. 选择光源的完整流程五步法现在很多人问我选光源到底有没有一套标准流程我根据自己的项目经验整理了一个“五步法”供参考。这不是什么行业标准但按照这个流程走下来基本不会出大错。3.1 第一步明确检测目标和特征优先级这一步看着简单但实际做起来最容易翻车。所谓“明确目标”不是笼统地说“我要检测缺陷”而是要具体到缺陷类型是什么划痕、脏污、凹坑、凸起、缺料、异色缺陷的尺寸范围是多少最小要看到多大的缺陷缺陷是在什么材质表面上金属、塑料、玻璃、织物、纸被测物的颜色是什么背景颜色是什么现场有没有环境光干扰产线节拍是多快有没有空间限制我举个例子同样检测“表面划痕”在镜面不锈钢上和磨砂塑料上打光方案完全相反。前者要用低角度光制造暗场效果让划痕亮起来后者可能需要高角度光或者同轴光否则塑料表面的漫反射本身就会让划痕淹没在背景里。还有一个经验如果同时要检测多种缺陷要分优先级。一个案子可能要同时看划痕和脏污但两者最佳打光条件往往是冲突的——划痕适合低角度暗场脏污适合高角度明场。这时不能贪心要么牺牲次要特征的检测能力要么设计双工位或双光源系统分开拍这点要在方案阶段就跟客户确认清楚。3.2 第二步确定照明方式明场、暗场、背光等明确了目标之后下一步是确定照明方式。这里我把常用的几种照明方式列出来并说明适合的场景方便对照参考。照明方式光源位置图像效果典型应用明场照明光源与相机同侧高角度背景亮、特征暗字符识别、外形轮廓检测、平整表面缺陷暗场照明光源与相机同侧低角度背景暗、特征亮划痕、裂纹、压伤、刻印检测背光照明光源在工件背面轮廓黑白分明尺寸测量、外形缺陷、透明物内部杂质同轴照明光经半反半透后垂直照射消除反光、表面均匀高反光平面字符、晶圆表面、金属纹理圆顶照明穹顶光半球形漫反射罩均匀无阴影减少反光曲面、弧形、球形产品、强漫反射表面条形光/线阵光任意角度可组合灵活、照射面积大大尺寸工件、流水线动态检测选择的关键原则就一条你要的是“亮特征还是亮背景”。检测划痕这类“凹陷型”缺陷想让缺陷亮起来选暗场低角度检测字符这种“颜色型”特征想让背景亮起来选明场高角度或同轴光。这里多说一句背光。做尺寸测量时背光几乎是最优解。因为背光形成的是标准的二值化轮廓边缘锐利、毛刺极少亚像素边缘提取的精度很高。我做过一个外壳尺寸检测项目用背光之后重复精度从正负0.05毫米提升到了正负0.02毫米算法代码一行没改纯粹是打光方式换了一下效果立竿见影。3.3 第三步光源类型选型确定照明方式后再把这个方式具体化成光源类型。市面上常见的光源类型及其特点如下环形光源最常见由一个环形的LED阵列构成提供360度无死角照明。优点是结构紧凑、安装方便、价格便宜适合大多数通用场景。但环形光的照射角度实际上是一个锥面不是理想的“均匀平行光”所以对于极平整表面的检测效果未必是最好的。条形光源由一个长条形的LED阵列构成适合大尺寸工件或者需要特定方向照明的场景。多根条形光可以自由组合形成各种角度组合灵活性很高。比如检测狭长金属表面两根低角度条形光对打效果非常理想。同轴光源内部有一个半透半反镜光从侧面进入后垂直向下照射反射光再透过镜片进入相机镜头。它的特点是消除了镜面反射的眩光能清晰拍摄高反光表面上的细节但亮度损失比较大且对较大面积的照度均匀性有较高要求。圆顶光源穹顶光源LED安装在半球形罩子的内壁光经过多次漫反射之后形成非常均匀的照明环境。适合曲面、球形、弧形工件比如药片胶囊的外观检测、精密金属零件的外观检查。均匀性是最好的但同样有光效损失大的问题。点光源由一个或多个LED组合在极小的区域内发光面积小、亮度高适合配合远心镜头做同轴效果、或者对微小区域做集中照明。很多激光类的方案也会用到点光源来补光。背光源平板式的LED面光源发光面均匀放在工件正下方。尺寸测量、轮廓检测的首选。做背光检测时工件和光源之间一般留一点点间隙不要让工件紧贴光源表面以免刮花光源扩散板以及产生干涉条纹。线扫描光源设计为一条细长亮线专门配合线阵相机使用照射范围是一条线状区域亮度要求很高适合大幅面、高速运动的连续检测场景比如薄膜、纸张、金属带材等卷材表面检测。新手最容易犯的错是只看外形选光源觉得“环形光好看就选环形”。实际上环形光和条形光在同一个项目里可能都能用但成像质量差很远。我自己有个习惯每次选型前先画一个光路示意图把待测工件、缺陷位置、光源角度、相机位置画出来看一眼光的反射路径是否合理再决定用哪个类型。3.4 第四步颜色波长选择第三步定的是“光的形状”第四步定的是“光的颜色”。颜色选择的逻辑我们前面已经讲了这里再补充一个实操细节光源颜色的选择要跟相机靶面尺寸、黑白/彩色相机、镜头镀膜一起考虑。如果用的是黑白相机颜色选择只看“对比度”选能让目标与背景灰度差最大的波长即可。如果用的是彩色相机有时候为了保留颜色信息做检测比如检测标签颜色的色差那就不能随便加滤色片得用白色光或者全光谱光源让颜色信息完整进入传感器。还有一个常见操作单色光源加对应滤镜。比如用了红光镜头前可以加红色滤镜进一步滤除环境光和其他杂散光让到达相机的光更加“纯净”。这在环境光干扰严重的现场非常有用。3.5 第五步控制器和频闪方案这是很多人忽略的一步但恰恰是决定项目稳定性的关键。光源控制器不只是给LED供电那么简单它的作用是保证光源亮度恒定和可调以及在特定场景下实现“频闪”控制。恒流控制LED是电流驱动器件微小的电压波动会带来明显的亮度变化。工业光源必须用恒流驱动否则亮度飘移会直接影响成像灰度进而影响算法结果。PWM调光通过调节脉冲宽度来改变平均电流实现亮度调节。PWM频率要选高一些一般要求几千赫兹以上否则某些相机在采集时会捕捉到频闪条纹。频闪模式在相机曝光瞬间给光源一个短暂的强电流脉冲让光源在极短时间内发出远高于额定值的亮度。这种模式的好处是第一可以缩短相机的曝光时间有效冻结运动模糊第二可以提高光源的有效亮度减少光源数量第三可以降低光源的平均功耗和发热延长光源寿命。频闪方案对控制器的响应速度要求比较高一般的开关电源没法做到微秒级别的快速响应。所以如果项目的节拍很快或者被测物在高速运动一定要选择支持频闪模式的光源控制器并且控制信号要和相机曝光信号做同步。这个同步可以靠硬件触发线实现也可以通过相机的闪光灯输出信号来触发光源控制器。4. 几个典型场景的打光方案拆解理论讲再多不如看几个实际案例。我把这些年做过的一些典型项目挑出来每个案例都按“需求—难点—方案—结果”来拆解大家可以直接参考。4.1 金属表面划痕检测低角度暗场是主力这是最常见的需求之一五金件、铝合金外壳、不锈钢板都要检测表面划痕。难点在于金属表面本身有纹理、有光泽划痕的深浅不一普通打光方式很难把细微划痕和正常纹理区分开。我的方案是低角度条形光暗场照明。把两根条形光源分居两侧以极低的角度大概10到20度照射待测表面。光滑的表面会把光反射到远离相机的方向在图像里表现为暗色而划痕处的粗糙断面会产生漫反射部分光线进入相机表现为亮线。这样划痕在图像里就是暗背景上的亮线对比度非常好。如果划痕特别浅可以进一步把光源角度压低一点同时增加光源亮度。这里需要注意低角度照明的亮线宽度并不代表划痕的真实宽度因为漫反射会“放大”细小的缺陷。所以如果客户要求对划痕宽度做定量测量这个方案会有一定误差需要结合像素标定做修正。4.2 透明玻璃和薄膜缺陷检测背光和偏振的配合玻璃、透明塑料、薄膜这类材料最大的难点是“透明”本身。若缺陷是气泡、杂质、裂纹用背光照明是最直接的方案——暗背景下的亮点或亮线一目了然。但如果缺陷是表面的“擦痕”或者“指纹”背光就不够用了。因为这些都是表面纹理需要“反射光”才能呈现出来。这时可以把光源放在工件上方用低角度光照射用另一侧的黑背景来制造暗场。更复杂的方案是加偏振片光源前加偏振片镜头前加正交检偏器这样玻璃内部的应力纹理也可能被呈现出来双折射效应甚至可以用来检测玻璃的应力分布。做玻璃检测时还有个大坑——牛顿环干涉条纹。当玻璃和光源扩散板贴得太近或玻璃与玻璃之间形成微小间隙时会出现彩色干涉条纹严重干扰检测。避免方式就是让工件和光源之间保持几毫米以上的距离或者用漫射效果更好的光源。4.3 高反光工件上的字符识别同轴光和多光谱方案金属或者经过抛光处理的工件上通常有激光打码、喷墨打印或者钢印的字符需要识别。难点在于高反光表面会出现强烈的镜面反射字符区域和非字符区域容易被反光“统一”成一片亮白。同轴光源在这个场景下很好用。同轴光垂直照射到反光平面后垂直反射回镜头整体图像比较均匀而字符区域因为有凹凸或颜色差异会打破这种垂直反射关系从而形成清晰的暗色或亮色字符。如果字符本身的材质和背景色差很大普通光源也能搞定但同轴光能让图像更干净算法更稳定。如果字符是刻印在透明材料上可以考虑“暗场同轴”的思路或者用结构光一个微小的光栅投影到字符区域通过相位变化提取浮雕信息。4.4 3D视觉的打光思路最后单独聊聊3D视觉的打光这也是这几天热词里大家都在关心的“机器视觉3D入门”话题。很多做3D项目的朋友问3D视觉不是靠激光或者结构光重建点云吗还需要打光吗答案是非常需要。3D视觉的打光要分两种场景。第一种是激光三角法光源本身是一个线激光器这种情况“打光”主要考虑的是激光的波长和功率以及环境光对激光线的干扰。红外激光容易受环境红外辐射影响蓝紫激光的散射和吸收特性不同需要根据材料选择最佳波长。第二种是主动结构光或双目视觉这时候环境光对成像质量影响极大需保证足够的照明亮度和均匀性或者使用红外投射器红外滤镜来排除可见光的干扰。3D项目里最经典的翻车现场是工件是黑色的或高反光的激光线投射上去后反射信号太弱或者直接镜面反射到别处导致点云大片缺失。解决的思路通常是调整激光功率、改变照射角度、给工件表面做预处理喷粉、涂消光剂甚至是同时用多路激光从不同方向打。5. 常见问题与排查技巧实录最后这部分我整理了这些年实际项目中遇到的打光相关典型问题以及对应的排查思路。这些问题看起来很不起眼但每一个都让项目组掉过头发。现象可能原因排查方向图像整体过曝或某些区域过曝光源亮度太高、光圈没调、环境光干扰先关掉环境光试拍再调光圈和曝光最后才考虑降光源亮度图像里有明暗交替的纹理光源频闪PWM频率太低或交流电频闪调高PWM频率或者改为恒亮模式检查是否为环境光如日光灯干扰同一工件放不同位置亮度差异大光源均匀性差或光源照射角度/距离在变化用照度计测试光场分布必要时换更均匀的光源类型检测位置漂移导致图像忽明忽暗工件来料定位不准光源相对工件的角度在变化优化机械定位或者改用更大的照射范围、更均匀的光源反光工件上特征被炫光盖住镜面反射进入相机改变光源角度加偏振片或换同轴光图像边缘模糊或者有拖影曝光时间太长工件在运动缩短曝光时间提高光源亮度或开启频闪模式光源用一段时间后亮度下降LED热衰减检查散热和驱动电流必要时考虑主动散热或降低额定功率使用排查问题有个基本思路先隔离因素再逐项假设验证。环境光、相机参数、光源参数、机械位置这四类因素混在一起时不要凭感觉调先关掉所有不确定项比如关掉环境灯、把曝光调小再一项项加回来看图像是什么时候变差的问题源头就很容易定位了。另外一个很实用的技巧是在实验室搭一个简易的“光学校准台”。一个小光学面包板、一套可以自由调节高度和角度的光源支架、几块亚克力板做背景加起来没多少钱但能让你在打光调试时少走很多弯路。每次拿到新工件先在光学校准台上试出最佳光路再去现场按图索骥搭固定支架效率提升非常明显。6. 几点写在最后的经验和建议如果文章到这里你问我“打光这件事最核心的能力是什么”我会说不是光学知识而是“观察图像并反推光路”的能力。拿到一张图像看到某个区域过曝你脑子里应该能大概推出来“是哪个方向来的光造成了这个反射”然后下意识地知道“往哪个方向调光源角度”。这种能力只有靠大量项目实践才能积累出来一开始就是不断试错、记录参数、总结经验。给新入行或者正在学习机器视觉的朋友一些学习路线上的建议先吃透成像原理。相机靶面尺寸、镜头焦距、工作距离、视野范围这四者的换算关系要滚瓜烂熟这是所有视觉方案的基础。再练好打光基本功。找几样典型工件——金属、塑料、玻璃、PCB板用不同的光源、角度、颜色去拍观察并记录图像差异建立自己的“成像经验库”。有余力再学算法。其实有了好的图像很多“高级算法”根本用不上一个阈值分割加一个Blob分析就够了。图像质量上去了算法只是锦上添花。面试或者做方案汇报时把打光设计思路讲清楚往往比秀多少个模型更能打动面试官。因为这说明你真的在解决工程问题而不只是在跑代码。我个人的习惯是每一个项目结束之后把当时的光路图、光源型号、参数设置、现场照片归档成一份“打光案例库”。两三年的时间积累下来很多新项目根本不需要从零开始试光直接在案例库里找类似的场景套用之前的参数微调一下就能定方案。那感觉真的比每次都在实验室摸黑试光要踏实太多了。打光这件事看起来是视觉系统里最“物理”的一环但它直接决定了算法的上限。希望这篇文章能帮你少踩几个坑少加几个月的班。以后再遇到“图像效果不理想”先别急着折磨算法工程师去光源那里多看看说不定问题就迎刃而解了。
返回列表