在讨论三种滤波之前,我们先了解一下到底什么是滤波,滤波的原理是什么,以及图像滤波的目的和作用,这些有助于我们更好的理解下面的三种滤波方式。
对这些知识又了解的朋友可直接去跳过去阅读三种滤波的实现
1 滤波的定义
在通信中,滤波是指将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施,通俗来说,滤波就是一种信号处理技术,用于改变信号的频谱特性,以达到提取有用信息、抑制噪声或改变信号某些特性的目的。而在 Halcon 等图像处理软件中,滤波主要是对图像信号进行处理。
2 滤波的原理
首先我们要清楚,图像是由像素点组成的二维信号,而每个像素点具有一定的灰度值或颜色值。滤波通过对图像中的每个像素点及其邻域像素点进行特定的数学运算,来改变像素点的值,从而达到对图像进行处理的效果。从频域角度来看,图像的不同频率成分对应着不同的图像特征,如低频成分对应着图像的平滑区域,高频成分对应着图像的边缘、细节和噪声等。滤波可以通过设计合适的滤波器,在频域中对不同频率成分进行衰减或增强,从而实现对图像特定特征的提取或抑制。
3 图像滤波的目的
(1)降噪:图像在获取、传输等过程中往往会引入噪声,如高斯噪声、椒盐噪声等。滤波可以通过平滑图像来降低这些噪声的影响,提高图像的质量和清晰度,使后续的图像分析和处理更加准确。例如,在对工业零件进行检测的图像中,噪声可能会干扰对零件边缘和缺陷的识别,通过滤波去除噪声后,能更准确地提取零件的特征。
(2)特征增强:可以突出图像中的某些特征,如边缘、角点等。通过选择合适的滤波器,能够强化感兴趣的特征,抑制不相关的信息,有助于后续的特征提取和目标识别任务。例如,在人脸识别中,通过滤波增强人脸的边缘和轮廓特征,能提高人脸识别算法的准确性。
(3)图像平滑与锐化:实现图像的平滑处理,使图像中的灰度变化更加平缓,减少图像的粗糙感;或者进行锐化处理,增强图像的细节和对比度,让图像看起来更加清晰。例如,在医学图像中,平滑滤波可以减少图像中的伪影,锐化滤波则有助于更清晰地显示病变组织的边缘。
(4)尺度空间表示:在多尺度分析中,滤波用于创建图像的不同尺度表示。通过在不同尺度上对图像进行滤波,可以捕捉到图像中不同大小的结构和特征,这对于处理具有不同尺度特征的图像数据非常有用,如在目标检测中,不同大小的目标可以在不同尺度的滤波图像中更好地被检测到。
至此,我们对于滤波应该已经有了一个大概的认识,接下来进入本篇的重点:在halco中滤波的分类。根据不同的分类方式滤波种类也不同,其中根据线性特性分可分为线性滤波和非线性滤波两种,而线性滤波主要包括均值滤波和高斯滤波等,非线性滤波包括中值滤波
4 均值滤波 mean_image
4.1 定义
均值滤波是一种线性滤波器,即将一个窗口区域中的像素计算平均值,然后将计算得到的均值设置为锚点上的像素值
优点:对图像内部的噪声及模糊图像有很好的作用。
缺点:使用均值滤波计算均值会将图像中的边缘信息与特征信息“模糊”掉,丢失很多特征。
4.2 代码实现
根据路径去读取图像
read_image (Image, 'printer_chip/printer_chip_01')
dev_display (Image)
制作一个噪声,值越大噪声越明显
gauss_distribution (50, Distribution)
将噪声添加到图像中
add_noise_distribution (Image, ImageNoise, Distribution)
dev_display (ImageNoise)
使用均值滤波,对图像上的噪声进行消除
参数1是输入的带噪声图像
参数2是输出的经过均值滤波后的图像 参数3~4需要两个奇数例如3*3代表当前像素相邻的8个平均值,要平均值替代原有噪声值达到过滤效果
mean_image (ImageNoise, ImageMean, 3, 3)
dev_display (ImageMean)
经过上述处理后可将加入图像中的噪声进行相应的处理
5 中值滤波 median_image
5.1 定义
中值滤波的基本原理是让图像中某点临近的像素按照大小排序,取排序像素集中位于中间位置的值作为中值滤波后的像素值。换句话说,可以理解为一个窗口沿着图像移动,然后将把窗口中所含的像素点按灰度级的升或降序排列,用位于中间的灰度值来代替该点的灰度值。
优点:对单个噪声有很好的平滑作用,尤其是椒盐噪声(就是黑白的斑点)。
5.2 代码实现
根据路径去读取图像
read_image (Image, 'printer_chip/printer_chip_01')
dev_display (Image)
制作一个噪声,值越大噪声越明显
gauss_distribution (50, Distribution)
将噪声添加到图像中
add_noise_distribution (Image, ImageNoise, Distribution)
dev_display (ImageNoise)
(上边这些代码都是通用的,不同的是下面对噪声的处理方式)
使用中值滤波,对图像上的椒盐噪声进行消除
参数1 带噪声的图像
2.消除噪声的图像
3.滤波器的尺寸,circle代表半径为3的圆,square是7*7的正方形 4.半径或边长
5.边界处理方式
median_image (ImageNoise, ImageMedian, 'circle', 1, 'mirrored')
dev_display (ImageMedian)
6 高斯滤波 gauss_image
6.1 定义
高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
优点:可以消除高斯噪声
6.2 代码实现
读取图像
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_display (Image)
生成高斯滤波器 参数1.输出的高斯滤波
2.SigMaX:高斯分布在x轴方向的标准差,3.SigMaY:高斯分布在y轴方向的标准差 作用:较大的标准差会产生更宽的滤波效果,对图像越模糊 4.方向,可以理解为角度
5.归一化因子:为了确保滤波器权重总和的定值,none代表不放大也不缩小 6.滤波器类型 dc_center:圆 dc_edge:圆形 rft:仿射矩形 7.滤波器在 X 方向上的尺寸(宽度)
8.滤波器在 y 方向上的尺寸(高度)
gen_gauss_filter (ImageGauss, 100, 100, 0, 'n', 'rft', Width, Height)
将输入的图像经过傅里叶转换成频域图像 1.输入图像
2.输出图像
3.变换方式,to_freq正向变换 from_freq反向变换 4.标准化因子 sqrt平方化,n归一化,none无 5.生成的图像格式 6.运行时提供的图像宽度
rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)
对图像进行卷积操作 1.频域图像
2.卷积核:使用高斯滤波器当做卷积核,对图像进行卷积处理(通过*的方式对原有的相速度进行补偿) 输出图像
convol_fft (ImageFFT, ImageGauss, ImageConvol)
rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width)
求两个图像的差值 1.需要被减的图片
2.拿来减去的图片
3.输出图像
4.矫正因子(补偿)
5.矫正的值
sub_image (Image, ImageFFT1, ImageSub, 10, 80)
对图像放大或缩小
zoom_image_factor (ImageSub, ImageZoomed, 0.5, 0.5, 'constant')
绘制高斯提取线 3.平滑度 默认1.5 4.阈值下限 5.阈值上限 6.提取线是亮线还是暗线,7.提取线是否有宽度 8.矫正位置和宽的的线条模式 9.是否允许在无法添加交汇点时自动添加
lines_gauss (ImageZoomed, Lines, 1.5, 3, 8, 'light', 'true', 'bar-shaped', 'true')
dev_display (Lines)