4. 图像预处理工具详解

在 VisionPro 的缺陷检测流程中,相机采集到的原始图像几乎不可能直接送入缺陷判定工具。光照不均、传感器噪声、背景纹理、对比度不足、通道格式不匹配等问题,都会让 Blob、CogPMAlign、CogPatInspect、CogSurfaceFlaw 等工具的稳定性大幅下降。图像预处理的核心任务,就是在不破坏缺陷特征的前提下,把原始图像“整理”成后续工具容易处理的形式。本节围绕 CogImageConvert、CogIPOneImageTool 以及滤波、形态学、增强与去噪这几类操作,说明它们各自解决什么问题、参数如何影响结果、以及如何组合成一条可复现的预处理链。

一、CogImageConvert:先解决“格式与通道”问题

CogImageConvert 是预处理链的入口工具,它处理的是图像的数据类型与通道结构,而不是像素内容的增强。VisionPro 中常见的图像类型包括 8 位灰度(CogImage8Grey)、8 位彩色(CogImage8PixelMemory 对应的彩色图)、16 位灰度(CogImage16Grey)以及 24 位 RGB 彩色图。很多缺陷工具只接受 8 位灰度输入,因此彩色图必须先转换。

转换时有两个关键选择:一是目标类型,二是彩色转灰度的权重。VisionPro 默认使用类似亮度感知的加权(约 R:0.299、G:0.587、B:0.114),但缺陷检测中更常用的是“最大化缺陷与背景差异”的通道。例如检测红色油墨缺失时,直接取 R 通道往往比转灰度更敏感。实操中可先用 CogImageConvert 分别输出 R、G、B 三通道,再用 CogIPOneImageTool 的统计功能比较各通道的均值与标准差,选择缺陷对比度最高的通道作为后续输入。

另一个易被忽略的点是位深。16 位图像动态范围大,直接转 8 位会丢失暗部细节。正确做法是先做线性拉伸或 Gamma 校正,再转 8 位,而不是直接截断。CogImageConvert 本身不做拉伸,因此它通常与后面的增强工具配合使用。

二、CogIPOneImageTool:单图操作的“工具箱”

CogIPOneImageTool 是 VisionPro 中最常用的单图预处理工具,它把多种像素级操作封装在一个工具里,通过 Operator 属性切换。常用操作包括:

  • Threshold / ThresholdRelative:按固定或相对阈值二值化,用于把缺陷从背景中分离。
  • Dilate / Erode:形态学膨胀与腐蚀,用于连接断裂缺陷或去除小噪点。
  • Open / Close:先腐蚀后膨胀(开运算)去小亮点,先膨胀后腐蚀(闭运算)填小暗孔。
  • Convolve:自定义卷积核,实现均值、高斯、锐化等滤波。
  • Add / Subtract / Multiply:图像与常数或图像与图像的算术运算,用于背景校正。
  • Normalize / Equalize:对比度归一化与直方图均衡。

这些操作可以串联成一条链:例如“背景校正 → 高斯滤波 → 阈值 → 开运算 → 闭运算”。在 VisionPro 中,既可以把多个 CogIPOneImageTool 依次连接,也可以在一个工具内通过多次调用实现。建议每个操作单独一个工具,便于在 Job 中查看中间结果、定位是哪一步引入了问题。

三、滤波:去噪与保边的权衡

滤波的本质是用邻域像素重新计算中心像素。缺陷检测中最常用三类:

均值滤波:3×3 或 5×5 核内取平均,去随机噪声快,但会模糊边缘,适合缺陷尺寸远大于噪声颗粒的场景。高斯滤波:按距离加权,中心权重高,边缘保留比均值好,是默认首选,常用 σ=1.0~1.5、核 5×5。中值滤波:取邻域中值,对椒盐噪声几乎“秒杀”,且不模糊阶跃边缘,适合金属表面亮点噪声、划痕检测前的去噪。

选择依据可以简化为:噪声是“孤立点”用中值,是“连续颗粒”用高斯,是“均匀细噪”用均值。滤波核越大,去噪越强,但缺陷边缘也越容易被吃掉。实操中建议先用 3×3,若噪声仍明显再升到 5×5,并同步观察缺陷区域的灰度差是否仍大于阈值。

四、形态学操作:按几何形状“修”缺陷

形态学操作针对的是二值图或灰度图的几何结构。膨胀让亮区域变大,腐蚀让亮区域变小。开运算(先腐蚀后膨胀)能去掉比结构元小的亮噪点,闭运算(先膨胀后腐蚀)能填补比结构元小的暗孔。结构元(Structuring Element)的形状和尺寸决定“多小算小”:检测 0.2 mm 的针孔,结构元应略大于针孔在图像中的像素直径,否则会被误填。

在缺陷检测中,形态学常用于三处:一是阈值后去除孤立噪点(开运算);二是把断裂的划痕连成一条(闭运算或膨胀);三是把缺陷区域“整形”成便于 Blob 统计的连通域。注意形态学会改变缺陷面积,若后续要测真实尺寸,应在形态学前用原始二值图测量,形态学图只用于定位与计数。

五、增强与去噪:让缺陷“跳出来”

图像增强的目标是拉大缺陷与背景的灰度差。常用手段有线性拉伸、Gamma 校正、直方图均衡和背景相减。线性拉伸把原灰度范围映射到 0~255,适合整体偏暗或偏亮的图;Gamma 校正通过幂函数调整中间调,γ<1 提亮暗部,γ>1 压暗亮部;直方图均衡自动重分布灰度,适合背景纹理复杂但缺陷对比度低的场景。

背景相减是表面缺陷检测的“杀手锏”:先用大核高斯或均值滤波得到背景估计图,再用原图减去背景图,剩下的就是局部异常。VisionPro 中可用 CogIPOneImageTool 的 Subtract 实现,也可用 CogImageConvert 配合算术工具。相减后常出现负值,需做绝对值或加偏置再归一化。

表面缺陷检测图像预处理链:从原始图到可判定缺陷图 原始图像 彩色 / 16位 光照不均 · 噪声 CogImageConvert 通道选择 R/G/B 16位 → 8位灰度 滤波去噪 高斯 σ=1.0 中值 3×3 图像增强 线性拉伸 / Gamma 背景相减 阈值分割 固定 / 相对 二值化 形态学操作 开运算去噪点 闭运算连划痕 预处理输出图 缺陷区域清晰 背景干净 缺陷检测工具 Blob / PatInspect SurfaceFlaw 关键参数与选择依据 通道选择 缺陷对比度最高的通道 滤波核 孤立点→中值;颗粒→高斯 增强方式 暗部→Gamma;不均→背景相减 结构元尺寸 略大于目标缺陷像素直径 判断准则:预处理后缺陷区域与背景的灰度差应大于阈值工具的设定值,且噪声连通域数量明显减少。 注意:形态学会改变缺陷面积,尺寸测量应使用形态学前的二值图。

六、组合策略与实操示例

把上述工具串成一条链时,顺序很重要。推荐顺序是:格式转换 → 背景校正/增强 → 滤波去噪 → 阈值 → 形态学 → 输出。原因在于:先转换保证数据类型正确;先增强再滤波,避免滤波把弱缺陷一起抹掉;先阈值再形态学,形态学只作用于二值图,计算量小且目标明确。

以一个金属表面划痕检测为例(以下参数为教学示例,需按实际图像调整):相机输出 2448×2048 彩色图,划痕宽约 3 像素、对比度低,背景有轻微反光和椒盐噪声。处理链可设为:CogImageConvert 取 G 通道转 8 位灰度;CogIPOneImageTool 做 5×5 高斯滤波(σ=1.2)去颗粒噪声;再做背景相减(背景用 31×31 均值滤波估计),得到局部异常图;线性拉伸到 0~255;固定阈值 45 二值化;开运算结构元 3×3 去孤立点;闭运算结构元 5×1 横向连接划痕断点。最终输出图送入 CogBlobTool,按面积和长宽比筛选划痕。

验证是否达标,可观察三个指标:一是缺陷区域与背景的灰度差是否大于阈值;二是二值图中噪声连通域数量是否从数百降到个位数;三是缺陷的连通域面积是否稳定(连续 10 帧波动小于 15%)。若噪声仍多,优先加大滤波核或提高阈值;若缺陷断裂,优先调整闭运算结构元方向与尺寸;若缺陷被吃掉,说明滤波或形态学过强,应回退一步。

预处理不是越多越好。每增加一步都会引入参数和耗时,建议先用最少的步骤达到稳定分割,再按需增加。所有中间结果都应在 Job 中可视化,便于快速定位问题步骤。
Gamma 校正和直方图均衡会改变灰度线性关系,若后续工具有灰度测量需求,应在增强前保存原始灰度值,或改用背景相减等保线性方法。

掌握这些工具的关键,不在于记住每个参数,而在于建立“问题—工具—参数—验证”的对应关系:噪声多就滤波,对比度低就增强,缺陷断裂就闭运算,噪点孤立就开运算,格式不对就转换。把这条链固化到 Job 中,并用中间结果显示和连续帧稳定性来验证,才能让后续缺陷判定工具真正可靠。