工业缺陷检测视觉系统选型:光源、相机与算法全攻略
简介机器视觉工业缺陷检测的那些事是一份面向工业质检与机器视觉入门/进阶者的技术总结型PDF系统梳理视觉检测系统的基本组成围绕硬件选型、图像处理分析和数据管理三部分展开。文档重点讲解了光源分类与照明方式的选择原则、工业相机与镜头及图像采集卡的选型要点并介绍了边缘检测、模板匹配、灰度变换等常用算法以及常见算法库的适用场景可帮助读者在尺寸测量、表面划痕检测、Logo识别等实际任务中快速建立方案思路。内容还结合金属/塑料制品划痕、PCB焊点、玻璃杂质、纸张色差等典型缺陷场景给出了光源颜色、照射角度与相机参数的实际选型思路。整个资源为1个PDF文件压缩包大小1.26MB便于下载后随时查阅。发布至今已有1188人学习浏览适合作为机器视觉缺陷检测领域的入门参考和内部技术分享素材。1. 机器视觉工业缺陷检测先定光源再谈相机和算法去年部门接到一个手机壳表面划痕检测的需求团队一开始把精力全压在算法选型上结果在实验室里换了好几轮 Halcon 和 OpenCV 的算子图像始终不稳定。后来一位做视觉集成多年的同事一句话点醒了我你们的光源方案就没定换什么算法都白搭。我花了两周时间把整个工业缺陷检测的知识链——光源、相机、镜头、采集、算法、软件——从头到尾梳理了一遍才发现这个行业真正的决策顺序和大多数人想的相反打光方案决定图像质量的上限相机镜头决定分辨率的下限最后才轮到算法。这篇就把我梳理出来的每个环节的判断依据、计算公式和踩过的坑写下来正要搭视觉检测方案的人或者选型选到一半卡住的人可以直接对照着排。2. 光源选型打光定生死三种光源与四种照明方式怎么选2.1 为什么说打光是基础而不是相机做工业缺陷检测的人常挂在嘴边一句话光源是基础打光是艺术。我第一次听到以为是在夸张直到自己上手调试才明白一个好的打光效果基本决定了视觉检测成功的一大半。原因很直接光源的合理性选择直接决定了输入图像数据的质量图像质量又直接决定了后续算法的处理难度和稳定性。同样的相机和镜头打光角度差一点缺陷的对比度可能就从清晰变成可见、再变成不可见。算法再强也救不回过曝、欠曝、反光严重或者阴影压在缺陷上的图。我一般会这么比把整个视觉系统看成一条流水线光源是第一道工序它的输出是图像。图像上缺陷和背景的灰度差不够后面的分割、特征提取、分类全都是在噪声里找信号。所以选型的第一步不是打开相机参数表而是先回答三个问题被测物是什么材质、反不反光要突出的是轮廓还是表面细节现场环境光干扰有多大。三个问题答完光源方案基本有方向了。2.2 三种常见光源的寿命、亮度与响应速度权衡工业现场最常用的是可见光光源其中 LED 灯、萤光灯、光纤卤素灯三者的特性差异非常明显选错一个后面就要不停补偿。光源类型使用寿命优点缺点常见场景LED 灯约 10000-30000 小时可组合成不同形状达到高亮度响应速度快波长可按需选择制成不同颜色单颗亮度有限需要多颗组合大多数静态与动态检测最通用萤光灯约 1500-3000 小时扩散性好适合大面积均匀照射响应速度慢亮度较暗大范围均匀照明光纤卤素灯约 1000 小时亮度高响应速度慢光亮度和色温变化小需要高亮度的特殊工位实际选的时候我优先考虑 LED因为它的响应速度快意味着可以配合频闪照明做高速检测波长可选又给了颜色对比度的调节空间。萤光灯在很多老设备上还在用但新项目已经很少碰了。卤素灯亮度高但寿命只有 LED 的十分之一维护成本算下来不划算。照射方式上背向照明是被测物放在光源和相机之间图像效果是黑白分明的轮廓常用于尺寸测量前向照明是光源和相机在被测物同侧便于安装主要用于检测表面细节、缺陷和划痕结构光照明把光栅或线光源投射到物体上通过畸变解调三维信息频闪光照明则是高频率光脉冲配合相机同步应对高速运动场景。这里有个常见误区有人做尺寸测量用了前向照明结果边缘因为反光和阴影发虚怎么调阈值都切不干净。换背向照明以后轮廓立刻清晰了。2.3 穹形、环形、条形、同轴四种照明形式怎么选照明形式的选择要结合被测物的形状、材质和要突出的特征。我把最常用的几种整理成一个速查表照明形式图像效果典型适用场景穹形光源均匀漫射背景柔和球型或曲面物体缺陷、金属或镜面表面检测如玻璃瓶、滚珠、铝制容器环形光源环形高光字符和边缘清晰集成电路料带与管脚字符、金属工件刻印字符、光滑表面划痕、瓶口尺寸或裂痕条形光源45° 侧光避免正面强反光边缘高亮LCD 缺陷、包装文字、包装膜破损、纸张质量、常规印刷质量、裂纹检测同轴光源明亮背景上的黑色特征增强纹理反光厉害的平面如金属玻璃划痕、芯片硅片破损、冲压字符、线路板焊点条形光源我单独说一句它是尺寸测量和外观检测里应用最广的照明方式之一。侧面 45 度打光可以避免正面照射产生的强烈反光同时对边缘部分实现高亮照明很多包装和纸张的缺陷检测都用它。同轴光源则特别适合反光平面它能加强有差异角度的表面特征比如划痕、凹陷、压印同时减少阴影——但要注意它的图像是亮背景上的黑色特征和普通前向照明的直觉相反第一次用的人容易把黑白关系搞反。此外高角度照射图像整体偏亮适合表面不反光的物体低角度照射图像背景为黑、特征为白能突出轮廓和表面凹凸变化多角度照射效果柔和适合曲面物体。2.4 颜色、形状、漫射三个实用判断维度光源颜色和背景颜色的关系是一条非常实用的经验使用与被测物同色系的光会使图像变亮比如红光让红色物体更亮使用与被测物相反色系的光会使图像变暗比如用蓝光照射黄色物体会呈现黑色。这就是通过颜色拉对比度的底层逻辑。波长方面波长越长穿透能力越强红外适合检测透光性差的物体比如棕色口服液里的杂质检测波长越短扩散能力越强、对表面细微特征更敏感紫外适合对比度不够明显的地方比如食用油瓶上的文字检测。形状的选择相对简单通常情况下选用与被测物体形状相同的光源比如圆形的测圆形工件、条形的测长条物料最终效果以实测为准。光源尺寸上要求保障整个视野内光线均匀比视野略大一点是比较稳的选择。至于漫射光源只要被测物表面反光我基本都会优先考虑。多角度漫射照明能让表面整体亮度均匀、图像背景柔和检测特征不会受到背景干扰。换句话说你拍的物体越像镜子就越需要漫射。3. 相机选型从精度反推参数八参数速查与 CCD/CMOS 之争3.1 先想清楚检测任务再打开参数表相机选型最忌讳一上来就比像素因为像素只是参数表里的一个数字真正决定选型的是检测任务。我一般先把任务拆成几个问题是静态拍照还是动态拍照拍照频率是多少做的是缺陷检测、尺寸测量还是定位产品大小也就是视野范围是多少需要达到的精度是多少软件性能跑不跑得动现场环境温度、湿度、干扰和光照情况如何有没有特殊要求。这些答案问完相机的分辨率、帧率、曝光方式和接口类型基本都确定了。如果是动态拍照还要多算一步运动速度根据速度选择最小曝光时间同时判断是否需要逐行扫描的相机。相机的帧率也就是最高拍照频率跟像素数是绑定关系通常分辨率越高帧率越低不同品牌的同规格相机帧率也略有不同。所以高精度和高速度在相机选型里是一对需要权衡的矛盾后面计算实例里会看到这个矛盾怎么量化。3.2 八个核心参数哪些决定能不能用哪些决定好不好用相机的主要参数有八个分辨率、速度帧频/行频、噪声、信噪比、动态范围、像元深度、光谱响应、光学接口。我的判断方法是把参数分成两类分辨率、速度、接口决定能不能用是硬指标噪声、信噪比、动态范围、像元深度、光谱响应决定好不好用是品质指标。分辨率是芯片靶面排列的像元数量面阵相机用水平垂直表示比如 1920(H)x1080(V)前面的数字是每行像元数后面是行数。现在也叫多少 K1K 是 1024、2K 是 2048。同样的视场分辨率越高细节越明显。速度方面面阵相机用帧频 fps比如 30fps 就是一秒最多采 30 帧线阵相机用行频 KHz12KHz 就是一秒最多采 12000 行。运动物体成像必须满足速度要求这是硬约束。噪声方面欧洲标准 EMVA1288 把噪声分成两类一类是有效信号带来的泊松分布统计涨落噪声也叫散粒噪声任何相机都有、不可避免另一类是相机自身固有的与信号无关的噪声由读出电路、信号处理与放大电路带来每台都不一样。数字相机还有模数转换产生的量化噪声量化位数越高噪声越低。信噪比是有效信号平均灰度值与噪声均方根的比值代表图像质量越高越干净。动态范围是饱和曝光量与噪声等效曝光量的比值可以用倍数、dB 或 Bit 表示它衡量相机对光照强度的适应能力光照变化大的现场优先选大动态范围。像元深度是数字输出的灰度位数黑白相机通常在 8-16bit8bit 有 256 个灰阶10bit 有 1024 个12bit 有 4096 个。光谱响应是相机对不同波长光线的响应能力通常用光谱曲线表示可见光相机响应 400nm-1000nm、峰值在 500nm-600nm红外相机在 700nm 以上紫外相机可以响应 200nm-400nm 的短波。注意像元深度不是越高越好从 8bit 升到 12bit 确实增强测量精度但同时降低系统速度、提高集成难度线缆增加、尺寸变大这个代价要在项目里算清楚。3.3 分辨率计算实例为什么一个像素对应一个缺陷必翻车原文里给了一个非常经典的算例我直接复述一遍假设要检测一个 108mm 物体表面的划痕要求检测精度 0.01mm拍摄视野范围设为 1210mm。那么相机最低分辨率应该选多少计算逻辑是# 视野与精度反推相机最低分辨率 fov_w, fov_h 12, 10 # 视野范围单位 mm precision 0.01 # 检测精度单位 mm # 最低分辨率每个像素对应 0.01mm pixels_w fov_w / precision # 1200 pixels_h fov_h / precision # 1000 base_resolution pixels_w * pixels_h # 120 万像素 # 但一个像素对应一个缺陷极不稳定缺陷面积至少占 3~4 个像素 stable_resolution base_resolution * 3 # 约 360 万 print(f最低分辨率约 {base_resolution/10000:.0f} 万像素) print(f稳定方案约需 {stable_resolution/10000:.0f} 万像素市面常见取 300 万)算出来最低分辨率是 120 万像素市面上常见 130 万像素的相机看上去够用。但实际问题是如果一个像素就对应一个缺陷那系统一定会极不稳定——图像里随便一个干扰像素点都可能被误认为缺陷。所以在工程上我习惯让缺陷面积占到 3 到 4 个像素以上这样 130 万乘 3最低不能少于 300 万像素通常取 300 万像素为最佳。有人会抱着亚像素不放说要做零点几亚像素精度那确实可以不用这么高分辨率但亚像素是算法层面的细分前提是图像本身已经清晰稳定硬件基础不能省。3.4 CCD 还是 CMOS动态和静态要分开看别被老经验带偏工业相机按芯片类型分 CCD 和 CMOS 两大类这是选型里争论最多的地方。CCD 叫电荷耦合器件本质上是一种把图像半导体中出来的电子有组织地储存起来的方法CMOS 叫互补金属氧化物半导体把光敏元件、放大器、A/D 转换器、存储器和接口控制电路集成在一块硅片上。两者的差异可以整理成一张表对比项CCDCMOS图像质量高灵敏度高、对比度高一致性稍差光灵敏度一般噪声相对低相对大功耗较高低像素访问不能直接访问每个像素能直接访问单个像素支持 AOI 局部读出Blooming 现象有没有动态范围一般可达 120dB帧率受限于读出方式可更高AOI 下优势明显价格较贵便宜适用场景高速动态测量低速或静态测量全局曝光 CMOS 也可用动态从这张表能看出一个清晰的结论CCD 的优势在成像质量适合高速动态测量CMOS 胜在集成度、功耗、价格和灵活的读取方式适合低速动态或静止场景。但现在有一个重要的变化全局曝光的 CMOS 已经可以用于动态测量而且随机读取特性让它对较小的 ROI 区域可以获得更高帧率填充因子低的问题也可以通过微镜来提高。从趋势上看CCD 目前还是主流但 CMOS 正在赶上而且 CMOS 是未来。新项目如果预算允许我一般建议直接考虑全局曝光 CMOS别被CCD 一定更好的老经验带偏。相机的输出信号接口也要一并考虑主要有 USB2.0、IEEE1394、CameraLink、GigE 等。其中 GigE 和 USB3 现在最省事直接网线或数据线进主机不需要额外装采集卡CameraLink 虽然稳定但需要专用采集卡成本和复杂度都高。图像采集卡的主要功能是 A/D 转换、图像传输、采集控制和部分 FPGA/DSP 图像处理随着计算机速度和接口速度提升独立的视觉处理器已经用得很少了这个趋势选型时要心里有数。4. 成像链路选型镜头接口、焦距公式与快门拖影计算4.1 焦距、视场、工作距离三个必须先定的量镜头的选择必须和相机、光源放在一起考虑因为它决定了最终成像的视野、清晰度和畸变水平。先把三个核心概念理清视场FOV是观测物体的可视范围也就是充满相机采集芯片的物体部分工作距离WD是从镜头前部到被测物体的距离即清晰成像的表面距离焦距f是透镜光心到光聚焦焦点的距离。这三者的关系是镜头选型的基本框架。焦距有一个重要公式f 工作距离 / 视野范围长边× CCD 长边。举例如果工作距离是 200mm、视野长边是 50mm、相机靶面长边是 6.4mm那焦距就是 200/50×6.425.6mm选 25mm 定焦镜头比较合适。视场角可以通过 Yf×tanθ 估算比如 1/2 寸摄像机配 12.5mm 镜头时画面横向视场角大约是 28.72°。这些计算都不复杂但我在实际项目里见过不少人跳过这一步凭感觉配镜头结果装上去发现视野不对要么拍不全要么浪费分辨率。工作距离还要确认是否可调以及现场有没有安装空间。这个问题在改造项目里特别常见——方案图上工作距离留了 300mm实际设备里前面挡着一个气缸镜头根本装不到位。所以在镜头选型阶段就要把安装空间作为一个硬约束提出来而不是等机械设计完成后再回头改镜头。4.2 景深、光圈、接口镜头和相机怎么配才能不返工镜头参数里最容易忽略的是靶面尺寸匹配。镜头尺寸不能小于相机芯片尺寸一定要大于或等于相机芯片尺寸。比如 2/3 英寸镜头支持的最大相机靶面是 2/3 英寸它不能支持 1 英寸以上的相机装上去边缘直接发黑这就是靶面不匹配的典型症状。另一点相对反直觉同样视野下视野越小分辨率越好而镜头本身的成像质量受结构、材质、加工精度影响同档次的固定焦距镜头比变焦镜头分辨率高短焦镜头一般边缘分辨率比中心低长焦镜头则相反。光源的光波波长也影响分辨力波长越短分辨率越高所以精密尺寸测量系统尽量采用短波长的单色光照明。景深DOF是物体离最佳焦点较远或较近时镜头保持所需分辨率的能力。三个关键规律光圈越小景深越大拍摄距离越大景深越大焦距越短景深越大。有景深特殊要求的项目要了解清楚再选。光圈和 F 值的关系则是光圈越大图像亮度越高、景深越小、分辨率越高。所以高精度和高景深在光圈上是矛盾的需要在项目里做权衡。接口匹配是一个容易翻车的地方先看一张表接口类型后截距接口形式C 口17.526mm螺口CS 口12.5mm螺口F 口46.5mm卡口C 与 CS 接口的区别在于镜头与摄像机接触面至镜头焦平面的距离不同。配合规则是C 型镜头与 C 型摄像机、CS 型镜头与 CS 型摄像机可以配合使用C 型镜头与 CS 型摄像机之间加一个 5mm 的 C/CS 转接环可以配合使用CS 型镜头与 C 型摄像机则无法配合。F 口是通用型接口一般适用于焦距大于 25mm 的镜头焦距小于 25mm 的镜头尺寸不大通常采用 C 型或 CS 型接口。M42 接口源于更高端的摄像标准相机的 Z 轴通常依据适配器优化过一般情况下不要轻易拆卸镜头适配器。另外光学放大倍数的计算公式是 PMAG CCD Size / FOV也就是感光芯片尺寸和视野的比率。在显微应用中还用显示放大倍率等于镜头光学倍率 × 显示器尺寸 × 25.4 / 靶面对角线尺寸。选镜头时还需要问清楚客户对视野、放大倍数、工作距离、景深、芯片大小和接口、安装空间的要求在方案可选择的情况下尽量让镜头去适应设备尺寸而不是让客户改设备。4.3 快门速度计算运动物体不拖影的底线动态检测里最常见的翻车场景是拖影物体在快门时间内移动超过一定像素图像就糊了缺陷边缘全是残影。工程上的经验线是物体在快门时间内的运动大于 1.5 个像素就会产生可感知的拖影。所以快门时间的上限可以用一个公式算t快门≤ 像素当量 × 1.5 / 运动速度。拿原文的例子里假设速度是 0.5m/ssensor 为 640×480 分辨率视场是 4.2×3mm。先算像素当量长方向 4.2mm/6400.00656mm短方向 3mm/4800.00625mm取更严格的短方向 0.00625mm。代入公式# 快门速度下限估算 speed 0.5 * 1000 # 运动速度 0.5m/s 换算为 500mm/s fov_w, fov_h 4.2, 3.0 # 视场 4.2x3mm res_w, res_h 640, 480 # 分辨率 px_w fov_w / res_w # 长方向像素当量 0.00656mm px_h fov_h / res_h # 短方向像素当量 0.00625mm px min(px_w, px_h) # 取更严格的值 t_max px * 1.5 / speed # 单位为秒 print(f像素当量 {px:.5f}mm快门需 ≤ {t_max:.8f}s ≈ {t_max*1e6:.1f}μs)算出来快门必须小于等于 0.00001875s也就是 18.75 微秒。这个数值意味着光源照度必须非常高否则图像会暗到没法看。这就是我反复强调光源和相机要一起定的原因——很多项目算完快门才发现光源功率不够再回头换光源工期就耽误了。另一个常见误区是把像素当量和精度混为一谈实际计算时取两个方向里更小的像素当量因为短方向的约束更严格用大的那个算会把拖影风险掩盖掉。5. 视觉检测避坑五个翻车现场与排查办法做视觉检测这么久踩过的坑比看过的参数表还多。这里把最典型的五个翻车现场写下来每条按现象、原因、解决的思路整理新手碰到类似问题可以直接按图索骥。坑一尺寸测量用了前向照明边缘永远切不干净。现象是测量工件的长宽尺寸时图像边缘总有一圈虚影阈值分割怎么调都不稳定同一个工件放十次测出十个尺寸。 原因是尺寸测量需要的是黑白分明的轮廓而前向照明下边缘受反光和阴影影响灰度过渡带太宽边界检测自然不稳定。 解决方法是把照明方式换成背向照明让被测物处在光源和摄像机之间获得高对比度的轮廓图像。从那以后我做尺寸测量项目第一件事就是确认照明是不是背向的。坑二分辨率盲目堆高帧率和处理速度双双崩溃。现象是有人觉得像素越高越好选了 1200 万像素相机结果帧率掉了一半图像数据量翻了四倍后端的图像处理软件跑不动整个检测节拍被拖垮。 原因是脱离了检测精度需求谈分辨率。按照前面的算例0.01mm 精度、12×10mm 视野稳定方案 300 万像素已经足够再高的分辨率不会带来缺陷检出率的提升只会带来速度和成本的负担。 解决方法是先确认缺陷的最小尺寸按 3 到 4 个像素覆盖缺陷的原则反推而不是从像素数字出发。坑三镜头靶面小于相机芯片图像边缘直接发黑。现象是相机是 1 英寸靶面镜头配了 2/3 英寸的拍出来的图中心清楚、四周发黑像是加了暗角滤镜。 原因是镜头的成像圆不够大无法覆盖相机芯片的全部面积边缘部分收不到光。 解决方法是选镜头时确认镜头支持的靶面尺寸大于等于相机芯片尺寸2/3 英寸镜头最多只能配 2/3 英寸或更小的相机。坑四C 口镜头配 CS 口相机成像在焦平面后面。现象是镜头装上去以后怎么调对焦环都是模糊的画面始终不清晰。 原因是 C 口和 CS 口的后截距不同C 口是 17.526mm、CS 口是 12.5mmC 口镜头直接装到 CS 口相机上成像面落在了传感器后面。 解决方法是查清楚接口类型C 镜头配 CS 相机加一个 5mm 的 C/CS 转接环CS 镜头配 C 相机则没法用只能换其中一头。这个坑在采购二手镜头或混用品牌时最容易出现。坑五运动物体的快门时间靠猜拍出来全是拖影。现象是流水线上的工件拍出来边缘有残影缺陷特征像被拉长了算法检出率直线下降。 原因是没按运动速度计算快门上限默认了相机的自动曝光。0.5m/s 的速度下按 0.00625mm 像素当量算快门必须小于等于 18.75 微秒普通相机的自动曝光远达不到这个速度。 解决方法是先算像素当量和运动速度确定快门上限再反推需要多大功率的光源。如果不满足考虑降低运动速度、提高光源亮度或者换更高帧率的相机。6. 算法与软件栈Halcon 还是 OpenCV取决于交付节奏6.1 一套完整的缺陷检测算法管线长什么样硬件定完之后才轮到算法。从工程视角看工业缺陷检测的图像处理流程一般分四步预处理、分割、特征提取、识别分类。预处理包括几何变换和尺度变换插值算法有最近邻、双线性、双三次三种增强环节用灰度变换、直方图均衡化、平滑降噪均值、中值、高斯、双边滤波和边缘锐化Roberts、Laplace、Sobel。分割环节最常用的是阈值分割有固定阈值、OTSU 最优阈值、自适应阈值三种复杂一点的用 Canny 边缘检测、Hough 变换直线和圆检测、区域生长或分水岭分割。特征提取方面缺陷检测最常用的是几何特征位置、方向、周长、面积、长轴短轴、形状特征Blob 分析里的矩形度、圆形度、不变矩、偏心率和直方图统计特征均值、方差、能量、熵LBP 局部二值模式因为对光照变化鲁棒在表面缺陷检测里也很有用。识别分类的传统算法有贝叶斯、KNN、人工神经网络、SVM、K-means现在深度学习方案越来越多但传统算法在样本少、可解释性要求高的场景仍然稳。模板匹配是很多定位项目的核心包括轮廓匹配、归一化积相关灰度匹配、不变矩匹配和最小均方误差匹配。我的经验是先用简单的阈值和 Blob 分析跑通流程再根据缺陷类型决定要不要上更复杂的特征和分类器不要一上来就堆深度学习。6.2 选型结论按交付节奏排 Halcon 和 OpenCV 的优先级软件层面的选择主要落在 Halcon 和 OpenCV 两个库上它们的差异可以直接用交付节奏来衡量。对比项HalconOpenCV算法数量与成熟度底层功能算法多性能优化好算法较多但部分要自己写上手难度低开发项目周期短较高开发周期长商用成本收费加密狗大约 10K-15K开源免费可商用适用项目交付周期紧、现场调试时间有限团队有算法能力、愿意长期自研典型姿势快速验证和交付打样验证后做产品化落地我的判断逻辑很直接项目交付周期赶、团队缺人手、预算能覆盖授权成本选 Halcon它的集成算子和性能优化能省掉大量调参时间团队有算法积累、要控制成本、并且打算把视觉能力沉淀成自研产品选 OpenCV但要有心理准备缺陷检测里不少特殊算子要自己写。还有一种混合用法是 Halcon 做原型验证、OpenCV 做最终落地先确认算法链路可行再逐步替换。无论选哪个背后的选型顺序是一致的先定光源再定相机和镜头最后排算法和软件栈。从那以后我每做一个视觉检测方案都强制先写一页光源方案说明再碰相机参数和算法选型——这个习惯帮我避免过至少三次返工希望帮到你。本文还有配套的精品资源点击获取