Halcon图像预处理学习报告
一、概述
图像预处理是机器视觉系统中的关键环节,其目的是改善图像质量,突出感兴趣的特征,为后续的图像分析和识别奠定基础。Halcon作为业界领先的机器视觉软件库,提供了丰富的图像预处理算子。本报告将重点介绍图像滤波和图像增强两大核心模块,包括各算子的功能、用途及代码示例。
二、图像滤波
图像滤波是图像预处理的基础操作,主要用于去除图像中的噪声、平滑图像或提取特定频率成分。根据滤波原理的不同,可分为线性滤波和非线性滤波两大类。
2.1 均值滤波 (Mean Filter)
功能说明:均值滤波是一种线性平滑滤波器,通过计算邻域内像素的平均值来替代中心像素值,可有效去除高斯噪声。
主要算子:
- mean_image:基本均值滤波,使用矩形窗口
- gauss_image:高斯滤波,使用高斯加权窗口,边缘保留效果更好
代码示例:
* 读取图像
read_image (Image, 'fabrik')
* 均值滤波 – 使用5×5的矩形窗口
mean_image (Image, ImageMean, 5, 5)
* 高斯滤波 – 使用5×5的高斯核
gauss_image (Image, ImageGauss, 5, 5)
* 显示结果
dev_display (ImageMean)
2.2 中值滤波 (Median Filter)
功能说明:中值滤波是一种非线性滤波器,用邻域像素的中值替代中心像素值。对椒盐噪声(脉冲噪声)有很好的去除效果,同时能较好地保持边缘信息。
主要算子:
- median_image:基本中值滤波
- median_separate:可分离中值滤波,计算效率更高
代码示例:
* 读取带椒盐噪声的图像
read_image (ImageNoise, 'mreut')
* 中值滤波 – 使用圆形掩码,半径为3
median_image (ImageNoise, ImageMedian, 'circle', 3, 'mirrored')
* 可分离中值滤波 – 分别对行和列进行中值滤波
median_separate (ImageNoise, ImageMedianSep, 5, 5, 'mirrored')
* 对比显示
dev_display (ImageMedian)
2.3 高斯滤波 (Gaussian Filter)
功能说明:高斯滤波使用高斯函数作为权重进行加权平均,相比普通均值滤波,高斯滤波在平滑图像的同时能更好地保留边缘信息,是图像处理中最常用的滤波器之一。
主要算子:
- gauss_image:标准高斯滤波
- derivate_gauss:高斯导数滤波,用于边缘检测
代码示例:
* 读取图像
read_image (Image, 'fabrik')
* 高斯平滑滤波
gauss_image (Image, ImageGauss, 7, 7)
* 高斯导数滤波 – 用于计算图像梯度
derivate_gauss (Image, DerivGauss, 'x', 1.5)
* 使用高斯导数进行边缘检测
derivate_gauss (Image, EdgeAmplitude, 'gradient', 1.5)
2.4 双边滤波 (Bilateral Filter)
功能说明:双边滤波是一种边缘保持的平滑滤波器,它同时考虑空间距离和像素值相似度两个因素,在去除噪声的同时能有效保持边缘细节。
主要算子:
- bilateral_filter:双边滤波,边缘保持平滑
代码示例:
* 读取图像
read_image (Image, 'mreut')
* 双边滤波 – 空间Sigma=3,灰度Sigma=20
bilateral_filter (Image, ImageBilateral, 3, 20, 'sampling_ratio', 0.5)
* 双边滤波常用于人像美化、细节增强等场景
dev_display (ImageBilateral)
2.5 滤波方法对比
|
滤波类型 |
适用噪声类型 |
边缘保留能力 |
|
均值滤波 |
高斯噪声 |
较差,边缘模糊 |
|
中值滤波 |
椒盐噪声、脉冲噪声 |
较好 |
|
高斯滤波 |
高斯噪声 |
中等 |
|
双边滤波 |
各类噪声 |
优秀 |
三、图像增强
图像增强的目的是改善图像的视觉效果,突出图像中的有用信息,便于人眼观察或机器分析。主要包括灰度变换、直方图处理、锐化增强等方法。
3.1 灰度变换 (Gray Transformation)
功能说明:灰度变换通过改变图像的灰度值分布来增强图像对比度,包括线性变换、对数变换、幂律变换(伽马变换)等。
主要算子:
- scale_image_max:将图像灰度缩放到最大范围(0-255)
- emphasize:增强图像对比度
- illuminate:增强图像亮度
代码示例:
* 读取图像
read_image (Image, 'mreut')
* 灰度拉伸 – 将灰度范围扩展到0-255
scale_image_max (Image, ImageScaled)
* 增强对比度 – Mask尺寸7×7,系数1.0
emphasize (Image, ImageEmphasize, 7, 7, 1.0)
* 增强亮度 – Mask尺寸41×41,系数0.7
illuminate (Image, ImageIlluminate, 41, 41, 0.7)
3.2 直方图处理 (Histogram Processing)
功能说明:直方图处理通过调整图像的灰度直方图来改善图像对比度。直方图均衡化是最常用的方法,可使图像灰度分布更加均匀。
主要算子:
- equ_histo_image:直方图均衡化
- gray_histo:计算灰度直方图
- histo_to_thresh:根据直方图确定阈值
代码示例:
* 读取图像
read_image (Image, 'fabrik')
* 直方图均衡化
equ_histo_image (Image, ImageEquHisto)
* 计算并显示灰度直方图
gray_histo (Image, Image, AbsoluteHisto, RelativeHisto)
* 根据直方图自动确定阈值
histo_to_thresh (AbsoluteHisto, 2, MinThresh, MaxThresh)
3.3 锐化增强 (Sharpening Enhancement)
功能说明:图像锐化通过增强图像边缘和细节来提高图像清晰度。常用的方法包括拉普拉斯算子、高通滤波、反锐化掩模等。
主要算子:
- laplace:拉普拉斯边缘增强
- highpass_image:高通滤波锐化
- shock_filter:冲击滤波,增强边缘
代码示例:
* 读取图像
read_image (Image, 'fabrik')
* 拉普拉斯锐化 – 使用绝对值
laplace (Image, ImageLaplace, 'absolute', 3, 'n_8_isotropic')
* 高通滤波锐化 – 增强高频成分
highpass_image (Image, ImageHighpass, 9, 9)
* 冲击滤波 – 迭代次数5,Theta值0.5
shock_filter (Image, ImageShock, 0.5, 5, 'canny', 0.5)
3.4 频域增强 (Frequency Domain Enhancement)
功能说明:频域增强通过在频率域对图像进行处理来实现增强效果。常用的方法包括傅里叶变换、小波变换等,可用于去除周期性噪声、增强特定频率成分。
主要算子:
- fft_image:快速傅里叶变换
- fft_image_inv:快速傅里叶逆变换
- convol_fft:频域卷积
代码示例:
* 读取图像
read_image (Image, 'fabrik')
* 进行傅里叶变换
fft_image (Image, ImageFFT, 'to_freq')
* 创建高通滤波器
gen_highpass (Highpass, 30, 30, 'n', 'dc_edge', 512, 512)
* 频域滤波
convol_fft (ImageFFT, Highpass, ImageConvol)
* 傅里叶逆变换
fft_image_inv (ImageConvol, ImageFiltered, 'from_freq')
3.5 增强方法对比
|
增强类型 |
主要功能 |
适用场景 |
|
灰度变换 |
调整灰度范围,增强对比度 |
图像过暗或过亮 |
|
直方图均衡化 |
均匀分布灰度,自动增强 |
对比度低的图像 |
|
锐化增强 |
增强边缘和细节 |
图像模糊、边缘不清晰 |
|
频域增强 |
去除周期性噪声 |
条纹噪声、周期性干扰 |
四、总结
图像预处理是机器视觉系统的重要组成部分,Halcon提供了丰富的图像滤波和图像增强算子。在实际应用中,需要根据具体问题选择合适的预处理方法:
- 对于高斯噪声,推荐使用高斯滤波或均值滤波
- 对于椒盐噪声,中值滤波效果最佳
- 需要保留边缘时,优先选择双边滤波
- 对比度增强可采用直方图均衡化或灰度变换
- 图像锐化可使用拉普拉斯算子或高通滤波
在实际项目中,通常需要组合使用多种预处理方法,并根据具体效果调整参数,以达到最佳的图像处理效果。


