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 算法是目前最优秀的边缘检测方法之一,具有低错误率、高定位精度、单像素响应三大特点。其执行流程如下:
- 高斯滤波:使用高斯核平滑图像,抑制噪声。
- 计算梯度:使用 Sobel 算子计算梯度幅值和方向。
- 非极大值抑制:沿梯度方向保留局部最大值,细化边缘。
- 双阈值检测:设定高阈值(T_high)和低阈值(T_low),将像素分为强边缘、弱边缘和非边缘。
- 边缘连接:仅保留与强边缘相连的弱边缘,抑制孤立噪声。
工业应用要点:在瑕疵检测中,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 可能失效,此时应优先考虑局部阈值或先进行光照校正。
3.3 形态学操作:修复与提取瑕疵
形态学操作基于图像形状(结构元素)对二值图像进行处理,常用于去噪、连接断裂区域、分离粘连区域。在瑕疵检测中,形态学操作通常作为边缘检测或阈值分割的后续处理步骤。
3.3.1 四大基础操作
| 操作 | 符号 | 效果 | 瑕疵检测用途 |
|---|---|---|---|
| 腐蚀 | A ⊖ B | 缩小前景区域,消除细小凸起 | 去除孤立噪点、分离粘连瑕疵 |
| 膨胀 | A ⊕ B | 扩大前景区域,填充细小空洞 | 连接断裂的瑕疵边缘 |
| 开运算 | (A ⊖ B) ⊕ B | 先腐蚀后膨胀,消除小物体 | 去除背景噪声、平滑瑕疵轮廓 |
| 闭运算 | (A ⊕ B) ⊖ B | 先膨胀后腐蚀,填充小孔洞 | 填充瑕疵内部空洞、连接邻近瑕疵 |
3.3.2 结构元素选择
结构元素(Kernel)的形状和大小直接影响形态学效果。常见形状包括:
- 矩形:各向同性,适用于通用场景。
- 十字形:对对角线方向敏感,适合保留角点。
- 椭圆形:更平滑,适合处理圆形或弧形瑕疵。
实战经验:对于划痕检测,建议使用椭圆形或线形结构元素进行闭运算,以连接划痕的断裂部分;对于污点检测,使用矩形结构元素进行开运算,以去除背景中的微小噪点。
3.4 综合应用流程:传统算法瑕疵检测管线
在实际工业场景中,上述算法通常组合使用,形成完整的检测管线。以下是一个典型的流程:
- 图像预处理:灰度化、高斯滤波去噪。
- 边缘检测 / 阈值分割:提取潜在瑕疵区域(二值图)。
- 形态学后处理:开运算去噪 + 闭运算填充空洞。
- 连通域分析:标记并筛选瑕疵(面积、长宽比、位置等)。
- 结果输出:绘制瑕疵轮廓或生成检测报告。
混合检测策略:在 YOLOv8 项目中,传统算法可作为预处理模块(如用 Canny 提取边缘作为额外输入通道)或后处理模块(如用形态学操作精炼 YOLOv8 输出的掩码),从而提升整体检测鲁棒性。
3.5 算法对比与选型建议
| 算法 | 核心优势 | 主要局限 | 典型瑕疵类型 |
|---|---|---|---|
| Canny 边缘检测 | 边缘定位精准,单像素响应 | 对噪声敏感,参数调节复杂 | 划痕、裂纹、毛刺 |
| Sobel 算子 | 计算速度快,对噪声有平滑作用 | 边缘较粗,定位精度低 | 快速粗检、边缘方向分析 |
| Otsu 阈值分割 | 自动阈值,无需人工设定 | 依赖直方图双峰性 | 污点、暗斑、大面积缺陷 |
| 形态学操作 | 修复二值图,灵活组合 | 仅处理二值图,需配合其他算法 | 所有类型(作为后处理) |
选型避坑:不要盲目追求算法复杂度。对于高对比度、背景简单的瑕疵(如金属表面的黑点),Otsu + 形态学开运算往往比 Canny 更高效;对于低对比度、纹理复杂的瑕疵(如织物断纱),Canny 结合局部阈值是更优选择。