1、 第5章 图像滤波空间域滤波 频域图像滤波 学习目标掌握熟悉掌握掌握灰度图像空间域滤波的原理及常用滤波方法:中值滤波、均值滤波、高斯滤波。13熟悉相应的Halcon算子和参数2掌握灰度图像频域滤波的原理及常用滤波方法:低通滤波、高通滤波、带通滤波。目录空间域图像滤波5.25.25.15.1图像滤波简介频域图像滤波5.35.3 知识架构5.1 图像滤波简介图像滤波简介1图像滤波的概念2图像滤波的分类 知识架构5.2 空间空间域图像滤波域图像滤波1均值滤波2【案例】均值滤波器的应用3高斯滤波4中值滤波56三种滤波方法的比较【案例】分析液体中的颗粒 知识架构5.3 频域图像滤波频域图像滤波1频域滤波
2、原理2频域低通滤波3频域低通滤波器的应用4频域高通滤波5【案例】应用高斯高通滤波器提取图像轮廓 知识架构5.3 频域图像滤波频域图像滤波6频域的带阻/带通滤波器7【案例】应用带阻滤波器进行划痕检测 5.1 图像滤波简介1.图像滤波的概念概念概念:图像滤波是在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。5.1 图像滤波简介2.图像滤波的分类空间域滤波空间域滤波:空间域方法是以对图像的像素直接进行处理为基础,包括均值滤波、中值滤波、高斯滤波等。频域滤波频域滤波:频域方法是以修改图像在傅里叶变换空间的值为基础的。包括高通滤波、低通滤波、同态滤波等。5.2 空间域图像滤波图像中图像中(x,y
3、)(x,y)点的点的3 33 3邻域邻域 5.2 空间域图像滤波 基于空间的灰度图像滤波主要是借助一个模板图像对输入图像的一个邻域进行处理。根据功能不同可以分为两大类:一类叫做图像平滑,做法是对图像进行低通滤波,其目的是模糊或者消除图像中的噪声;一类是图像锐化,做法是对图像进行高通滤波,其目的是增强被模糊的图像细节信息。无论是平滑还是锐化,都是利用模板卷积运算实现的。实现步骤如下:(1)将模板在图中滑动,并将模板中心与图中某个像素位置重合。(2)将模板上的系数与模板下对应的图像像素相乘。(3)将所有乘积相加。(4)将得到的和赋值给图中对应模板中心位置的像素作为输出。5.2 空间域图像滤波1.均
4、值滤波 图像在传输过程中,由于干扰影响,基本每幅图像都包含某种程度的噪声。在大多数情况下,图像噪声的特点是空间不相关的,而图像的灰度应该是相对连续变化的,一般不会突然变大或者变小,而噪声点与其邻近的像素显著不同。均值滤波是一种线性平滑滤波。它的基本思想是用邻域几个像素灰度值的平均值来代替一个像素原来的灰度值。这种处理减小了图像灰度的尖锐变化,由于典型的随机噪声就表现为灰度级的尖锐变化,因此,这种方法可以实现图像的减噪和平滑。5.2 空间域图像滤波1.均值滤波 5.2 空间域图像滤波1.均值滤波 均值滤波算法简单,但是由于图像中自然存在的边缘同样也是反映图像中灰度的尖锐变化,所以均值滤波的主要缺
5、点是在降低噪声的同时会使图像变模糊,特别是在图像中的物体边缘和细节处更加明显。而且做均值滤波时所使用的邻域越大,在去噪能力增强的同时图像模糊程度越严重。均值滤波可以用于对图像进行预处理,比如,在提取大的目标之前去除图像中一些琐碎的细节、桥接直线或曲线的缝隙。在HALCON中均值滤波的算子为mean_image:mean_image(Image:ImageMean:MaskWidth,MaskHeight:)5.2 空间域图像滤波1.均值滤波 均值滤波算法中将邻域中所有的点都参与均值计算,因此如果噪声点很多,而且噪声点的灰度值跟原本的图像像素值差异比较大,比如椒盐噪声,那么均值滤波的效果就很不理
6、想。5.2 空间域图像滤波2.【案例】B值滤波器的使用为HALCON中的例图“circular_barcode”添加噪声,并用不同大小模板对图像进行均值滤波,观察比较滤波效果。5.2 空间域图像滤波3.高斯滤波高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素点的值经过加权平均后得到。可以理解为用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。高斯模板实际上也就是模拟高斯函数的特征,具有对称性并且数值由中心向四周不断减小。高斯滤波器是一种带权的平均滤波器,适用于消除高斯噪声,广泛应用于图像处
7、理的减噪过程。高斯函数是正态分布的密度函数。正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。5.2 空间域图像滤波3.高斯滤波高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素点的值经过加权平均后得到。可以理解为用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。高斯模板实际上也就是模拟高斯函数的特征,具有对称性并且数值由中心向四周不断减小。高斯滤波器是一种带权的平均滤波器,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。高斯函数是正态分布的密度函数。正态分布是一种钟形曲
8、线,越接近中心,取值越大,越远离中心,取值越小。5.2 空间域图像滤波3.高斯滤波高斯滤波的具体操作:用模板扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。在HALCON中高斯滤波的算子为gauss_filter,其命令格式为:gauss_filter(Image:ImageGauss:Size:)5.2 空间域图像滤波4.中值滤波均值滤波和高斯滤波均属于邻域平均法,它们在对噪声抑制的同时也会使得图像变得模糊,即图像的细节和边缘信息会被削弱。如果既要抑制噪声又要保持细节可以使用统计排序滤波方法。统计滤波器是一种非线性的滤波器,它根据图像滤波器包围的图像区
9、域中像素的排序结果来决定滤波后的的像素值。统计滤波器中最常见的是中值滤波器,顾名思义,它是将像素邻域内灰度值排序后以中值代替该像素的值。中值滤波器的主要功能是使拥有不同灰度的点看起来更接近于它的邻近值,或者说去除那些相对于其邻域像素更亮或者更暗,并且其区域小于滤波器尺寸一半的孤立像素集。5.2 空间域图像滤波4.中值滤波中值滤波的具体实现步骤:(1)将窗口在图中移动;(2)读取窗口内各对应像素的灰度值;(3)将这些灰度值从小到大排成一列;(4)找出这些值中排在中间的一个;727263637236097272、72、72、72、63、63、36、9、07272636363360972 5.2 空
10、间域图像滤波4.中值滤波在HALCON中中值滤波算子为median_image,命令格式为:median_image(Image:ImageMedian:MaskType,Radius,Margin:)其中参数含义为:Image:待处理图像 ImageMedian:中值滤波后的图像 Masktype:可以用来选择中值滤波的模板形状,可以选择circle(圆)、square(方形)Radius:模板的大小 Margin:边缘像素处理方法,可以选的值有gray value(固定值)、continued(边界元素的延续)、cyclic(图像边界像素的周期性延续)、mirrored(边界像素的镜像)等
11、。5.2 空间域图像滤波5.三种滤波方式的比较图像传感器CCD和CMOS采集图像过程中,由于受传感器材料属性、工作环境、电子元器件和电路结构等影响,会引入各种噪声。噪声在图像上常表现为孤立像素点或像素块。噪声信号与要研究的对象不相关,会降低图像的清晰度。常见的图像噪声有高斯噪声、泊松噪声、乘性噪声、椒盐噪声等。5.2 空间域图像滤波5.三种滤波方式的比较图像滤波是图像预处理的重要环节,不同的滤波器适用于不同的噪声。三种滤波算法对高斯噪声图像处理结果三种滤波算法对椒盐噪声图像的处理结果 5.2 空间域图像滤波5.三种滤波方式的比较从结果上看,三种滤波方法相比有以下几个方面的特点:(1)对大的边缘
12、强度,中值滤波的保持边缘信息的能力较另外两种滤波方法要好得多,而对于较小边缘高度,三种滤波只有很少差别。(2)中值滤波可以去除孤立线或点干扰,在处理椒盐噪声方面有很好的效果,但对高斯噪声的平滑效果则不如高斯滤波。5.2 空间域图像滤波6.【案例】分析液体中的颗粒图为HALCON中附带的例图“particle”。图中为某种液体,里面悬浮了微小颗粒,请分析出液体中的颗粒。【分析】图中存在两种类型的对象:大的明亮物体和亮度较低的小物体(颗粒)。图像整体上亮度分布不均匀,难以确定分割需要的全局阈值。先将大明亮物体等不需要检测的部分去除掉,再对图像做灰度动态阈值分割得到想要的内容。5.2 空间域图像滤波
13、6.【案例】分析液体中的颗粒read_image(Image,particle)*对图像进行全局阈值分割threshold(Image,Large,110,255)*圆角膨胀dilation_circle(Large,LargeDilation,7.5)*返回补充图像,即获得去除大斑点后的图像NotLargecomplement(LargeDilation,NotLarge)*减去除了NotLarge图像,即去除大斑点后的图像,减少运算reduce_domain(Image,NotLarge,ParticlesRed)*平滑处理图像mean_image(ParticlesRed,Mean,31
14、,31)*动态灰度阈值,其中Mean是参考图像,通过与ParticlesRed为原图,通过*对比找到邻域确定阈值。dyn_threshold(ParticlesRed,Mean,SmallRaw,3,light)*消除小区域(小于圆形结构元素)和光滑的边界地区opening_circle(SmallRaw,Small,2.5)*显示联通区域connection(Small,SmallConnection)5.3 频域图像滤波1.频域滤波原理法国数学家傅立叶提出,在满足某些数学条件下,任何周期函数都可以表示为不同频率的正弦和或/余弦和的形式,每个正弦和/或余弦乘以不同的系数,甚至非周期的有限函数
15、也可以用正弦和/或余弦乘以加权函数的积分来表示。这种情况下的公式就是傅立叶变换。5.3 频域图像滤波1.频域滤波原理 用傅立叶变换表示的函数,可以通过傅立叶反变换来进行重建且不丢失信息。正是基于这个重要特征,对信号的处理可以工作在“频率域”,在变换回函数的原始域时不丢失其它任何信息。一幅数字图像可定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f(x,y)的值被称为图像在该点处的灰度或强度,数字图像又被称为时域图。图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图。5.3 频域图像滤波1.频域滤波原理 图
16、像与声音频率的对照,其中的低频率表现在图像上代表图像的平坦、粗糙的部分,高频率表现在图像上代表图像的细节部分。5.3 频域图像滤波1.频域滤波原理 图像的频率处理是使用傅立叶变换。如果去掉图像中的高频部分,也就是去掉图像的细节,图像会变模糊;如果去掉图像中的低频部分,也就是消除图像的粗略部分,会留下图像的边缘信息。在进行图像的频域处理时,首先要将图像转换到频率域,然后对频率域做处理,然后将结果转换回原来的空间,从而完成对图像的操作。5.3 频域图像滤波1.频域滤波原理u HALCON中通过fft_image算子得到图像的频谱图,通过fft_image_inv实现由频域到实域的反变换。u HAL
17、CON中还可以通过fft_generic(Image:ImageFFT:Direction,Exponent,Norm,Mode,ResultType:)算子,来实现从实域至频域,或者从频域至实域的变换。其中主要参数含义为:Image:输入待变换图像ImageFFT:输出傅立叶变换后的图像。Direction:变换方向。“to_freq”为时域到频域变换;“from_freq”为频域到时域的变换Norm:归一化方法Mode:直流分量在频谱中的位置。“dc_cente”为频谱中间;“dc_edge”为频谱边缘ResultType:输出图像的类型,其中“complex”为复数 5.3 频率域图像滤
18、波2.频率域低通滤波 由于噪声主要集中在高频部分,为去除噪声改善图像质量,可以采用低通滤波器来通过低频成分,抑制高频成分,然后再进行逆傅立叶变换获得滤波图像,就可达到平滑图像的目的。常用的频率域平滑滤波器有3种:理想低通滤波器、巴特沃思低通滤波器、高斯低通滤波器。(1)理想低通滤波器 它是最简单的低通滤波器,直接“截断”傅立叶变换中所有距变换原点的距离比指定距离D0要远的高频成分。理想低通滤波器频谱图和幅频曲线 5.3 频率域图像滤波2.频率域低通滤波 在半径为D0的圆内,所有频率没有衰减地通过滤波器,而在此半径的圆之外的所有频率完全被衰减掉。图像处理中,如果用理想低通波器对一幅图像进行滤波处
19、理,则会使滤波图像产生“振铃”现象,所谓“振铃”,就是指输出图像的灰度剧烈变化处产生的震荡,就好像钟被敲击后产生的空气震荡。HALCON中创建理想低通滤波器相关算子为gen_lowpass(:ImageLowpass:Frequency,Norm,Mode,Width,Height:)。其中主要参数含义:ImageLowpass:输入的图像;Frequency:截断频率(即图5-17中的D0);Norm:滤波器的归一化因子;Mode:直流分量在频域的位置;Width,Height:输入图像的宽和高 5.3 频率域图像滤波2.频率域低通滤波(2)巴特沃斯低通滤波器 巴特沃思低通滤波器频谱图和幅频
20、曲线,它的特点是在通频带内的频率响应曲线最大限度平坦和没有起伏,而在阻频带则逐渐下降为零。巴特沃思低通滤波器频谱图和幅频曲线 5.3 频率域图像滤波2.频率域低通滤波(3)高斯低通滤波器 高斯函数的傅里叶变换仍然是高斯函数,故高斯型滤波器不会产生“振铃”现象。高斯低通滤波器频谱图和幅频曲线 5.3 频率域图像滤波2.频率域低通滤波(3)高斯低通滤波器 HALCON中可以通过gen_gauss_filter(:ImageGauss:Sigma1,Sigma2,Phi,Norm,Mode,Width,Height:)算子来生成一个高斯滤波器。其中主要参数含义:ImageGauss:输出的高斯滤波器
21、Sigma1:高斯滤波器在空间域主方向的标准差Sigma2:与主方向垂直方向的标准差;Phi:空间域的主方向Norm:滤波器的归一化因子;Mode:直流分量在频域的位置;Width,Height:输入图像的宽和高 5.3 频率域图像滤波2.频率域低通滤波 低通滤波器主要实现对图像的模糊处理和平滑,除此之外,低通滤波器还可以实现断裂图形的连接。如图(a)图为通过扫描仪获得的字符图像,存在多处断裂,(b)图为(a)图经低通滤波处理后的图像,从图中可知可以得到两个相对完整的字符,方便后续的OCR识别。低通滤波器还可以应用于处理卫星和航空图像,使得图像的细节模糊,而保留大的可识别特征,通过消除不重要的
22、特征来简化感兴趣特征的分析。5.3 频率域图像滤波3.【案例】低通滤波器的应用图为HALCON自带的附图“fingeprint”,用高斯低通滤波器对该图图进行平滑滤波。5.3 频率域图像滤波3.【案例】低通滤波器的应用read_image(Image,fingerprint.png)get_image_size(Image,Width,Height)*生成一个高斯滤波器gen_gauss_filter(ImageGauss1,4,2,0,none,rft,Width,Height)*对图像进行傅立叶变换rft_generic(Image,ImageFFT1,to_freq,none,compl
23、ex,Width)*用高斯滤波器对图像进行平滑滤波convol_fft(ImageFFT1,ImageGauss1,ImageConvol)*滤波结果变换回空间域rft_generic(ImageConvol,ImageFFT2,from_freq,n,real,Width)5.3 频率域图像滤波4.频率域高通滤波图像的边缘、细节主要位于高频部分,而图像的模糊是由于高频成分比较弱产生的。采用高通滤波器让高频成分通过,使低频成分削弱,再经逆傅立叶变换得到边缘锐化的图像,从而实现消除模糊和突出边缘的效果。频率域的高通滤波器主要有:理想高通滤波器、巴特沃思高通滤波器、高斯高通滤波器等。(1)理想高通
24、滤波器理想高通滤波器的频谱图和幅频曲线 5.3 频率域图像滤波4.频率域高通滤波(2)巴特沃斯高通滤波器(3)高斯高通滤波器 5.3 频率域图像滤波5.【案例】应用高斯高通滤波器提取图像轮廓图为HALCON中的例图“tooth_rim”,请用高斯高通滤波器提取图像的轮廓。【分析】图像的边缘对应频谱的高频部分,可以通过构造一个高频滤波器,过滤掉图像的低频部分,从而得到图像的边缘。HALCON中没有直接生成高斯高通滤波器的算子,需要先生成一个实数型的图像,图像上每个像素值为1;再生成一个高斯低通滤波器,两者相减,从而构造一个高通滤波器。5.3 频率域图像滤波5.【案例】应用高斯高通滤波器提取图像轮
25、廓read_image(Image,tooth_rim.png)rgb1_to_gray(Image,GrayImage)get_image_size(GrayImage,Width,Height)*构造一个高斯低通滤波器gen_gauss_filter(ImageGauss,0.1,0.1,0,none,dc_center,Width,Height)*构造一个值为0的实数型图像gen_image_const(Image1,real,Width,Height)paint_region(Image1,Image1,ImageResult,1,fill)*两者相减,构造高斯高通滤波器sub_ima
26、ge(ImageResult,ImageGauss,ImageSub,1,0)*傅立叶变换,得到图像的频域图像fft_generic(GrayImage,ImageFFT2,to_freq,-1,none,dc_center,complex)*用高通滤波器实现滤波convol_fft(ImageFFT2,ImageSub,ImageConvol2)*从频域反变换回时域fft_generic(ImageConvol2,ImageResult2,from_freq,1,sqrt,dc_center,byte)5.3 频率域图像滤波5.【案例】应用高斯高通滤波器提取图像轮廓图5-27(a)为原图的频
27、谱;图5-27(b)为高斯高通滤波器的频谱;图5-27(c)为滤波后的图像频谱;图5-27(d)为反变换后得到的边缘read_image(Image,tooth_rim.png)rgb1_to_gray(Image,GrayImage)get_image_size(GrayImage,Width,Height)*构造一个高斯低通滤波器gen_gauss_filter(ImageGauss,0.1,0.1,0,none,dc_center,Width,Height)*构造一个值为0的实数型图像gen_image_const(Image1,real,Width,Height)paint_regio
28、n(Image1,Image1,ImageResult,1,fill)*两者相减,构造高斯高通滤波器sub_image(ImageResult,ImageGauss,ImageSub,1,0)*傅立叶变换,得到图像的频域图像fft_generic(GrayImage,ImageFFT2,to_freq,-1,none,dc_center,complex)*用高通滤波器实现滤波convol_fft(ImageFFT2,ImageSub,ImageConvol2)*从频域反变换回时域fft_generic(ImageConvol2,ImageResult2,from_freq,1,sqrt,dc_
29、center,byte)5.3 频率域图像滤波6.频率域的带阻/带通滤波器带阻滤波器指将某一频率范围内的频率分量衰减到极低水平,而让其它范围内的频率分量通过。而带通滤波器则与之相反,它是指让某一频率范围内的频率分量通过,而将其他范围的频率分量衰减到极低水平的滤波器。常见的频率域的带阻/带通滤波器包括理想带阻/带通滤波器、巴特沃思带阻/带通滤波器以及高斯带阻/带通滤波器等。(1)理想带阻/带通滤波器 5.3 频率域图像滤波6.频率域的带阻/带通滤波器(2)巴特沃斯带阻/带通滤波器(3)高斯带阻/带通滤波器Butterworth带阻滤波器的频谱图和幅频曲线高斯带阻滤波器的频谱图和幅频曲线 5.3
30、频率域图像滤波6.频率域的带阻/带通滤波器HALCON中创建带通滤波器有如下算子:(1)gen_bandpass(:ImageBandpass:MinFrequency,MaxFrequency,Norm,Mode,Width,Height:)创建一个理想带通滤波器其中主要参数含义:ImageBandpass:理想带通滤波器;MinFrequency,MaxFrequency:滤波器的最低、最高频率。(2)gen_sin_bandpass(:ImageFilter:Frequency,Norm,Mode,Width,Height:)创建一个正弦形状的带通滤波器。Frequency:带通滤波器距
31、离直流分量的最大距离,值介于0和1之间。(3)gen_std_bandpass(:ImageFilter:Frequency,Sigma,Type,Norm,Mode,Width,Height:)创建一个高斯或正弦形状的带通滤波器其中主要参数含义:Sigma:带通滤波器的宽度,值介于0和1之间。Type:滤波器的类型,值为gauss则为高斯滤波器,值为sin为正弦滤波器。5.3 频率域图像滤波7.【案例】应用带通滤波器进行划痕检测图为HALCON中的例图“surface_scratch”,请提取出图中的划痕。【分析】图中明亮程度不一,划痕颜色较淡,因此不能用灰度BLOB分析的方法提取出目标区域
32、。因此,先构造一个带通滤波器,用于去除背景光线的干扰,再对得到的图像作BLOB分析,提取出图像中的划痕。5.3 频率域图像滤波7.【案例】应用带通滤波器进行划痕检测read_image(Image,surface_scratch)invert_image(Image,ImageInverted)get_image_size(Image,Width,Height)*创建一个正弦形状的带通滤波器gen_sin_bandpass(ImageBandpass,0.4,none,rft,Width,Height)*快速傅立叶变换rft_generic(ImageInverted,ImageFFT,to_
33、freq,none,complex,Width)*带通滤波convol_fft(ImageFFT,ImageBandpass,ImageConvol)*反变换rft_generic(ImageConvol,Lines,from_freq,n,byte,Width)*从原图中得到划痕区域threshold(Lines,Region,5,255)connection(Region,ConnectedRegions)select_shape(ConnectedRegions,SelectedRegions,area,and,5,5000)5.3 频率域图像滤波7.【案例】应用带通滤波器进行划痕检测d
34、ilation_circle(SelectedRegions,RegionDilation,5.5)union1(RegionDilation,RegionUnion)reduce_domain(Image,RegionUnion,ImageReduced)*将划痕区域连接成线lines_gauss(ImageReduced,LinesXLD,0.8,3,5,dark,false,bar-shaped,false)union_collinear_contours_xld(LinesXLD,UnionContours,40,3,3,0.2,attr_keep)select_shape_xld(UnionContours,SelectedXLD,contlength,and,15,1000)gen_region_contour_xld(SelectedXLD,RegionXLD,filled)union1(RegionXLD,RegionUnion)dilation_circle(RegionUnion,RegionScratches,10.5)