资讯动态

机器视觉概述:从打光成像到量产验收的工程链路

发布时间:2026/10/31 6:09:00 来源:尧图企业网站定制
做机器视觉这行久了最怕听到一句需求描述这个很简单拍张照判断一下好坏就行。说这话的人往往是设备工程师或者产线主管他们脑子里的画面是手机拍照加人眼判断而实际落到产线上你要面对的是打光、镜头、相机、标定、算法、通信、节拍、误判率这一整套东西。更麻烦的是好坏这两个字在人的脑子里是模糊的在视觉系统里必须变成一串确定的数字灰度差多少、边缘位置偏差几个像素、面积超过多少平方毫米算缺陷。机器视觉概述这件事听起来像是教科书第一章的内容但我见过太多项目栽在概述没想清楚上——方案做了三个月最后发现判定标准和客户理解的压根不是一回事。这一篇作为系列的开头我不打算按教材的路子讲发展史和名词解释而是按一个真实项目从需求进来、到方案成型、再到现场验收的顺序把机器视觉这件事的整体骨架摊开来讲。适合刚入行的朋友建立全局认知也适合做了几年但一直只负责某一段比如只调算法、只做电气的朋友补上上下游的盲区。看完之后你至少应该能回答三个问题这个需求能不能做、大概要花多少资源做、以及最容易死在哪一步。1. 把看翻译成可判定的量四类任务的边界在哪机器视觉的所有应用剥到最里层都是同一件事把物理世界的图像信号转换成可以判定、可以通信、可以记录的数字结论。但同样是看一眼不同任务对系统的要求能差出十倍成本。行业里习惯把它分成定位、测量、检测、识别四大类这个分法不是为了分类而分类而是因为四类任务在精度、稳定性、算法路径上的诉求完全不同混淆了类别后面的选型和预算全错。1.1 定位、测量、检测、识别四类任务对系统的要求完全不同定位解决的是东西在哪、朝哪个方向的问题典型场景是机器人抓取、贴合对位、点胶轨迹引导。这类任务的核心指标是重复性和实时性绝对精度反而常常可以放宽因为你可以用标定把系统坐标系和机械坐标系对齐。定位算法的成熟度最高模板匹配加几何拟合基本能覆盖大部分场景遇到形变、遮挡、反光才需要上更复杂的手段。它的一个隐藏难点是抓什么特征——很多人上来就整幅图做模板匹配结果产品换了个批次颜色变了就崩正确的做法是找那些跟工艺强相关、跟外观弱相关的几何特征。测量解决的是多大、多远、多高的问题典型场景是尺寸检测、间隙面差、孔位间距。这类任务对系统精度的要求最硬因为它要给数值而且要能追溯到计量体系。测量类项目必须做标定必须考虑镜头畸变、透视误差、温度漂移必须给出不确定度。我见过不少项目把测量当检测做用像素当单位报数据客户拿去跟卡尺比对一比对就差 0.05mm然后整个系统被判不合格。测量类的第一句话应该是精度要求多少、依据什么标准验收而不是用什么相机。检测解决的是有没有缺陷、缺陷在哪、多严重的问题这是四类里最难标准化的一类也是最容易扯皮的一类。因为缺陷的定义往往依赖人的主观判断划伤多深算划伤、色差多大算色差客户自己也说不清。检测项目的核心工作其实是把主观标准量化给出边界样本、给出允收限度、给出判定规则的优先级。算法本身反倒是次要的因为只要标准清晰传统算法和深度学习都有对应手段。识别解决的是这是什么、写的什么的问题典型是字符读取、条码二维码、颜色分类、工件分拣。这类任务的算法成熟度极高工程难点主要在成像质量和容错策略字符残缺、印刷偏移、背景干扰、多码同框这些都要在打光阶段解决掉大半。识别类项目最容易被低估的是异常处理——正常读出来当然简单读不出来的时候系统该报警、该重试、该放行还是该停机这套策略没设计好现场就是不停的误停。任务类型核心指标是否必须标定算法成熟度典型失败原因定位重复性、节拍需要手眼标定高特征选取不当换批次失效测量绝对精度、不确定度必须且需溯源中高忽略畸变与透视误差检测漏判率、误判率视情况中判定标准未量化识别首读率、容错策略一般不需要高成像质量与异常策略缺失1.2 同一句需求描述判定标准不同方案能差一个数量级举个我自己踩过的例子。某项目需求写的是检测表面划伤听起来是一个检测任务。第一次沟通客户说明显的划伤不能有我们就按常规思路做了暗场打光加边缘检测能抓到 0.2mm 宽以上的划痕样机跑得挺漂亮。结果验收时品质部门拿出了一份内部标准长度超过 1mm 且宽度超过 0.05mm 判不合格同时发丝状细纹即使很浅也要判。这一下子把任务从检测推到了高精度测量加分级判定0.05mm 的宽度在原有视野下只有不到 2 个像素方案直接推倒重来视野缩小一半、相机分辨率翻倍、镜头换成远心成本翻了三倍。所以概述阶段最重要的一件事是把需求里的形容词全部替换成数字。可以按这个顺序去问缺陷的物理尺寸范围是多少、位置分布在哪、允收的边界样本有没有、判定依据是国标行标还是客户内部标准、误判和漏判哪个更不可接受、这个标准在半年内会不会改。这几个问题问完任务的真实难度基本就浮出来了。问不出来的时候不要急着做方案先要样本要不到样本就要求客户提供边界样品照片连照片都没有的项目风险要写进报价里。2. 一条完整视觉链路从打光到执行机构动作的七个环节很多人学机器视觉是从算法开始的觉得算法是核心。但现场待久了会发现算法只是链条中间的一环前后任何一环出问题算法再好也白搭。一条完整的视觉链路大致是光源照射物体、镜头成像、相机光电转换、图像传输、预处理、特征提取与判定、结果输出给执行机构。这七环是串行的木桶效应极其明显最短的那块板决定整个系统的上限。2.1 光、机、电、算的顺序为什么不能颠倒调试顺序和设计顺序都应该是光机电算而不是算机电影光。原因是每一环都在为下一环提供输入质量前面的信噪比决定了后面算法的自由度。打光做好了缺陷和背景的对比度拉开后面一个简单阈值就能分打光没做好算法就得靠复杂的纹理分析和模型去硬扛开发周期翻倍稳定性还差。我习惯用一个简单的判断法拿到一张图先不看算法用肉眼看这张图里缺陷和背景的灰度差有多少。如果肉眼都要盯三秒才能看出来那这张图基本是废的不要指望算法比人眼更强。工业相机的动态范围和人眼差得远人眼能同时看清高光和暗部相机不行过曝区域的信息是永久丢失的欠曝区域的噪声会淹没细节。所以先把图拍好这件事的优先级永远高于换个更强的算法。反过来说光学设计也不是越贵越好。有时候客户要求用最顶级的镜头和光源方案但实际产品公差很大、缺陷很明显用普通环形光加中端镜头就足够多花的钱应该放到机械稳定性和标定上。判断标准是系统的误差预算里成像环节占多少、机械环节占多少、算法环节占多少把预算花在占比最大的那块。2.2 触发与同步看不见的时序才是现场事故高发区链路里最容易被新人忽略的是时序。视觉系统什么时候拍照不是随时拍而是必须和运动严格同步。常见做法是编码器或光电传感器给触发信号相机收到触发后曝光曝光期间物体必须相对静止或者位移在允许范围内然后图像传回、处理、输出结果整个周期必须赶在下一个工件到位之前完成。这套时序里最常见的三个坑第一触发信号抖动光电传感器的响应时间加上 PLC 扫描周期可能让实际拍照位置每次差几个毫米对定位任务直接致命第二曝光时间与运动速度不匹配物体在曝光期间移动超过一个像素图像就是糊的后面所有精度都免谈第三处理时间超节拍样机上跑 80ms现场加了日志、加了通信握手、加了 UI 刷新变成 150ms节拍就跟不上了。处理这类问题的办法是把时序画成一张时间轴把每一段的耗时标出来包括传感器的响应延迟、PLC 的扫描周期、相机的曝光加读出时间、传输时间、处理时间、输出 IO 的响应时间最后留 20% 到 30% 的余量。这张时间轴要在方案阶段就画不能等现场调试再发现。我个人的经验是凡是节拍余量小于 20% 的项目现场一定会出问题因为产线的实际节拍往往比标称的更紧。3. 光源与镜头项目成败在拍下第一张图之前就定了如果把机器视觉项目按投入产出比排序光源绝对排第一。几百块的光源选对了能省掉几万块的算法开发和几个月的调试光源选错了后面所有环节都在跟噪声搏斗。镜头同理它是唯一一个把物理世界的光信号编码进传感器的器件选错了就是先天缺陷算法补不回来。3.1 五种基础打光方式的适用与反例环形光是最常见的安装方便适合大部分平面字符和一般外观检测但它的反例是镜面或者高反光表面会在正中央形成一块高光斑把缺陷盖掉。遇到这种情况要么改成低角度环形光把高光挪到边缘要么上偏振片压反光。低角度暗场光是划伤、凹坑、毛刺这类微小起伏缺陷的首选原理是光线以很小的角度掠射平整表面不反射进镜头只有缺陷的斜面把光反进镜头所以缺陷在暗背景上亮起来对比度极高。它的反例是表面本身有纹理或者有油污这些也会被点亮成一片噪声此时要考虑加纹理抑制或者换方案。背光是最稳的一种把物体放在光源和镜头之间得到的是纯剪影边缘对比度极高适合尺寸测量、轮廓检测、缺件漏件。它的限制是只能看轮廓看不到表面信息而且需要机械上留出安装空间很多产线改造成本高就是因为塞不进背光板。同轴光专门对付镜面、晶圆、金属抛光面这类高反光平面的表面缺陷光路和镜头同轴反射回来的是正反射光表面平整则整片均匀有缺陷则局部变暗。它的反例是曲面和倾斜面稍微一斜亮度就掉一大截。偏振光不是一种独立的打光方式而是一种手段用来压制塑料、玻璃、金属表面的反光和内部应力纹。做法是光源前加起偏片、镜头前加检偏片旋转到反光最弱的角度。它的坑是亮度会损失一大半需要相应提高光源功率或者延长曝光。打光方式最适合典型反例成本量级环形光字符、一般外观、平面件镜面高光遮挡缺陷低低角度暗场划伤、毛刺、凹坑表面纹理、油污干扰低中背光尺寸、轮廓、缺件需表面信息、空间受限中同轴光镜面、抛光面缺陷曲面、倾斜面中高偏振压反光、应力纹亮度损失大中3.2 镜头选型的三步计算与被忽略的畸变、景深问题镜头选型不要凭感觉三步就能算清楚。第一步算放大倍率倍率等于传感器尺寸除以视野尺寸比如传感器宽 8.8mm、视野宽 100mm倍率就是 0.088。第二步算焦距焦距约等于工作距离乘以倍率再除以1 加倍率代入上面的数工作距离 300mm焦距约等于 300×0.088/1.088约 24mm选 25mm 标准焦距即可。第三步校验分辨率匹配镜头的解析力要能支撑传感器的像素密度如果相机是 2000 万像素配一个老式低解析力镜头实际成像会糊成 500 万像素的效果。比计算更容易出事的是两个隐性参数。一个是畸变广角镜头和短焦镜头的桶形畸变能到百分之几虽然可以用软件校正但校正会引入插值误差测量类项目必须优先选低畸变镜头或者远心镜头。远心镜头的特点是放大倍率不随物距变化对高度波动不敏感代价是贵、体积大、工作距离固定一般只在测量精度要求高的场合用。另一个是景深。景深跟光圈、倍率、允许模糊圈都有关系粗略的公式是景深约等于 2 乘以光圈系数乘以允许模糊圈除以倍率的平方。倍率 0.088、光圈 F8、允许模糊圈 0.04mm 的情况下景深大约 0.8mm。这意味着如果产品在视野内的高度起伏超过 0.8mm边缘就会开始虚。很多项目现场发现同一个产品放左边清楚放右边模糊就是景深不够加上工作距离不对。解决方法要么缩小光圈牺牲亮度、要么降低倍率牺牲精度、要么加自动对焦或者用远心镜头。4. 相机与采集参数分辨率、帧率、快门和接口怎么算相机选型是新人最容易堆参数的地方觉得像素越高越好、帧率越快越好。实际上分辨率和视野、精度是一组耦合关系帧率和带宽、处理能力是一组耦合关系任何一项单方面拉高都会在其他地方付出代价。4.1 从像素精度倒推分辨率三个算例基本思路是反过来的先确定要检出的最小特征尺寸再确定需要几个像素覆盖这个特征得出像素精度再用视野除以像素精度得到所需分辨率。经验上稳定检出需要 3 到 5 个像素覆盖特征边缘定位用亚像素算法可以放宽到 2 到 3 个像素但要保证对比度足够。算例一外观检测最小缺陷 0.1mm要求稳定检出取 4 像素覆盖像素精度 0.025mm视野 100mm×80mm所需分辨率 4000×3200也就是 1300 万像素级别。这个数字一出来成本和数据量的问题就跟着来了。算例二尺寸测量需要测 50mm 的长度公差 ±0.02mm要求测量不确定度优于公差的十分之一也就是 0.002mm。这时候单纯堆像素不划算正确做法是缩小视野到 60mm 左右用 500 万像素2448×2048像素精度约 0.025mm再靠亚像素边缘算法做到 0.005mm 左右的重复性加上标定和温度控制整体不确定度能压到 0.01mm 以内满足要求且成本可控。算例三读码识别码的最小模块尺寸 0.15mm识别一般要求 3 像素以上覆盖一个模块像素精度 0.05mm 就够视野 80mm 对应 1600 像素宽200 万像素相机绰绰有余。这时候如果还去上 2000 万像素除了增加数据量和处理时间没有任何收益反而因为单像素感光面积变小导致信噪比下降。4.2 快门、曝光与运动模糊、带宽瓶颈快门分全局快门和卷帘快门。卷帘快门是逐行曝光的物体在运动时会产生倾斜或者果冻效应静态拍摄没问题动态拍摄一定选全局快门。工业相机大部分是全局快门但一些高分辨率、高像素密度的型号为了成本会采用卷帘选型时务必确认。我见过一个高速传送带上的项目用了卷帘快门相机静止标定时一切正常一开线产品全部歪了找了半天才意识到是快门类型的问题。曝光的计算跟运动直接挂钩。允许的运动模糊一般控制在一个像素以内曝光时间就等于像素精度除以运动速度。传送带速度 200mm/s像素精度 0.05mm曝光时间必须小于 0.25ms。这个时间非常短意味着光源必须足够亮或者用频闪光源在曝光瞬间提供高亮度。很多项目现场发现开快了就糊本质就是曝光时间没跟着速度调整或者光源亮度不够导致相机自动加长曝光。带宽是最容易被忽略的瓶颈。图像数据量等于像素数乘以位深再乘以帧率。500 万像素、8 位、30 帧数据量是 150MB/s。千兆网口的实际有效带宽大约 110 到 120MB/s直接跑不动要么降帧率、要么换万兆网口或者更高带宽的接口、要么在相机端做 ROI 裁剪只传感兴趣区域。这个账要在选型阶段算清楚不能等现场发现丢帧再回头改。5. 算法选型规则算法与深度学习的真实分界线这几年深度学习在视觉检测里普及得很快导致一个普遍现象新人上来就想用深度学习觉得传统算法过时了。实际项目里传统规则算法依然承担着大部分工作量原因很简单它可解释、可调试、样本需求少、运行速度快、出问题能定位到具体哪一步。深度学习是强大的补充手段不是替代品。5.1 什么时候坚决用传统算法判定条件很清晰缺陷或特征有明确的几何或灰度定义、形态稳定、背景可控、样本量少、需要给出可解释的判定依据。比如尺寸测量、孔位检测、字符识别、有无判定、颜色分类这些用传统算法又快又稳。传统算法的核心工具箱其实不大灰度阈值分割、形态学处理、连通域分析、边缘检测加亚像素拟合、模板匹配、几何测量。把这几个工具组合好能覆盖七八成的常见需求。关键在于参数的可维护性——一个项目交付之后产线换批次、换供应商、换环境光参数要能跟着调。所以我写传统算法时有个习惯把阈值、面积上下限、匹配分数这些关键参数全部做成配置项并且在界面上留出可视化调试入口让现场工程师能自己微调而不是每次都要找开发。传统算法的软肋是形态多变的缺陷。划伤的方向、长度、深浅每次都不同纹理类的脏污边界模糊这时候规则怎么写都写不全漏判误判一起上来就到了深度学习的适用区。5.2 深度学习进场的前提条件与维护成本深度学习不是有了模型就完事它有一套硬前提足够的样本量、足够一致的标注、足够的算力、以及可持续的迭代机制。样本量没有固定数字但经验上分类任务每类几百张起步分割任务每个缺陷类型几十张到上百张异常检测类可以只用良品训练样本需求量相对小。标注一致性是最容易被低估的成本。同一个缺陷三个标注员标出三种边界模型学出来必然是糊的。所以标注规范要先于标注工作存在缺陷的边界怎么定、临界样本标不标、一张图多个缺陷怎么处理这些要写成文档并且做一致性校验。我一般的做法是先标 50 张交叉复核把分歧点拿出来讨论定标准再批量标。部署之后还有维护成本。模型不是一劳永逸的产线工艺变了、材料换了、光照老化了模型的准确率都会漂移。要建立一套机制定期抽检、记录误判样本、按批次回灌重训、版本管理。没有这套机制的项目前三个月效果很好半年后误判率飙升然后就没人敢用了。这一点在方案阶段就要跟客户讲清楚把维护写进合同否则后期扯皮。对比维度传统规则算法深度学习样本需求极少几张即可数十到数百张每类可解释性强可定位到具体算子弱需可视化辅助形态多变缺陷弱强运行速度快毫秒级依赖算力需 GPU 或加速维护方式调参回灌重训加版本管理典型适用测量、定位、识别、有无复杂外观、纹理、异常检测实际项目里最常见的架构是混合传统算法做定位和 ROI 提取把图像裁到缺陷区域再送进模型做分类或分割最后用规则做后处理和判定。这样既保证了速度和稳定性又拿到了模型的泛化能力。6. 精度账本把需求拆成误差预算再谈能不能做客户说要准这句话没有信息量。可执行的说法是测量值的重复性优于多少、与标准器比对的偏差小于多少、在什么温度范围内保持、验收用几件样品、判定用 GRR 还是 CPK。这些定下来才能谈方案定不下来方案就是赌博。6.1 误差来源清单与合成方式一个视觉测量系统的总误差大致来自这几块成像误差镜头畸变、景深不足导致的模糊、传感器噪声、标定误差标定板精度、标定点数量与分布、标定算法的拟合残差、机械误差工件定位重复性、相机安装刚性、运动机构回程差、环境误差温度引起的热胀冷缩、环境光变化、振动、算法误差边缘提取的亚像素精度、拟合模型与实际形状的偏差。合成方式上如果是相互独立的随机误差按平方和开根号合成如果是系统性偏差直接线性叠加。实际工程里更实用的做法是做一张误差预算表把每一项的量级估出来看哪一项占主导。比如镜头畸变贡献 0.03mm、机械重复定位贡献 0.02mm、算法亚像素贡献 0.005mm那优化重点显然是镜头和机械把算法从 0.005 优化到 0.003 毫无意义。温度这一项经常被完全忽略。铝件的线膨胀系数大约是每摄氏度百万分之二十三一个 100mm 的工件温度变化 10 度长度就变了 0.023mm。如果你的公差是 ±0.02mm环境温度不稳定就意味着永远测不准。这种项目的正确做法不是提高相机分辨率而是加恒温或者做温度补偿或者在恒温条件下标定并控制车间温度。6.2 用 GRR 和 CPK 验收别用看起来准验收环节最常见的扯皮是我觉得不准。避免扯皮的办法是提前约定验收方法。测量系统重复性与再现性GRR是行业里比较通用的方法选 10 个覆盖公差范围的样品让 2 到 3 个操作员各测 2 到 3 次打乱顺序盲测算出来的变异占公差的比例小于 10% 算优秀10% 到 30% 有条件接受超过 30% 不可用。这个方法的好处是把人的差异也考虑进去了因为换个人操作、重新装夹结果可能就不一样。过程能力指数CPK则是从产线角度看的系统测出来的数据分布相对于公差带的宽度和中心偏移。CPK 大于 1.33 通常被认为是过程能力充足。这个指标对视觉系统提出的要求比 GRR 更全面因为它同时反映了测量能力和实际工艺的波动。我的建议是在方案阶段就把验收方法写进技术协议用什么标准器、几件样品、谁操作、判定阈值多少、不通过怎么处理。这一步做扎实后面能省掉无数争论。7. 从打样到量产验证节奏里的几个硬道理概述的最后一部分讲讲项目节奏。机器视觉项目最典型的失败模式不是技术做不出来而是样机上好好的量产后废了。原因往往不是算法退化而是验证阶段覆盖的样本不够、场景不够、时间不够。7.1 一台样机验证不了需要的是样本矩阵打样阶段客户通常给几个典型良品和几个典型不良品用这些样本调出来的方案本质上是在拟合这几张图。真正要验证的是样本矩阵不同批次、不同供应商、不同环境光、不同工件温度、不同装夹姿态、边界良品刚刚在允收边缘的、临界不良品刚过线的。这个矩阵至少要有几十到上百件覆盖实际生产的波动范围。我一般的做法是要求客户提供最近三个月的生产留样从中按批次抽样再加上品质部门判过的边界样本。如果客户拿不出来那就把风险明确写进方案本方案基于提供的 XX 件样品验证未覆盖批次差异与边界样本量产初期需要预留调试窗口。这句话写在纸上比事后解释有用得多。还有一个容易被忽略的点是时间维度的验证。光源会老化、镜头会积灰、相机传感器的暗电流会随温度漂移、机械会有磨损。所以除了静态样本验证还要做连续运行测试跑个几万次看判定结果有没有漂移看看光源连续点亮几小时后亮度衰减多少。这些数据在实验室里花两天能拿到在现场可能要花两个月才能暴露。7.2 节拍、误判率与漏判率的三方博弈几乎所有视觉项目都要在这三个指标之间做取舍。提高灵敏度降漏判误判就上来放宽判定降误判漏判风险就增加想两个都降就得加时间做多帧、多角度、多光源融合节拍就受影响。正确的做法是先明确业务上的优先级。安全件、功能件漏判的代价远大于误判那就倾向严格判定接受一定的误判率用人工复检兜底。外观件、装饰件误判造成的停线成本很高那就倾向宽松允许少量流出。这个优先级必须由客户方拍板而且要写下来因为项目后期一定有人会拿另一个指标来说事。节拍方面我的经验是把处理时间控制在可用节拍的 60% 以内。剩下的 40% 要留给通信握手、异常处理、日志记录、界面刷新以及未来可能的算法升级。很多项目在样机上把处理时间压到极限看起来很漂亮结果现场加了日志和报警逻辑就爆了然后被迫降功能用户满意度直线下降。最后分享一个我在概述阶段必做的动作把整个系统画成一张框图标出每一个输入输出、每一个耗时环节、每一个可能的失效点然后逐个问这里出问题会怎样。这张图不用给别人看是给自己看的画完之后方案的风险点基本就清楚了。做了这么多年凡是跳过这一步的项目后面总会在某个意想不到的地方被绊一下。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑