缺陷检测的传统方法,核心思路是**“把合格品的样子定义清楚,任何不一样的地方就是缺陷”**。它不试图“认识缺陷”,而是通过一系列数学变换,把“异常”从图像中凸显出来。
五大经典方法
方法一:Blob 分析 —— 找“不该有的斑”
最基础的方法。通过阈值分割把图像变成黑白,然后找连通域。如果合格品上不该有某个亮斑或暗斑,那么这个 Blob 就是缺陷。
适用:脏污、异物、缺料、孔洞。局限:只能检测与背景有灰度差异的缺陷,对纹理表面的细微划痕无能为力。
方法二:模板比对 —— 找“和标准不一样的地方”
先训练一张合格品的模板,检测时把当前图像与模板逐像素相减。差值超过阈值的区域就是缺陷。
关键在于必须先定位。用模板匹配找到零件的位置和角度,把图像“对齐”到模板坐标系,再做减法。否则零件稍微偏移,减法结果全是差异。
适用:印刷品缺陷、包装完整性、装配缺件。局限:对光照变化敏感,需要非常稳定的成像条件。
方法三:边缘检测与测量 —— 找“尺寸不对的地方”
用卡尺提取边缘,拟合直线或圆,测量尺寸。如果尺寸超出公差,就是缺陷。
适用:崩边、缺角、尺寸偏差。局限:只能检测几何形状的异常,对表面瑕疵无效。
方法四:表面纹理分析 —— 找“纹理不对的地方”
金属表面的磨砂纹理、纺织品的编织纹理、纸张的纤维纹理,都有一个“正常”的统计特征。用灰度共生矩阵(GLCM)或局部二值模式(LBP)提取纹理特征,如果某个区域的纹理统计量偏离正常范围,就是缺陷。
适用:金属表面划痕、织物疵点、纸张纹理异常。局限:需要大量正常样本建立统计基线,参数调试复杂。
方法五:频域分析 —— 找“频率不对的地方”
把图像从空间域变换到频率域(傅里叶变换)。正常的周期性纹理在频域表现为规则的峰值,缺陷会破坏这种周期性,在频域表现为异常的频谱分布。
适用:周期性纹理表面的缺陷检测,如网格、阵列、编织物。局限:计算量大,对非周期性缺陷不敏感。
传统方法的共同前提:成像质量决定上限
所有传统缺陷检测方法都建立在一个前提上:缺陷必须在图像中产生足够的灰度差异。
如果划痕在图像中只引起 2-3 个灰度级的变化,而噪声也有 2-3 个灰度级的波动,那么任何算法都无法稳定区分。这不是算法问题,是成像问题。
解决路径只有一条:改进打光。低角度暗场照明能让划痕产生明显的散射光,把灰度差异从 3 级提升到 50 级。同轴光能消除金属反光,让表面缺陷不被高光淹没。
传统方法 vs 深度学习
传统方法在工业质检中依然大量使用,原因很明确:
可解释。每一步变换都是透明的。检测失败时,你能回看中间图像,定位是哪一步出了问题——是阈值设错了,还是打光变了,还是模板过时了。
数据需求低。不需要标注几千张图训练模型,调几个参数就能上线。
计算量小。CPU 就能跑,不需要 GPU,部署成本低。
换型快。新产品来了,改几个阈值和参数就行,不需要重新训练。
但传统方法有明确的边界:当缺陷形态多变、无法用规则描述时(如自然材质的纹理缺陷、复杂曲面的不规则瑕疵),传统方法就力不从心,需要深度学习补位。
一句话总结
传统缺陷检测的核心是**“定义正常,找出异常”**。Blob 找斑,模板比对找差异,边缘测量找尺寸偏差,纹理分析找统计异常,频域分析找周期性破坏。所有方法的前提都是:缺陷必须在图像中“看得见”。成像方案决定了检测的上限,算法只是逼近这个上限。