3. 图像预处理与增强

在工业视觉项目中,相机采集到的原始图像往往并不适合直接送入定位、测量或检测工具。光照不均、对比度不足、噪声干扰、边缘模糊、背景纹理杂乱,都会让后续算法的稳定性大打折扣。图像预处理与增强的任务,就是在正式分析之前,把图像“整理”成更利于算法判断的形态。VisionPro 提供了从灰度变换、空间滤波到形态学处理的一整套工具,它们既可以作为独立工具在 Job 中调用,也可以组合成预处理链,为 CogFindLine、CogBlob、CogPMAlign 等工具提供更干净的输入。

一、灰度变换:先解决“看得清”的问题

灰度变换是最基础的一类增强手段,它逐像素地改变灰度值,不改变像素的空间位置。VisionPro 中常用的工具包括 CogIPOneImageTool 与 CogImageConvertTool,前者支持线性拉伸、阈值化、反相、伽马校正等操作,后者用于彩色到灰度的转换以及位深调整。

线性灰度拉伸是最常用的手段。假设当前图像灰度集中在 60~150 之间,而目标与背景的差异只有 20 个灰度级,此时可以设置输入区间 [60, 150]、输出区间 [0, 255],把有效灰度拉开到整个动态范围。VisionPro 的 CogIPOneImageTool 中对应参数为 MapMode = Linear,配合 InputLow/InputHigh 与 OutputLow/OutputHigh。如果图像整体偏暗但高光部分已经饱和,则更适合用伽马校正,例如 Gamma = 0.7 可以提亮中间调,同时避免高光溢出。

需要特别注意的是,灰度变换是全局操作。当图像存在明显的光照梯度时,全局拉伸会把亮区推爆、暗区仍然压死。这时应改用局部自适应方法,例如 VisionPro 的 CogIPOneImageTool 中的 LocalThreshold 或结合 CogHistogramTool 先统计灰度分布,再决定拉伸区间。一个实用的判断依据是:如果直方图呈单峰且集中在窄区间,线性拉伸有效;如果直方图呈双峰但两峰高度差异极大,说明背景占比过高,可能需要先做掩膜或 ROI 限制。

二、滤波:在“去噪”与“保边”之间取舍

滤波处理的是像素邻域关系,核心矛盾是噪声抑制与边缘保留。VisionPro 中常用的滤波工具是 CogIPOneImageTool 的卷积模式以及 CogMedianImageTool、CogGaussianFilterTool。

均值滤波实现简单,对高斯噪声有一定抑制,但会模糊边缘。VisionPro 中可通过 CogIPOneImageTool 设置 KernelSize = 3×3 或 5×5 的均值核。中值滤波对椒盐噪声效果显著,且比均值滤波更能保留边缘,典型参数为 KernelSize = 3 或 5,适合处理表面划痕、脏点等孤立异常像素。高斯滤波则用于平滑过渡,Sigma 控制平滑程度,Sigma 越大越平滑,但边缘定位精度下降。

实际调参时,建议先用 CogHistogramTool 观察噪声幅度,再决定核大小。一个经验规则是:核大小不应超过目标特征宽度的 1/3。例如检测宽度约 6 像素的细线,3×3 核尚可,5×5 核就可能把线“吃掉”。如果滤波后边缘仍不清晰,不要继续加大核,而应转向锐化或形态学方法。

VisionPro 图像预处理链:灰度变换 → 滤波 → 形态学 原始图像 低对比度 噪声 + 光照不均 灰度 60~150 灰度变换 CogIPOneImageTool Linear: [60,150]→[0,255] Gamma = 0.7(可选) 滤波 中值 3×3 / 高斯 σ=1.0 核 ≤ 特征宽度 1/3 去噪 + 保边 形态学操作 开运算:先腐蚀后膨胀 闭运算:先膨胀后腐蚀 结构元 3×3 矩形/圆形 参数调优决策路径 直方图是否集中? 是 → 线性拉伸 否 → 检查光照梯度 噪声类型判断 椒盐 → 中值滤波 高斯 → 高斯滤波 目标形态判断 去除小亮点 → 开运算 填补小孔洞 → 闭运算 输出:对比度增强、噪声抑制、目标形态规整的图像 送入 CogPMAlign / CogBlob / CogFindLine 等工具

三、形态学操作:改变目标的“形状”

形态学操作基于结构元对图像进行集合运算,最常用的是腐蚀、膨胀、开运算和闭运算。VisionPro 中对应工具为 CogMorphologyTool,核心参数包括 Operation(Erode/Dilate/Open/Close)、StructureShape(矩形/圆形/十字)和 KernelSize。

腐蚀会缩小亮区域,适合去除细小的毛刺和孤立亮点;膨胀会扩大亮区域,适合填补小孔洞和连接断裂。开运算是先腐蚀后膨胀,用于去除小物体而保持大物体尺寸基本不变;闭运算是先膨胀后腐蚀,用于填补目标内部的小孔和缝隙。结构元的选择同样关键:矩形结构元对水平和垂直边缘更敏感,圆形结构元对方向不敏感,适合处理圆形目标。

一个典型的应用场景是:金属表面检测中,目标区域存在大量细小反光点,先用 3×3 矩形结构元做开运算,可以去掉这些孤立亮点,同时保留目标主体的轮廓。如果目标内部有细小孔洞需要填补,则改用闭运算。需要注意的是,形态学操作会改变目标的实际尺寸,因此如果后续要做亚像素级测量,应谨慎使用,或在使用后重新标定。

四、组合使用与参数调优建议

实际项目中,预处理往往不是单一操作,而是按“灰度变换 → 滤波 → 形态学”的顺序组合。VisionPro 中可以通过 Job 将多个工具串联,前一个工具的输出图像作为后一个工具的输入。调参时建议遵循以下原则:

  • 先看直方图,再决定灰度变换方式,避免盲目拉伸。
  • 滤波核大小不超过目标特征宽度的 1/3,优先选中值滤波保边。
  • 形态学结构元从 3×3 开始尝试,逐步增大,观察目标尺寸变化。
  • 每一步处理后都用 CogHistogramTool 或 CogBlobTool 验证效果,不要一次性堆叠过多操作。
在 VisionPro 中调试预处理链时,可以先将每个工具的 OutputImage 显示在 CogDisplay 中,逐级对比处理前后的图像差异。如果某一级处理后目标反而变差,应回退该级参数,而不是继续叠加后续操作。
形态学操作和滤波都会改变边缘位置,若后续工具依赖亚像素精度(如 CogFindLine 的边缘定位),应在预处理后重新评估标定参数,或尽量使用保边性更好的中值滤波替代均值滤波。

总结来说,灰度变换解决“对比度”问题,滤波解决“噪声与边缘”问题,形态学解决“目标形状”问题。三者不是孤立的,而是根据图像质量与检测目标的特点,有选择地组合使用。掌握每一步的参数含义与调优边界,才能让 VisionPro 的后续工具在稳定、干净的图像上发挥出应有的精度与鲁棒性。