4. 图像预处理工具

在 VisionPro 的缺陷检测项目里,相机采到的原始图像很少能直接送进检测工具。缺陷往往表现为几个灰度级的微弱差异,而噪声、光照不均、背景纹理却比缺陷本身更“显眼”。预处理的目的不是把图像变漂亮,而是改变缺陷与背景之间的可分离度——让后续的 Blob、CogCNLSearch、CogPatInspect 或 CogOCRMax 等工具能稳定地“看见”缺陷。本节围绕四类最常用的预处理工具,讲清它们各自改变的是什么、参数怎么定、结果怎么判断。

一、滤波:先决定要保留什么,再决定滤掉什么

VisionPro 的滤波工具集中在 CogIPOneImageTool 中,常用算子包括高斯滤波、中值滤波、均值滤波和 Sobel 边缘增强。选择依据不是“哪个效果好”,而是缺陷的尺度与噪声的尺度谁更小。

假设检测对象是金属表面的划痕,划痕宽度约 3~5 像素,而图像噪声是 1~2 像素的椒盐点。此时中值滤波(Median,核尺寸 3×3)能在几乎不削弱划痕的前提下压掉孤立噪点;若改用 5×5 高斯,划痕边缘会被明显模糊,后续阈值分割时缺陷面积会缩小 20%~30%,导致漏检。反之,如果缺陷是面积较大的凹坑(20 像素以上),而噪声是高频纹理,则高斯滤波(Sigma 取 1.0~1.5)更合适,因为它对整片区域的平滑更均匀。

实操中建议先用 CogIPOneImageTool 的交互界面切换算子,观察同一 ROI 内缺陷与背景的灰度直方图是否出现双峰。若双峰分离度提升,说明滤波方向正确;若直方图整体收窄但双峰仍重叠,说明滤波没有解决对比度问题,应转向背景校正或图像算术。

二、形态学:用结构元“塑形”缺陷

形态学在 VisionPro 中通过 CogMorphologyTool 实现,核心是腐蚀、膨胀、开运算、闭运算四种基本操作,配合矩形、圆形、十字等结构元。它的价值在于按几何形状筛选目标,而不是按灰度。

典型场景:PCB 焊盘上有多余锡珠,锡珠是亮的小圆点,但焊盘边缘也有亮反光。若直接阈值分割,两者都会被选中。此时可先做一次开运算(先腐蚀后膨胀,结构元用 3×3 圆形),小于结构元的亮斑被消除,焊盘边缘的连续亮带因尺寸大于结构元而保留。再对结果做一次闭运算填补锡珠内部的暗孔,最终 Blob 工具统计到的连通域数量就是真实锡珠数。

参数上,结构元尺寸应略大于噪声颗粒、略小于缺陷本身。例如锡珠直径约 6 像素,噪声约 2 像素,则结构元取 3×3 或 5×5 圆形较合适。若结构元取到 7×7,锡珠会被一并腐蚀掉,造成漏检。判断依据是:处理后的二值图中,缺陷区域的面积变化应小于 15%,而噪声区域应基本消失。

三、图像算术:用参考图做“减法”

图像算术工具(CogImageArithmeticTool)支持两幅图像之间的加、减、乘、除及绝对值差。在缺陷增强中最常用的是绝对差:用一张“标准良品图”减去当前待检图,差异区域即为疑似缺陷。

例如检测液晶屏的 Mura 缺陷,先采集一张均匀灰阶的标准图作为参考,再对每片产品图执行 AbsDiff。若某区域差值超过设定阈值(如 12 个灰度级),则标记为候选缺陷。这里的关键是参考图必须与当前图在同一曝光、同一增益、同一位置下采集,否则整体亮度漂移会被误判为缺陷。VisionPro 中可通过 CogFixtureTool 先做定位对齐,再送入算术工具,把平移和旋转误差压到 1 像素以内。

另一个常用组合是“原图 + 反相图”做平均,用于抑制随机噪声;或“原图 × 常数”做对比度拉伸。算术运算的输入输出都是 8 位或 16 位图像,注意溢出截断:加法超过 255 会饱和为 255,减法低于 0 会截断为 0,必要时先转 16 位再运算。

四、背景校正:把光照不均“摊平”

背景校正(CogIPOneImageTool 中的 Background Correction 或 Shading Correction)解决的是低频光照梯度问题。当光源从一侧打光时,图像一侧亮、一侧暗,同一缺陷在亮区和暗区的灰度差可能相差 30 个灰度级以上,固定阈值必然失效。

做法是:先对图像做大核均值滤波(核尺寸远大于缺陷,如 51×51),得到一张只保留光照趋势的背景图;再用原图减去背景图,得到光照均匀的校正图。VisionPro 中也可用 CogImageAverageTool 对多张良品图求平均生成背景模板,然后逐像素相减。校正后,原本在暗区被淹没的缺陷会显现出来,此时再用固定阈值或自适应阈值分割,稳定性显著提升。

判断校正是否到位,可看校正后图像的背景灰度标准差:若从原来的 18 降到 5 以内,说明光照梯度已被有效抑制;若仍大于 10,需检查背景核尺寸是否过小,或光源本身是否存在高频闪烁。

四类预处理工具在缺陷增强中的分工与数据流 原始图像 噪声 + 光照不均 缺陷对比度低 ① 滤波 中值 3×3 / 高斯 σ=1.2 目标:压噪声,保边缘 判断:直方图双峰分离 ② 形态学 开运算 3×3 圆形 目标:按形状筛目标 判断:缺陷面积变化<15% ③ 图像算术 AbsDiff 参考图 目标:突出差异区域 判断:差值>12 灰度级 ④ 背景校正 大核均值 51×51 相减 判断:背景标准差<5 预处理组合 按缺陷类型 选择 1~2 种 串联使用 滤波→算术→形态学 或 背景校正→滤波 增强后图像 缺陷/背景 对比度提升 送入 Blob / PatInspect 注:图中参数为教学示例值,实际项目需根据缺陷尺度、噪声水平和光照条件标定

五、组合使用的顺序与判断

四类工具很少单独使用。一个稳定的缺陷增强链通常是:背景校正 → 滤波 → 图像算术 → 形态学。先摊平光照,再压噪声,然后用参考图突出差异,最后用形态学清理残留噪点并规整缺陷形状。顺序颠倒会带来问题:若先做形态学再滤波,形态学可能把噪声也“塑形”成小目标,滤波反而难以区分。

每一步之后都应回到直方图或二值图观察:缺陷区域是否仍然完整、背景是否足够干净、阈值是否容易确定。如果某一步让缺陷面积缩小超过 20%,或让背景出现新的伪目标,就应回退该步并调整参数。VisionPro 的 CogToolBlock 支持把预处理链封装成可复用的工具组,配合 CogDisplay 的 ROI 和直方图实时查看,能显著缩短调参周期。

调参时优先固定光源和曝光,再调预处理参数。光源不稳定时,任何滤波和校正都只是在补偿一个不断变化的输入,参数永远调不稳。