halcon核心-图像预处理(四)

图像预处理(去噪 / 增强)

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')

参数说明:

  1. Image (输入): 输入的原始图像。
  2. ImageMedian (输出): 中值滤波后的输出图像。
  3. 'circle' (MaskType): 滤波掩膜的形状。可选:
  • 'circle': 圆形掩膜,以半径定义大小
  • 'square': 方形掩膜
  • 'rectangle': 矩形掩膜
  1. 3 (Radius/MaskSize): 掩膜半径或大小。对于圆形掩膜,3表示半径为3像素(实际覆盖7×7区域)。值越大,平滑效果越强,但计算量也越大。
  2. 'mirrored' (Margin): 边界处理方式。可选:
  • 'mirrored': 镜像反射,最常用,避免边界伪影
  • 'cyclic': 循环填充
  • 'continued': 延续边缘值
  • 'constant': 常数填充(默认用0)

工作原理: 中值滤波是一种非线性滤波。对于每个像素,取以其为中心的邻域窗口内所有像素值的中值,作为该像素的新值。与均值滤波不同,中值滤波对极端值(椒盐噪声的黑白点)不敏感------极端值被排序后位于序列两端,不会被选为中值。因此中值滤波能在去除椒盐噪声的同时,较好地保留边缘的锐利度(边缘像素与邻域像素差异大,中值仍接近真实值)。

适用场景: CCD相机热噪声产生的孤立白点/黑点、传输干扰导致的像素突变。

注意: 掩膜半径不宜过大(通常3~5),否则会过度平滑细节。

② gauss_filter --- 高斯滤波平滑

scss 复制代码
gauss_filter (Image, ImageGauss, 5)

参数说明:

  1. Image (输入): 输入图像。
  2. ImageGauss (输出): 高斯滤波后的输出图像。
  3. 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)

参数说明:

  1. Image (输入): 输入图像。
  2. ImageMean (输出): 均值滤波后的输出图像。
  3. 5 (MaskWidth): 滤波窗口的宽度(像素)。
  4. 5 (MaskHeight): 滤波窗口的高度(像素)。

工作原理: 均值滤波是最简单的线性滤波,用矩形窗口内所有像素的算术平均值替换中心像素值。计算速度快(可用积分图优化),但会严重模糊边缘------窗口跨越边缘时,边缘两侧像素被平均,导致边缘过渡区变宽、对比度下降。

适用场景: 对实时性要求高、边缘精度要求不高的场合;或作为粗预处理步骤,后续配合锐化算子使用。

对比建议: 在工业视觉中,优先使用median_image(保边去噪)gauss_filter(自然平滑)mean_image仅用于特定的高速应用场景。

④ emphasize --- 对比度增强(锐化)

scss 复制代码
emphasize (Image, ImageEmphasize, 7, 7, 1.0)

参数说明:

  1. Image (输入): 输入图像。
  2. ImageEmphasize (输出): 增强后的输出图像。
  3. 7 (MaskWidth): 高通滤波掩膜的宽度。
  4. 7 (MaskHeight): 高通滤波掩膜的高度。
  5. 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)

参数说明:

  1. Image (输入): 输入图像。
  2. ImageScaleMax (输出): 对比度拉伸后的输出图像。

工作原理: 该算子自动计算输入图像的最小灰度值(Min)和最大灰度值(Max),然后将整个灰度范围线性映射到0 ~ 255(8位图像)0 ~ 65535(16位图像)。映射公式为:Output = (Input - Min) × (255 / (Max - Min))。这样,即使原始图像只使用了很窄的灰度范围(如50 ~ 150),拉伸后也会充分利用0 ~ 255的全动态范围,使暗部更暗、亮部更亮,提升人眼可读性和后续算法的稳定性。

适用场景: 相机曝光不足/过度、光源亮度衰减、物体材质反光率差异大导致的灰度范围压缩。

注意: 如果图像中存在极亮的噪点或极暗的污点,Min/Max会被这些极端值拉偏,导致主体区域拉伸效果不佳。此时应先做去噪处理,或使用scale_image_max的变体(如基于直方图百分位的拉伸)。

相关推荐
用户233376852181 小时前
一张损坏JPEG文件的背后排查
后端
nnerddboy2 小时前
Rust教程06:ESP32-rust环境搭建
开发语言·后端·rust
步行cgn2 小时前
MyBatis resultMap 结果映射完全指南
后端
nnerddboy2 小时前
Rust教程03:函数,控制流与所有权
开发语言·后端·rust
山荷枝2 小时前
04-框架--SpringBoot
java·spring boot·后端
Undoom3 小时前
用TextIn xParse搞定批量简历解析,WorkBuddy里一句话就能完成
后端
乐橙开放平台4 小时前
一周上线校园透明化:listDeviceDetailsByPage 台账 + getKitToken + ImouPlayer 多路墙
后端·物联网·安全·音视频·智能家居
樊小肆4 小时前
# 你还在等DeepSeek官方 agent Harness‌? 来试试 DeepSeeker-Code吧
前端·人工智能·后端
樊小肆4 小时前
2568 万 token 才花 2 块 2:聊聊 DeepSeeker-Code 怎么吃满上下文缓存
前端·人工智能·后端