3. 图像预处理与增强

在金属表面缺陷检测中,相机采集到的原始图像往往并不“好看”:划痕方向性弱、对比度低,氧化皮与背景灰度接近,反光区域还可能掩盖细小凹坑。如果直接把原图送入分割或分类算子,阈值会漂移,边缘会断裂,缺陷区域容易被噪声吞掉。预处理的目标不是把图像“修漂亮”,而是把缺陷与背景的可分性放大,同时抑制与缺陷无关的干扰。本节围绕灰度变换、直方图均衡化、均值/中值/高斯滤波、锐化与去噪,针对金属表面划痕和低对比度缺陷给出一条可落地的处理链。

一、先明确处理对象与观察指标

假设使用黑白面阵相机拍摄金属拉丝表面,视场约 40 mm × 30 mm,分辨率 2448 × 2048,镜头为远心镜头,光源为低角度环形光。典型缺陷包括:宽度 0.05~0.2 mm 的细长划痕、直径 0.1~0.5 mm 的麻点、以及大面积但灰度差仅 8~15 灰阶的低对比度色差区。判断预处理是否有效,不能只看“看起来清楚”,而应关注三个指标:缺陷与邻域背景的灰度差是否增大;划痕边缘的梯度幅值是否提升;背景纹理和随机噪声的标准差是否下降。这三个指标分别对应对比度、边缘和噪声,是后续阈值分割与亚像素测量的基础。

二、灰度变换:把缺陷压进可分割区间

灰度变换是最轻量的增强手段。HALCON 中常用 scale_image 做线性拉伸,用 scale_image_max 做最大范围归一化,用 pow_image 做伽马调整。对于低对比度缺陷,若原图灰度集中在 90~150,而缺陷在 105~125,直接阈值很难稳定。此时可用线性变换把 [90,150] 映射到 [0,255]:

scale_image (Image, ImageScaled, 255.0 / (150 - 90), -90 * 255.0 / (150 - 90))

该操作把背景与缺陷的灰度差从约 10 灰阶放大到约 42 灰阶,阈值窗口更容易设置。若缺陷比背景暗,且暗区细节被压缩,可用伽马小于 1 的 pow_image 提升暗部;若亮区反光掩盖划痕,则用伽马大于 1 压缩高亮。需要注意:线性拉伸不改变噪声的相对结构,只是把噪声也一起放大,因此灰度变换后通常仍需滤波配合。

三、直方图均衡化:适合全局低对比度,不适合强反光

直方图均衡化通过累积分布函数重新分配灰度,使输出直方图接近均匀。HALCON 中可用 equ_histo_image。对于整体偏暗、灰度集中在中低段的金属图像,均衡化能显著拉开背景与缺陷的差距。但它有两个风险:一是强反光区域会被过度拉伸,形成大片饱和白斑;二是若背景本身占主导,均衡化可能把少量缺陷像素压缩到极端灰度,反而丢失细节。因此更稳妥的做法是先做局部均衡或限制对比度的自适应均衡,再观察缺陷区域是否被“拉平”。在金属划痕场景中,若划痕细且方向一致,均衡化后应重点检查划痕两侧边缘是否仍然连续,而不是只看整体亮度是否均匀。

金属表面缺陷预处理链:从原始图像到可分割缺陷 原始图像 灰度 90~150,缺陷差 8~15 灰度变换 scale_image 线性拉伸 [90,150]→[0,255] 缺陷差 10→42 灰阶 噪声同步放大 滤波去噪 中值 3×3 / 高斯 σ=1.0 抑制随机噪声 保留划痕边缘 均值滤波会模糊细划痕 锐化增强 unsharp_mask 提升划痕边缘梯度 增强局部对比度 过度锐化会放大噪点 输出 可分割 缺陷图像 对比度↑ 噪声↓ 三种滤波对金属划痕的适用性对比(示例参数) 滤波类型 对细划痕影响 对随机噪声抑制 推荐场景 均值滤波 3×3 边缘模糊明显 中等 大面积均匀背景 中值滤波 3×3 边缘保持较好 强(椒盐噪声) 划痕检测首选 高斯滤波 σ=1.0 轻微平滑 强(高斯噪声) 锐化前平滑

四、滤波选择:均值、中值、高斯不是随便挑

均值滤波用邻域平均替代中心像素,实现简单,但对细划痕的模糊非常明显。若划痕宽度只有 2~3 像素,3×3 均值滤波后边缘梯度可能下降 30% 以上,后续边缘提取容易断线。中值滤波取邻域中值,对椒盐噪声和孤立亮点抑制强,同时能较好保留阶跃边缘,因此更适合金属表面划痕检测。高斯滤波按距离加权,平滑更自然,适合在锐化前做轻微降噪,但 σ 不宜过大,否则划痕会被“抹平”。在 HALCON 中可分别使用 mean_image、median_image、gauss_filter。一个稳妥的起点是:先中值 3×3 去孤立噪声,再高斯 σ=0.8~1.0 做轻微平滑,最后锐化。

五、锐化:把划痕边缘“提”出来

锐化的本质是增强高频分量。HALCON 中常用 unsharp_mask,其参数包括锐化半径和强度。半径决定被增强的边缘尺度,强度决定增强幅度。对于宽度 0.05~0.2 mm 的划痕,在 2448 像素覆盖 40 mm 的条件下,1 像素约 16 μm,划痕约 3~12 像素宽,因此锐化半径可设为 1.5~3.0 像素。强度过高会把金属拉丝纹理和噪声一起放大,建议从 0.5 开始,逐步增加到 1.5,同时观察背景标准差是否超过缺陷灰度差的 1/3。若超过,说明锐化过度,应回退或先加强滤波。

六、一条可复现的预处理链与结果判断

综合以上分析,针对金属表面划痕与低对比度缺陷,可采用如下处理链:读取图像后先做中值 3×3 去噪,再用 scale_image 将灰度区间 [90,150] 线性拉伸到 [0,255],接着用 equ_histo_image 做全局均衡化提升整体对比度,然后用 gauss_filter σ=0.8 轻微平滑,最后用 unsharp_mask 半径 2.0、强度 1.0 锐化。处理完成后,用 gray_histo 观察直方图是否出现双峰,用 edges_sub_pix 或 sobel_amp 检查划痕边缘是否连续。若直方图仍单峰、边缘断续,应回到灰度变换或均衡化步骤调整映射区间,而不是继续加大锐化强度。预处理不是越复杂越好,而是让缺陷在后续分割中稳定可分离。

实际调试时,建议固定光源和相机参数,先采集一张无缺陷背景图和一张含缺陷图,分别统计灰度均值和标准差,再决定灰度变换区间。这样比反复试参数更高效。