图像预处理(去噪 / 增强)
VM / VPP 对照
| VM / VPP 操作 | Halcon 算子链 | 核心区别 |
|---|---|---|
拖预处理工具 → 选中值滤波/高斯滤波/锐化 → 调核大小 |
median_image / gauss_filter / emphasize |
完全一样,只是 Halcon 要你手动接在流程里 |
常用算子链
erlang
* 步骤1: 中值滤波去噪
median_image (Image, ImageMedian, 'circle', 3, 'mirrored')
* 步骤2: 高斯滤波平滑 ------ 用高斯核对图像做平滑处理,抑制高频噪声
gauss_filter (Image, ImageGauss, 5)
* 步骤3: 均值滤波
mean_image (Image, ImageMean, 5, 5)
* 步骤4: 对比度增强
emphasize (Image, ImageEmphasize, 7, 7, 1.0)
* 步骤5: 自动对比度拉伸
scale_image_max (Image, ImageScaleMax)
🔬 算子参数详解与原理
核心思路: 图像预处理的本质是先降噪、后增强。工业现场图像常受光照不均、传感器噪声、灰尘干扰等问题影响,直接使用原始图像进行后续分析会导致误检率升高。预处理通过空间域滤波(中值/高斯/均值)抑制噪声,通过灰度变换(emphasize/scale_image_max)增强目标与背景的对比度,为后续的Blob分析、边缘检测、模板匹配等步骤提供高质量的输入图像。VM/VPP将滤波核选择和参数调节封装为图形界面,而Halcon需要显式选择滤波类型并设置参数,灵活性更高。
| 算子 | VM / VPP 对应操作 | 核心作用 |
|---|---|---|
median_image |
预处理 → 中值滤波 → 设置掩膜大小 | 用邻域像素的中值替换中心像素值,有效去除椒盐噪声,同时较好地保留边缘信息 |
gauss_filter |
预处理 → 高斯滤波 → 设置Sigma值 | 用高斯核对图像进行加权平均平滑,抑制高斯噪声,是边缘检测前的标准预处理步骤 |
mean_image |
预处理 → 均值滤波 → 设置窗口大小 | 用矩形窗口内像素的平均值替换中心像素,快速平滑图像,但会模糊边缘 |
emphasize |
预处理 → 锐化/对比度增强 → 设置增强系数 | 通过高通滤波增强图像的高频成分(边缘和细节),提升局部对比度 |
scale_image_max |
预处理 → 对比度拉伸 → 自动灰度映射 | 将图像灰度值线性映射到0~255的完整动态范围,解决图像灰度范围过窄的问题 |
① median_image --- 中值滤波去噪
arduino
median_image (Image, ImageMedian, 'circle', 3, 'mirrored')
参数说明:
Image(输入): 输入的原始图像。ImageMedian(输出): 中值滤波后的输出图像。'circle'(MaskType): 滤波掩膜的形状。可选:
'circle': 圆形掩膜,以半径定义大小'square': 方形掩膜'rectangle': 矩形掩膜
3(Radius/MaskSize): 掩膜半径或大小。对于圆形掩膜,3表示半径为3像素(实际覆盖7×7区域)。值越大,平滑效果越强,但计算量也越大。'mirrored'(Margin): 边界处理方式。可选:
'mirrored': 镜像反射,最常用,避免边界伪影'cyclic': 循环填充'continued': 延续边缘值'constant': 常数填充(默认用0)
工作原理: 中值滤波是一种非线性滤波。对于每个像素,取以其为中心的邻域窗口内所有像素值的中值,作为该像素的新值。与均值滤波不同,中值滤波对极端值(椒盐噪声的黑白点)不敏感------极端值被排序后位于序列两端,不会被选为中值。因此中值滤波能在去除椒盐噪声的同时,较好地保留边缘的锐利度(边缘像素与邻域像素差异大,中值仍接近真实值)。
适用场景: CCD相机热噪声产生的孤立白点/黑点、传输干扰导致的像素突变。
注意: 掩膜半径不宜过大(通常3~5),否则会过度平滑细节。
② gauss_filter --- 高斯滤波平滑
scss
gauss_filter (Image, ImageGauss, 5)
参数说明:
Image(输入): 输入图像。ImageGauss(输出): 高斯滤波后的输出图像。5(Sigma): 高斯核的标准差。Sigma越大,高斯核越宽,平滑效果越强,高频成分抑制越明显。通常取值0.5~10。
工作原理: 高斯滤波是一种线性平滑滤波,使用二维高斯函数作为卷积核。高斯核的特点是中心权重最大,向四周逐渐衰减,因此平滑效果自然,不会产生振铃效应(ringing)。高斯滤波在频域相当于低通滤波器,能有效抑制高频噪声(如高斯白噪声),同时保留低频的图像轮廓信息。
关键公式: 二维高斯核 G(x,y) = (1/(2πσ²)) × exp(-(x²+y²)/(2σ²))。
工程经验: 在边缘检测(如Canny、Sobel)之前,通常先用Sigma=1 ~ 3的高斯滤波去噪,可显著减少伪边缘。Sigma的选择应权衡去噪效果与边缘模糊程度。
③ mean_image --- 均值滤波平滑
scss
mean_image (Image, ImageMean, 5, 5)
参数说明:
Image(输入): 输入图像。ImageMean(输出): 均值滤波后的输出图像。5(MaskWidth): 滤波窗口的宽度(像素)。5(MaskHeight): 滤波窗口的高度(像素)。
工作原理: 均值滤波是最简单的线性滤波,用矩形窗口内所有像素的算术平均值替换中心像素值。计算速度快(可用积分图优化),但会严重模糊边缘------窗口跨越边缘时,边缘两侧像素被平均,导致边缘过渡区变宽、对比度下降。
适用场景: 对实时性要求高、边缘精度要求不高的场合;或作为粗预处理步骤,后续配合锐化算子使用。
对比建议: 在工业视觉中,优先使用median_image(保边去噪)或gauss_filter(自然平滑),mean_image仅用于特定的高速应用场景。
④ emphasize --- 对比度增强(锐化)
scss
emphasize (Image, ImageEmphasize, 7, 7, 1.0)
参数说明:
Image(输入): 输入图像。ImageEmphasize(输出): 增强后的输出图像。7(MaskWidth): 高通滤波掩膜的宽度。7(MaskHeight): 高通滤波掩膜的高度。1.0(Factor): 增强系数。Factor > 0时增强对比度,Factor越大增强效果越明显;Factor = 0时无效果;Factor < 0时反向增强(一般不用于工业场景)。
工作原理: emphasize算子本质上是一个高通滤波器。它先对图像进行低通滤波(均值平滑)得到低频成分,然后用原始图像减去低频成分得到高频成分(边缘和细节),最后将高频成分按Factor加权后加回原始图像。公式近似为:Output = Input + Factor × (Input - LowPass(Input))。这样,图像中的边缘和细节被放大,平坦区域保持不变,从而提升整体对比度。
适用场景: 图像整体偏灰、对比度不足(如背光不均、老化光源);金属表面微弱划痕的增强;低照度环境下的图像恢复。
注意: Mask尺寸应大于目标细节的尺寸,否则细节会被当作低频成分平滑掉。
⑤ scale_image_max --- 自动对比度拉伸
scss
scale_image_max (Image, ImageScaleMax)
参数说明:
Image(输入): 输入图像。ImageScaleMax(输出): 对比度拉伸后的输出图像。
工作原理: 该算子自动计算输入图像的最小灰度值(Min)和最大灰度值(Max),然后将整个灰度范围线性映射到0 ~ 255(8位图像)或0 ~ 65535(16位图像)。映射公式为:Output = (Input - Min) × (255 / (Max - Min))。这样,即使原始图像只使用了很窄的灰度范围(如50 ~ 150),拉伸后也会充分利用0 ~ 255的全动态范围,使暗部更暗、亮部更亮,提升人眼可读性和后续算法的稳定性。
适用场景: 相机曝光不足/过度、光源亮度衰减、物体材质反光率差异大导致的灰度范围压缩。
注意: 如果图像中存在极亮的噪点或极暗的污点,Min/Max会被这些极端值拉偏,导致主体区域拉伸效果不佳。此时应先做去噪处理,或使用scale_image_max的变体(如基于直方图百分位的拉伸)。