3. 传统图像处理算法

在工业瑕疵检测中,深度学习模型(如 YOLOv8)并非唯一选择。传统图像处理算法凭借其计算效率高、可解释性强、无需大量标注数据等优势,在特定场景下仍是不可或缺的基石。本章将系统讲解三大核心传统算法——边缘检测、阈值分割与形态学操作,并展示它们在瑕疵检测中的基础应用。

学习提示:传统算法是深度学习的“预处理利器”。掌握这些基础操作,能帮助你更高效地构建混合检测系统,提升 YOLOv8 模型的输入质量与检测精度。

3.1 边缘检测:定位瑕疵边界

边缘是图像中灰度值发生剧烈变化的位置,通常对应瑕疵与背景的分界线。边缘检测的目标是提取这些关键轮廓,为后续分析提供基础。

3.1.1 Sobel 算子

Sobel 算子通过计算图像在水平(X)和垂直(Y)方向的一阶导数来检测边缘。其核心是两个 3×3 的卷积核:

// 水平方向核 (Gx):检测垂直边缘
[-1, 0, 1]
[-2, 0, 2]
[-1, 0, 1]

// 垂直方向核 (Gy):检测水平边缘
[-1, -2, -1]
[ 0,  0,  0]
[ 1,  2,  1]

最终边缘强度为:G = sqrt(Gx² + Gy²)。Sobel 算子对噪声有一定平滑作用,但边缘定位精度一般。

3.1.2 Canny 边缘检测

Canny 算法是目前最优秀的边缘检测方法之一,具有低错误率、高定位精度、单像素响应三大特点。其执行流程如下:

  1. 高斯滤波:使用高斯核平滑图像,抑制噪声。
  2. 计算梯度:使用 Sobel 算子计算梯度幅值和方向。
  3. 非极大值抑制:沿梯度方向保留局部最大值,细化边缘。
  4. 双阈值检测:设定高阈值(T_high)和低阈值(T_low),将像素分为强边缘、弱边缘和非边缘。
  5. 边缘连接:仅保留与强边缘相连的弱边缘,抑制孤立噪声。
工业应用要点:在瑕疵检测中,Canny 的双阈值参数是关键。高阈值控制主要边缘的提取,低阈值决定边缘的连续性。对于低对比度瑕疵(如细微划痕),需适当降低双阈值。
Canny 边缘检测流程图 输入图像 高斯滤波 梯度计算 非极大值抑制 双阈值检测 边缘图输出

3.2 阈值分割:分离瑕疵区域

阈值分割通过设定灰度阈值将图像划分为前景(瑕疵)和背景。这是瑕疵检测中最直接、最常用的区域提取方法。

3.2.1 全局阈值 vs. 局部阈值

方法 原理 适用场景 典型算法
全局阈值 对整个图像使用单一阈值 T 光照均匀、背景单一的图像 Otsu(大津法)、固定阈值
局部阈值 对每个像素根据邻域计算自适应阈值 光照不均、背景复杂的图像 自适应均值、自适应高斯

3.2.2 Otsu 大津法

Otsu 算法自动寻找最佳全局阈值,使前景与背景的类间方差最大。其核心思想是:当阈值恰好将两类像素分开时,两类之间的灰度差异最大。

// Otsu 算法核心步骤(伪代码)
1. 计算图像直方图,归一化为概率分布 p[i]
2. 遍历所有可能阈值 t (0~255):
   - 计算背景概率 w0 = sum(p[0..t])
   - 计算前景概率 w1 = sum(p[t+1..255])
   - 计算背景均值 u0, 前景均值 u1
   - 计算类间方差 sigma² = w0 * w1 * (u0 - u1)²
3. 选择使 sigma² 最大的 t 作为最佳阈值
局限性提醒:Otsu 假设直方图呈双峰分布。当瑕疵面积过小(如针孔、微小划痕)或光照严重不均时,Otsu 可能失效,此时应优先考虑局部阈值或先进行光照校正。
阈值分割示意图 原始图像 含暗色瑕疵 全局阈值 (Otsu) 瑕疵被完整提取 局部阈值 适应光照变化

3.3 形态学操作:修复与提取瑕疵

形态学操作基于图像形状(结构元素)对二值图像进行处理,常用于去噪、连接断裂区域、分离粘连区域。在瑕疵检测中,形态学操作通常作为边缘检测或阈值分割的后续处理步骤。

3.3.1 四大基础操作

操作 符号 效果 瑕疵检测用途
腐蚀 A ⊖ B 缩小前景区域,消除细小凸起 去除孤立噪点、分离粘连瑕疵
膨胀 A ⊕ B 扩大前景区域,填充细小空洞 连接断裂的瑕疵边缘
开运算 (A ⊖ B) ⊕ B 先腐蚀后膨胀,消除小物体 去除背景噪声、平滑瑕疵轮廓
闭运算 (A ⊕ B) ⊖ B 先膨胀后腐蚀,填充小孔洞 填充瑕疵内部空洞、连接邻近瑕疵

3.3.2 结构元素选择

结构元素(Kernel)的形状和大小直接影响形态学效果。常见形状包括:

  • 矩形:各向同性,适用于通用场景。
  • 十字形:对对角线方向敏感,适合保留角点。
  • 椭圆形:更平滑,适合处理圆形或弧形瑕疵。
实战经验:对于划痕检测,建议使用椭圆形或线形结构元素进行闭运算,以连接划痕的断裂部分;对于污点检测,使用矩形结构元素进行开运算,以去除背景中的微小噪点。
形态学操作示意图 原始二值图 含空洞和噪点 开运算 去除孤立噪点 闭运算 填充内部空洞

3.4 综合应用流程:传统算法瑕疵检测管线

在实际工业场景中,上述算法通常组合使用,形成完整的检测管线。以下是一个典型的流程:

  1. 图像预处理:灰度化、高斯滤波去噪。
  2. 边缘检测 / 阈值分割:提取潜在瑕疵区域(二值图)。
  3. 形态学后处理:开运算去噪 + 闭运算填充空洞。
  4. 连通域分析:标记并筛选瑕疵(面积、长宽比、位置等)。
  5. 结果输出:绘制瑕疵轮廓或生成检测报告。
混合检测策略:在 YOLOv8 项目中,传统算法可作为预处理模块(如用 Canny 提取边缘作为额外输入通道)或后处理模块(如用形态学操作精炼 YOLOv8 输出的掩码),从而提升整体检测鲁棒性。
传统算法瑕疵检测管线 输入图像 预处理 边缘/阈值 形态学操作 连通域分析 输出 典型工业瑕疵检测管线(可嵌入 YOLOv8 前后处理)

3.5 算法对比与选型建议

算法 核心优势 主要局限 典型瑕疵类型
Canny 边缘检测 边缘定位精准,单像素响应 对噪声敏感,参数调节复杂 划痕、裂纹、毛刺
Sobel 算子 计算速度快,对噪声有平滑作用 边缘较粗,定位精度低 快速粗检、边缘方向分析
Otsu 阈值分割 自动阈值,无需人工设定 依赖直方图双峰性 污点、暗斑、大面积缺陷
形态学操作 修复二值图,灵活组合 仅处理二值图,需配合其他算法 所有类型(作为后处理)
选型避坑:不要盲目追求算法复杂度。对于高对比度、背景简单的瑕疵(如金属表面的黑点),Otsu + 形态学开运算往往比 Canny 更高效;对于低对比度、纹理复杂的瑕疵(如织物断纱),Canny 结合局部阈值是更优选择。