做机器视觉这些年,我最大的感受是:很多项目死得不明不白,不是死在算法上,也不是死在算力上,而是死在那套看似不起眼的光学系统上。我见过一个项目团队,花了三个月调深度学习模型,准确率卡在97%上不去,最后把打光方式换了一种,缺陷特征直接从背景里“跳”出来,准确率瞬间过了99%。这行里流传着一句话——你在算法上花的时间,永远是给光学系统的失误买单。今天这篇,我就把这笔账好好算一算,把工业光学系统设计的底牌翻出来聊。
这篇文章适合正在做机器视觉项目交付的工程师、刚入行的算法/硬件工程师,以及那些被“成像不稳定”折腾到头秃的项目经理。我会从光学到底在解决什么问题讲起,再到光源选型、镜头参数计算、实际打光方案的对比,最后给出一套我自己的光学验证方法论。全是实操里砸出来的经验,没有教科书式的空话。
1. 先搞清楚:工业光学系统到底在解决什么问题
很多新人容易把光学当成一个“让画面更亮/更清楚”的过程,这其实是个很危险的误解。如果你抱着“只要能看清就行”的心态去搭光学系统,后面十有八九要在算法层面用成倍的复杂度来还债。
1.1 光的本质是特征的放大器
工业光学系统的任务,不是把场景拍得好看,而是在图像中定向放大你关心的特征,同时压制一切会干扰判断的信息。一个合格的打光方案,应该做到“想要的明显到刺眼,不想要的弱化到消失”。
我用个生活化的例子来解释:你在马路边找一辆白色车,晴天正午的阳光下,白车周围全是高光反射,你很难一眼锁定轮廓;但如果是在阴天漫射光下,白车和灰色沥青路面之间就有了稳定的亮度边界。工业视觉里做的所有光影控制,就是人为制造“阴天”、甚至制造比阴天更苛刻的定向光环境,只为了让某个特征稳定地显形。
这就意味着,光学设计的第一步根本不是选灯和镜头,而是回答三个问题:
- 你要检测的缺陷/特征是什么物理属性?是颜色差异、高度起伏、表面纹理,还是透明体内部杂质?
- 这个特征在什么光照角度、什么光谱成分下表现得最明显?
- 背景中哪些干扰因素(反光、氧化色、粉尘、油污)需要通过光的方向和波长滤掉?
我接触过的一个拉链行业检测项目,客户要检测金属拉链齿上的电镀刮伤。一开始方案工程师用了高亮环形光,结果每一颗齿都在发光,刮伤完全藏在耀斑里。后来换成低角度条形光+偏光片,刮伤因为改变了表面法线方向,在画面里变成一条黑线,而相邻齿的镜面反光被偏光片挡掉了大半——特征一下就突显出来了。这就是“定向放大特征”的含义。
1.2 光学设计的蝴蝶效应:后面所有环节都被它锁死
光学系统一旦定型,后面每一环的复杂度都被它锁死了。我用一条链路来说明这种连锁反应:
- 成像质量决定缺陷特征的信噪比。信噪比低,算法阈值窗口就窄,参数只能贴着边缘调,产线上温度一波动、环境光一变化,误判率就飙升。
- 视场和分辨率决定你选什么分辨率的相机、什么样的镜头。选错了,要么视野不够大,检测节拍跟不上;要么分辨率浪费,数据量暴增,处理时间拉长。
- 景深和焦平面决定机构的机械精度需求。景深窄,来料抖动几毫米就虚焦;为了稳住焦平面,你要多加一堆压紧机构,项目成本蹭蹭涨。
- 打光均匀性决定后续算法的稳定性。不均匀的画面,同一个缺陷在画面中心和边缘亮度差了好几个灰阶,算法只能用很宽的容忍度参数,误判漏判一起涌过来。
所以行业里常说,一个机器视觉项目启动后,最先进行的就是光学可行性验证,而不是先写代码。方案能不能过,一看成像,二看机构,最后才是算法。
1.3 那“90%的项目死在光上”是真的吗?
说实话,“90%”这个数字带有夸张成分,但它背后指向的问题是真的:光学问题不解决,算法做得越多,项目死得越惨。有些项目是成像质量差,靠算法硬啃,啃下来的每天在处理边界样本;有些是光学方案在实验室里完美,一上产线就被环境光干扰击穿;还有些干脆是第一轮打样就被成像效果推翻,不得不返工重来。
前两年我参与过一个药品泡罩板缺陷检测项目——表面只有几微米深的微小压痕。第一轮光学验证用标准同轴光,成像上压痕几乎隐形;团队试了十几种光,最后用带有±30°角偏转的穹顶光源才让压痕形成立体阴影。那一刻我更加确定:所谓“死在光上”,其实是死在没有把光学当成一门需要系统性设计和验证的工程学科。
2. 光源选型:光不只是照亮,而是在算特征
光源选型是光学设计里最能体现功力的一环。同样是照亮一个工件,环形光、条光、同轴光、背光、穹顶光、结构光,它们在图像上产生的效果差异之大,超乎很多新人的想象。这里我按实战中最高频的几类光源,把它们的脾气秉性说透。
2.1 高角度环形光:镜面反射世界的噩梦
高角度环形光(一般角度在45°到75°之间)是最常用的光源,因为它安装简单、打出来的画面亮且均匀。但它有个硬伤:在金属、反光塑料这类镜面反射为主的表面,它会让反光彻底糊成一片。我记得有个新能源电池顶盖检测项目,用高角度环形光拍焊缝,画面里每条焊缝都是高光溢出,边缘毛刺根本看不见,后来换掉才得以推进。
所以这类光源只适合粗糙表面缺陷(漫反射型)、或者对亮度均匀性要求高的场景。如果你面对的是抛光金属、电镀件、玻璃表面,别急着上环形光,先想想低角度和偏振方案。
2.2 低角度条形光:凹坑和划痕的显微镜
低角度条形光(一般指入射角小于30°,几乎平行于被测表面)利用的是“掠入射”原理:光以接近水平的角度扫过表面时,平面区域反射光不会进入镜头,而凹坑、划痕、凸点这些破坏表面平整度的位置,会把光线以不同角度散射进镜头,形成高亮或暗色的特征。
这套路在以下场景有奇效:
- 金属表面划伤检测:划痕深度一般在几微米到几十微米,低角度光能让它在深色背景上形成亮线或黑线,具体明暗取决于你让哪部分散射光进镜头。
- 电镀件鼓包/凹陷检测:低角度光会让凹凸边界处出现强烈的明暗分界,肉眼和算法都能轻松识别。
- 字符打印缺陷检测:字符缺墨、飞墨,在低角度光下会出现和正常笔画不一样的灰度梯度。
低角度光最典型的坑是:安装距离和入射角稍微一变,特征对比度就剧烈变化。我们一般在光源支架上做好角度刻度,用齿轮+锁紧螺钉固定,保证每次拆装复现位置。
2.3 同轴光:平整表面的公平裁判
同轴光的原理是让光透过一个半透半反镜,沿镜头光轴方向垂直照射被测物,反射光也沿同一光轴回到相机。它用在平整表面上非常“公平”,因为每个位置接收到的光照角度完全一致,没有立体感,适合检测表面颜色差异、图案完整性、平整面的异物。
我把同轴光比作“顶光下翻书”:光线像手电筒从正头顶照下来,纸张上任何轻微的灰度不同都能看出来,但纸张稍微有个褶皱,阴影是看不清的。所以同轴光适合的工况是:表面本身足够平整,你要检测的是平面的灰度变化。比如药品说明书上的印刷缺字、陶瓷基板上的划伤色差、LCD面板的Mura检测,都是同轴光的强项。
需要注意的是,同轴光对表面轻微倾斜极其敏感——同一张金属面,只要翘起0.2°,反射光就可能完全偏出镜头,画面瞬间变成一片黑。所以它要求被测物必须有稳定的定位精度,机构上要尽可能让每个来料在同一高度和姿态。
2.4 背光:把轮廓变成剪影
背光(也叫面光源/轮廓光源)是结构最简单、效果却最稳定的一类光源。光源放在被测物背面,镜头从正面拍,得到的是纯剪影图——你用牺牲内部细节,换来稳定的外轮廓提取。
背光最常见的应用是尺寸测量。比如螺钉长度测量、电池极耳宽度测量、药片直径检测。在这些场景里,轮廓的锐利程度直接决定测量精度,而背光是让轮廓边缘最锐利、最不易受环境光干扰的打光方式。实测中,背光下的边缘过渡通常在1~2个像素之内,而表面光照下的边缘过渡往往到5~6个像素以上,对高精度测量来说差了几个量级。
背光还有一个隐藏用法:孔洞和缺料检测。对于深色胶件上有没有漏打孔,正面光很难看出微小的通孔差异,但背光一照,漏孔的零件轮廓上就没有对应缺口,特征一目了然。注意背光的光强稳定性和均匀性同样重要,我们通常用带恒流驱动的面光源,并且定期校准亮度。
2.5 穹顶光:消反光的漫反射利器
穹顶光(也叫积分球光源、圆顶光源)通过球面漫反射层,把光变成来自各个方向均匀的漫射光,目的是让镜面反射物体产生近似非反光的柔和效果。我把它的物理本质理解为“人工阴天”——没有方向性光源造成的单向反射刺眼,同时又能均匀照亮复杂曲面。
它的适用场景很宽:曲面金属外壳、镜面塑料件、USB接口内腔、铝型材表面字符识别……这些如果角度不对就会出现局部高光,但穹顶光可以做到整个表面柔和均匀。要注意:穹顶光均匀,但也会削弱细微的凹凸立体感,所以它不适合检测浅划伤等依赖阴影的任务。
2.6 结构光和线扫光的进阶思路
上面说的都是面阵相机配合连续光源的常规方案。在实际项目里还有两类进阶做法:
- 结构光:将特定图案(光栅、条纹、网格)投影到物体表面,利用图案的畸变还原物体表面三维信息。在焊点三维检测、物料体积测量、复杂曲面缺陷检测里非常有用。对于高度方向的缺陷(塌陷、凹凸、隆起),二维相机往往无能为力,而结构光可以把“高度差”转化为“条纹偏移量”,实现量化测量。
- 线扫光 + 线阵相机:针对大尺寸、圆辊类或连续运动产线,用线阵相机的“飞拍”模式,配合窄条形光同步扫描。比如卷材表面缺陷检测、光伏电池片栅线检测、印刷整幅面缺陷检测,线扫方案可以在高分辨率下覆盖大尺寸工件,而且能在运动中进行连续检测,节拍优势明显。
线扫方案最大的注意事项是同步性:光的触发频率、相机行频、编码器脉冲必须严格同步。否则画面就会出现拉花、条纹错位这类难以排查的故障。我们常用PLC输出编码器倍频信号给光源控制器,行频根据产线线速度实时换算,确保每毫米成像像素数恒定。
3. 镜头与相机的光学匹配:分辨率、景深和畸变取舍
光源把特征“画”出来了,还得靠一套镜头和相机把它忠诚地记录下来。这一节很多新人容易掉进参数指标的拼凑陷阱——号称买了一千两百万像素相机配工业镜头就一定清晰。实际上,镜头和相机需要像齿轮一样咬合匹配。
3.1 分辨率匹配:别把钱花在看不见的像素上
分辨率匹配的核心公式是:
视场分辨率(实际精度) = 视野宽度(mm) / 相机像素数(pixel)
举例:你用的相机是500万像素(2448 x 2048),视野宽度需要覆盖50mm,那么x方向的像素精度大约是50 / 2448 ≈ 0.0204mm/pixel。
这里有个关键概念叫光学分辨率(镜头能分辨的最小细节)。如果镜头的光学分辨率只能到0.03mm,即使传感器像素尺寸更细,画面也不会更清楚。用一句话总结就是:镜头的极限分辨率要优于相机的像元尺寸对应的物理分辨率,否则再多像素也是白搭。
我在项目里一般先算两步:
- 先据缺陷尺寸定视场精度。比如要检测0.1mm的小点缺陷,通常需要3~5个像素覆盖它,那么视场精度应达到0.02~0.03mm/pixel。
- 再反推视野和像素数。比如工件尺寸35mm,精度0.02mm/pixel,则x方向至少1750像素,直接选200万或者500万像素相机留出余量。
很多方案会预留10%~20%余量,因为考虑到安装位置偏差和算法对边缘过渡需要更多像素,但过大的预留意味着视野变大、细节被稀释,同样得不偿失。
3.2 焦距公式与工作距离:永远是成本和空间的妥协
镜头焦距的计算公式很经典:
焦距 f = 工作距离 WD × 传感器靶面高度(或宽度) / 视野高度(或宽度)
举个例子,已知传感器靶面是 1/1.8" 约7.2mm×5.4mm,要求视野30mm宽,工作距离200mm,那么焦距约为:
f ≈ 200 × 7.2 / 30 = 48mm所以适合的焦距是50mm镜头。但问题来了,现实里工作距离不一定能随你心:产线机构可能只有150mm的安装空间,这时候你需要调节的是视野宽度(选更短的焦距、更大视场),或者干脆让工件离镜头更近,重新计算。
在实际项目中,我和机械工程师之间的博弈几乎每天都发生。光学工程师恨不得要600mm工作距离好装各种灯,机械工程师说给你50mm空间已经是极限;光学工程师说要大视野,机械工程师说要紧凑体积。最后通常都是互相妥协的结果——这也说明,光学设计要尽早和机构设计联动,而不是等机架做完了再“塞”一套光路进去。
3.3 景深的成本逻辑:光圈越小越稳,但光强和衍射的代价随之而来
景深公式的精确计算很复杂,但直觉上记住这几条即可:
- 光圈越小(F值越大),景深越大。
- 工作距离越远,景深越大。
- 焦距越长,景深越小。
产线环境下,来料高度和安装位置总会有细微波动,所以景深是稳定性的关键。我常建议在允许范围内尽量收小光圈,把景深留足。但这里有个隐性坑:光圈收得越小,进光量越少,需要打更亮的光;可一旦光圈收到F/16甚至更小,衍射效应开始让图像变“柔”,清晰度反而下降。一般工业镜头的“甜蜜点”在F/4到F/8之间。遇到需要大景深又要高清晰度的场景,我的选择是:
- 优先选大靶面传感器 + 低倍率镜头,因为同样视野下,焦距更短、景深更大。
- 再用更强光强补足进光量。
- 后期用定焦、手动光圈镜头锁定最佳光圈,避免自动光圈在产线上频繁波动。
3.4 远心镜头:当你需要边缘“完全不歪”的时候
普通镜头因为透视关系,靠近视野边缘的物体会显得比中心大——这就是透视失真。当你要做高精度尺寸测量时,这种失真会直接打进误差预算。
远心镜头的设计思路是只让平行于光轴的光线进入成像面,这样物体无论离镜头远近、是否偏出中心,成像的放大倍率都一致,得到的边缘轮廓几乎不含透视误差。它特别适合以下场景:
- 高精度几何量测:螺丝直径、引脚间距、精密零件孔径。
- 有高度差的立体工件定位:即使来料高低不一,也能保证边缘轮廓位置稳定。
代价是两个字:贵、重。远心镜头体积大、价格通常是普通镜头的数倍甚至更多,且视场普遍不大。如果项目对测量精度要求不是极致,普通镜头配合标定和畸变校正也能做到相当好的效果,不必盲目上远心。
3.5 相机选型里容易被忽略的三个参数
很多人在相机选型时只盯着分辨率和帧率,但实战里还有三个参数往往决定项目成败:
- 像元尺寸:同样500万像素,像元2.2μm和像元3.45μm,在弱光下的信噪比、满阱容量、动态范围完全不同。大像元相机对光的敏感度和灰度均匀性更优秀,尤其在暗场或微光检测场景。
- 全局快门 vs 卷帘快门:产线上工件在移动,卷帘快门的逐行曝光会造成运动物体的歪斜/变形。只要物体在曝光期间有明显位移,就必须选全局快门。哪怕贵一点也值得。
- 位深:8bit图像(256灰阶)对边缘对比度敏感场景够用,但要检测极低对比度缺陷(比如浅划痕、透明体内部微小气泡),10bit或12bit相机能提供更大灰度解析空间,后期处理的余地完全不同。
4. 同一种缺陷的四种打光方案:以反光金属表面划痕检测为例
理论讲多了容易飘,我直接用一个高频场景来拆解实战中如何对比、迭代光学方案——反光金属表面划痕检测。无论是抛光不锈钢、阳极氧化铝还是镀铬件,这个任务至少有这么四种完全不一样的打光思路。
4.1 方案A:高角度环光——为什么它不适合(对照组)
高角度环形光下,金属表面的镜面反射会形成大面积亮斑,因为镜头刚好收到的是反射光线,整个画面呈现一种均匀“银亮”的效果。划痕在镜面反射下亮度差异很小。
实验数据:划痕深度20μm,灰度差往往只有5~10个灰阶,肉眼都费劲,算法如果强行提取,误检率高得无法量产。所以这个方案被当成对照组,用来让团队统一认知:不要在高反表面无脑用高角度环光。
4.2 方案B:低角度条光——用阴影扯出划痕的立体感
从垂直于划痕走向的单侧或者双侧,用低角度条光照射,划痕这种浅槽会把光线散射到与镜面不同的方向,在暗背景上形成一条亮线或者黑线。实测当入射角压到15°左右时,划痕灰度差可以拉到80~120个灰阶,对比度非常有冲击力。
这个方案的优点是结构简单、实施成本低;缺点是对划痕方向有强烈选择性——如果划痕是360°任意方向的,单方向条光会漏检那些走向与光轴平行的划痕。解决办法是用两组互相垂直的条光,分别曝光合成,或者用多角度环状低角度光(俗称“低角度环光碗”)。
4.3 方案C:同轴+偏振——压掉耀斑,保住真实纹理
镜面反光的本质是偏振状态基本不变的光,而漫反射光(含划痕散射)会明显改变偏振态。因此,在光源前加偏振片,镜头前加检偏器,两者偏振方向互相垂直(一般是正交消光模式),就能挡掉大部分镜面反射,只保留表面漫反射成分。
实际效果:高光耀斑大幅消退,表面氧化花纹和划痕同时显现,但画面整体会偏暗。所以要用高亮光源(同轴光/平行光)补偿。偏振方案的缺点是成本上升,并且偏振片老化快,需要定期更换。
4.4 方案D:分时曝光合成——多种光一起上
工业视觉领域常常会遇到“既要划痕,又要压花纹理”的多特征需求,而单一光照很难兼顾。分时曝光合成是当前深视觉检测中最常用的思路:
- 在同一工位布置两种以上光源(低角度光和同轴偏振光可选其一)。
- 相机采用全局快门,通过控制器让不同光源在同一帧曝光的不同时间点亮(如20μs的曝光时间拆成两个10μs)。
- 后期把不同光照下的图像分别处理,再融合特征。
这个方案的好处是“鱼和熊掌兼得”,但控制系统复杂度上升、光源功率要求更高,且两幅图需要对像素级对齐。如果产线运动速度很快,建议考虑使用双相机分别拍两种光,避免曝光窗口太短导致光强不足。
4.5 怎么选?一个小型评估矩阵
我自己做光学评估时,会列一张简单表,把方案对应的特征对比度、干扰程度、结构成本、稳定性各打分,再结合项目节拍和预算来定方案。
| 方案 | 特征对比度 | 对划痕方向适应度 | 实施成本 | 稳定性 |
|---|---|---|---|---|
| 高角度环光 | 低 | 高(均匀但无用) | 低 | 中 |
| 低角度条光 | 高 | 低,需多方向组合 | 低 | 中 |
| 同轴+偏振 | 中高 | 中高 | 高 | 中高 |
| 分时曝光合成 | 高 | 高 | 高 | 高 |
从我的经验看,90%的情况下,低角度条光加一束同轴光的组合方案是性价比最稳的起步点,把特征验证跑通了再考虑加偏振镜提升抗干扰能力。
5. 光学验证方法论:如何在小批量中暴露90%的坑
方案做好了,不能理论上一通吹就完事,必须老老实实打样验证。光学验证做得好,后面的算法和机构问题会少一大半。这里分享一套我反复使用并完善过的验证流程,含两个重要细节:环境光隔离和来料一致性测试。
5.1 第一步:用一张棋盘格和标定板测量现场光环境
很多团队在实验室里成像效果完美,一到产线就“自我崩溃”,查下来90%是因为现场环境光干预。天窗阳光、车间照明、旁边工位的强光,都会让相机的曝光基线漂移。
我的做法是,在搭建光学系统之前,用标定板分别在现场灯全开和灯全灭时各拍一张图,对比灰度漂移量。如果光照敏感的灰度变化超过20个灰阶,就必须加装遮光罩,或者在相机前方加波长滤光片(把环境光波段滤除)。
5.2 第二步:建立“缺陷样本图谱库”
不要拿一两片完美样品就拍照验收。你需要尽可能收集每个类型的缺陷样本,每类至少20~30片,并且最好涵盖不同批次、不同来料状态。把它们摆在一起拍摄,建立“缺陷样本图谱库”用于之后对所有光学方案做横向对比。
这里有个小技巧:同一样本在多方案下留下同一位置的局部放大图。这样你可以精确比较同一个缺陷在不同光路方案下的灰度轮廓,而不仅仅是看“效果好不好”这种主观判断。
5.3 第三步:在批量一致性上做扫描测试
实验室里最容易被忽略的是“批量来料差异”。表面氧化程度、基材批次色差、加工刀的磨损状态,都会让同一类缺陷的光照响应产生变化。
我建议每个方案取10~50个样品做连续批量拍摄,并统计关键缺陷的灰度均值、标准差和最坏情况。只有最坏情况下特征依然足够明显,才算真正过光学关。千万不要对着一个“黄金样本”把参数调到最优,那是最典型的自嗨式验证。
5.4 第四步:节拍和功耗测试
光学方案确定后,还要做节拍和功耗的联调。光源在连续频闪/常亮模式下的发热情况、镜头在产线长时间运行后的热漂移程度,都是决定量产稳定性的关键。我见过一台设备运行两小时后,画面轻微模糊,原因是LED光源发热导致灯珠光通量衰减、镜头支架热胀冷缩引起焦距偏移。所以验证阶段一定要做连续8小时以上的老化测试。
6. 最后分享几个我反复踩过的细节
文章最后的这部分,我把实操中反复踩过、普通教材里不太会写的细节列出来。每一条都是用项目交付的教训换来的。
细节一:光源控制器选型别省。廉价控制器的恒流纹波大,会导致光源亮度在微秒级波动,拍摄结果出现随机条纹和闪动。这类问题极难排查——因为它和算法、机构、甚至天气都无关,就是控制器纹波惹的祸。选带恒流驱动、光隔离触发、独立通信接口的控制器,是我在做多光源分时曝光时的底线要求。
细节二:偏振片的“消光比”决定了抗反光的上限。同样标称“线偏光片”,消光比300:1和1000:1的效果差异巨大。金属反光强烈的地方,消光比不足时依然会有残余耀斑。选型时不要只看品牌,直接看消光比和透过率参数。
细节三:镜头支架尽量用整体式铝件,不要用分体锁紧件。分体支架在长时间振动后,容易出现镜头“点头”、光轴偏移。在高速产线上,一个看似无关紧要的支架松动,会导致图像边缘清晰度周期性下降,排查过程极其折磨。我后来直接要求:光学模块支架全部用CNC整体件,螺钉加弹簧垫圈,关键位置打厌氧胶。
细节四:打光角度别拍脑袋定,用光学仿真或现场快调装置先行验证。很多团队选光源角度靠经验,出现问题又靠“瞎试”。更专业做法是先用仿真软件(如LightTools、TracePro)做预研,或者在现场用快调支架微调角度并记录每个角度下的灰度变化曲线,找到最佳角度区间。
细节五:暗场光路最容易脏,保养要写进SOP。低角度和偏振类光路,因为光线贴近表面,粉尘和油污会逐渐在反光镜、透镜和偏振片上堆积,成像对比度会缓慢劣化。很多产线出现“运行三个月后检测能力下降”的问题,最后发现是光学镜片脏了。从项目交付的第一天,就应该给客户提供光学保养周期和清洁规范说明。
回头再看,机器视觉项目从立项到量产,光学永远是那个最先起决定作用、也最容易被轻视的环节。经验积累到一定阶段后,你会发现判断一个项目能不能成,看方案阶段对打光的较真程度就够了。希望这篇里那些踩坑和复盘,能让你在下一个项目里少交一点“光学学费”。