智能图像处理:Python和OpenCV实现-课件 第五章 图像空域滤波_第1页
智能图像处理:Python和OpenCV实现-课件 第五章 图像空域滤波_第2页
智能图像处理:Python和OpenCV实现-课件 第五章 图像空域滤波_第3页
智能图像处理:Python和OpenCV实现-课件 第五章 图像空域滤波_第4页
智能图像处理:Python和OpenCV实现-课件 第五章 图像空域滤波_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章图像空域滤波目录CONTENTS图像平滑(低通滤波器)5.2图像锐化(高通滤波器)5.3空域滤波5.15.1空域滤波空域滤波是一种邻域处理方法,通过直接在图像空间中对邻域内像素进行处理,即应用某一卷积模板(也称为卷积核)对每一个像素及其周围邻域的所有像素进行某种数学运算,得到该像素的灰度值。新的灰度值不仅与该像素的灰度值有关,而且还与其邻域内像素点的灰度值有关。空域滤波的作用域是像素及其邻域,通常使用空域模板对邻域内的像素进行处理从而产生该像素的输出值。空域滤波主要可以分为线性滤波和非线性滤波。其中,如果在图像像素上执行的是线性操作,则该滤波器称为线性空域滤波,否则,滤波器就称为非线性空域滤波。空域滤波1.线性滤波线性空域滤波是指像素的输出值是计算该像素邻域内像素值的线性组合,系数矩阵称之为模板。线性滤波可以用卷积来实现,其滤波模板称为卷积模板。根据卷积的定义可以知道,卷积首先需要将模板进行反转,也就是将模板绕模板中心旋转180°,但在数字图像处理中,卷积模板通常是关于原点对称的,因此通常不需要考虑反转过程。模板卷积的主要步骤如下:模板在图像中进行遍历,将模板中心和各个像素位置重合;模板中的各个系数与模板对应图像像素值进行相乘;所有的乘积相加并求和,结果赋值给模板中心对应的像素。空域滤波1.线性滤波

空域滤波2.非线性滤波

在非线性空域滤波中也是采用基于邻域的处理,而且模板滑过一幅图像的机理和线性空域滤波是一致的。非线性滤波处理也取决于模板对应邻域内的像素,然而,因为不能直接利用上面g(x,y)的表达式计算乘积求和。空域滤波

使用卷积模板时候,常常会碰到边界问题:当处理图像边界像素时,卷积模版与图像使用区域不能匹配,卷积核的中心与边界像素点对应,卷积运算将出现问题。常用的图像边界像素处理方法为:(1)忽略边界像素,即处理后的图像将丢掉这些像素。(2)保留原边界像素,即复制边界像素到处理后的图像。

利用模板进行空域滤波,可使原图像转换为增强图像,模板系数不同,得到不同的增强效果,从处理效果上可以把空域滤波分为平滑空域滤波和锐化空域滤波。5.2

图像平滑5.2图像平滑平滑滤波器实际上就是一个低通滤波器,用于模糊处理和降低噪声。通过将图像与低通滤波器内核进行卷积来实现图像平滑。模糊处理经常用于预处理任务中,如在目标提取之前去除图像中的琐碎细节,以及连接直线或曲线的缝隙,实际上从图像中消除了高频部分(如噪声、边缘)。通过线性滤波和非线性滤波平滑处理,可以降低噪声的影响。OpenCV主要的图像平滑技术有均值滤波、方框滤波、高斯滤波、中值滤波和双边滤波等。图像平滑5.2.1均值滤波器

均值滤波是指用当前像素点周围N×N个像素值的均值来代替当前像素值。使用该方法遍历处理图像内的每一个像素点,即可完成整幅图像的均值滤波。

在进行均值滤波时,首先要考虑需要对周围多少个像素点取平均值。通常情况下,我们会以当前像素点为中心,对行数和列数相等的一块区域内的所有像素点的像素值求平均。这种处理结果降低了图像灰度的“尖锐”变化,也就是降低了噪声。图像平滑5.2.1均值滤波器在OpenCV中提供了cv2.blur()函数来实现图像的均值滤波,其语法格式为:dst=cv2.blur(src,ksize,anchor=None,borderType=None)其中输入输出参数为:dst:表示返回的均值滤波处理后的图像;src:表示原始的图像;ksize:表示滤波卷积核的大小;anchor:表示图像处理的锚点,默认为(-1,-1),表示位于卷积核中心点;borderType:处理边界方式;图像平滑例5.1使用大小不同的卷积核对带有椒盐噪声的lena图像进行均值滤波,观察滤波效果。带有椒盐噪声的图像importcv2img=cv2.imread("d:/pics/lenasp.jpg")#读入带有椒盐噪声的图像

#定义不同大小的卷积核img1=cv2.blur(img,(3,3))#卷积核为3x3,实现均值滤波img2=cv2.blur(img,(7,7))#卷积核为7x7,实现均值滤波img3=cv2.blur(img,(15,15))#卷积核为15x15,实现均值滤波cv2.imshow("Originimage",img)#显示原始图像#显示滤波后的图像cv2.imshow("N=3image",img1)cv2.imshow("N=7image",img2)cv2.imshow("N=15image",img3)cv2.waitKey()cv2.destroyAllWindows()图像平滑(a)带有椒盐噪声的图像(b)卷积核为3x3均值滤波(c)卷积核为7ⅹ7均值滤波(d)卷积核为15ⅹ15均值滤波可以看出,核越大降噪效果越好,但是相反的是图像会越模糊。borderType:处理边界方式对图像进行处理时,提取在边界的某些目标时会出现访问越界的问题,一般这种情况有两种解决方案:1.只对边界内的像素进行访问;2.对图像的边界进行扩展。opencv中提供的图像边界扩展函数如下:1.BORDER_CONSTANT2.BORDER_REPLICATE3.BORDER_REFLECT4.BORDER_WRAP5.BORDER_REFLECT_1016.BORDER_ISOLATED

cv2.copyMakeBorder()函数详解dst=cv2.copyMakeBorder(src,top,bottom,left,right,borderType,value)src:输入的图片;top,bottom,left,right:相应方向上的边框宽度;borderType:定义要添加边框的类型;value:如果borderType为cv2.BORDER_CONSTANT时需要填充的常数值。1.BORDER_CONSTANT这个是使用指定像素值来填充边缘,需要额外指定的像素。如指定像素值为6,那我们使用这种方式得到的边缘就是:当然我们在实际使用中一般都是彩色图像,所以我们指定像素一般使用Scalar类型定义。importcv2

img=cv2.imread('d:/pics/flower1.jpg')rusult1=cv2.copyMakeBorder(img,20,20,20,20,

cv2.BORDER_CONSTANT,value=[0,255,0])

cv2.imshow('Origin_img',img)cv2.imshow('BORDER_CONSTANT',rusult1)cv2.waitKey(0)cv2.destroyAllWindows()2.BORDER_REPLICATE这个是使用用已知的边缘像素值来填充边缘。比如顶端填充的像素,使用的就是最上面一行的像素值进行填充。如果是四个角,那就用原图像中四个角的四个像素分别赋值:rusult2=cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_REPLICATE)3.BORDER_REFLECT这个是使用用已知的边缘像素值来反转填充边缘。和上面的不同,我们四边是通过边缘对称反转填充,四个角是通过原图像四个顶点中心对称反转填充:result3=cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REFLECT)4.BORDER_WRAP用另外一边的像素来补偿填充,就是顶部和底部的像素互相填充,左边和右边的像素互相填充,对角的像素互相填充:result4=cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_WRAP)5.BORDER_REFLECT_101使用用已知的边缘像素值来反转填充边缘。上面也有一个反转填充,这两个有什么区别呢?这个的名字也只是在上面的基础上添加了_101,也就是说这两个是类似的。5.BORDER_REFLECT_1013.BORDER_REFLECT第3是使用边做反转,这里第5使用边界像素做反转,边界的像素是不会填充到外部边缘的。那这种方式有什么好处呢?一方面,我们原图像边界的像素只使用了一次,不会出现两次;另一方面,我们图像的边缘拓展更加自然。这种方式和另外两种方式是一致的,它们分别是:BORDER_REFLECT101和BORDER_DEFAULT。6.BORDER_ISOLATED

这个是使用黑色进行填充,本质上就是填充0。rusult6=cv2.copyMakeBorder(img,20,20,20,20,cv2.BORDER_ISOLATED)图像平滑5.2.2方框滤波方框滤波与均值滤波的不同,方框滤波不会计算像素均值。在均值滤波中,滤波结果的像素值是任意一个点的邻域平均值,等于各邻域像素值之和除以邻域面积。而在方框滤波中,可以自由选择是否对均值滤波的结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。图像平滑5.2.2方框滤波在OpenCV中,实现方框滤波的函数是cv2.boxFilter(),其语法格式为:dst=cv2.boxFilter(src,ddepth,ksize,anchor,normalize,borderType)其中输入输出参数为:dst:表示进行方框滤波后得到的处理结果;src:表示原始图像。ddepth:表示处理结果图像的图像深度;ksize:表示滤波核的大小;anchor:表示锚点,其默认值是(-1,-1);normalize:表示在滤波时是否进行归一化处理。图像平滑例2.针对噪声图像,对其进行方框滤波,显示滤波结果。带有椒盐噪声的图像importcv2img=cv2.imread("d:/pics/lenasp.jpg")#读入带有椒盐噪声的图像

#定义不同大小的卷积核dst1=cv2.boxFilter(img,-1,(3,3),normalize=1)#进行归一化处理dst2=cv2.boxFilter(img,-1,(2,2),normalize=0)#无归一化处理

#显示滤波后的图像cv2.imshow("Originimage",img)#显示原始图像cv2.imshow("n=1image",dst1)#归一化处理滤波后的图像cv2.imshow("n=0image",dst2)#无归一化处理滤波后的图像cv2.waitKey()cv2.destroyAllWindows()图像平滑(a)带有噪声图像(b)normalize=1时方框滤波(c)normalize=0时方框滤波方框滤波函数对参数normalize进行设置,当normalize=1,即使用了默认值,表示要进行归一化处理,此时它和函数cv2.blur()的滤波结果是完全相同的;当参数normalize=0,没有对图像进行归一化处理,在进行滤波时,计算3×3邻域的像素值之和,这时像素值大于255的图像显示纯白色,小于255的部分有颜色,这部分有颜色是因为这些点周边邻域的像素值均较小,邻域像素值在相加后仍然小于255。图像平滑5.2.3高斯滤波器高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。高斯滤波是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。在高斯滤波中,按照与中心点的距离不同,赋予像素点不同的权重,靠近中心点的权重值较大,远离中心点的权重值较小,在此基础上计算邻域内各个像素值不同的权重和。如下面所示:121242121图像平滑5.2.3高斯滤波器在OpenCV中,实现高斯滤波的函数是cv2.GassianBlur(),其语法格式为:dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType=None)其中输入输出参数如下:dst:表示返回的高斯滤波结果;src:表示原始图像;ksize:表示滤波卷积核的大小,卷积核必须为奇数;sigmaX:表示卷积核在水平方向上的权重值;sigmaY:表示卷积核在水平方向上的权重值;borderType:处理边界方式。图像平滑例5.3对图像使用高斯滤波,观察滤波效果。带有椒盐噪声的图像importcv2img=cv2.imread("d:/pics/lenasp.jpg")#读入带有椒盐噪声的图像#高斯滤波image3=cv2.GaussianBlur(img,(3,3),0,0)#卷积核为3x3image7=cv2.GaussianBlur(img,(7,7),0,0)#卷积核为7x7image15=cv2.GaussianBlur(img,(15,15),0,0)#卷积核为15x15

#显示滤波后的图像cv2.imshow("Originimage",img)#显示原图cv2.imshow("N=3Gaussimage",image3)#显示3x3滤波后的图像cv2.imshow("N=7Gaussimage",image7)#显示7x7滤波后的图像cv2.imshow("N=15Gaussimage",image15)#显示15x15滤波后的图像cv2.waitKey()cv2.destroyAllWindows()图像平滑(a)带有椒盐噪声的图像(b)卷积核为3x3高斯滤波(c)卷积核为7ⅹ7高斯滤波(d)卷积核为15ⅹ15高斯滤波可以看出,高斯滤波器产生的模糊效果比均值滤波器更自然。图像平滑5.2.4中值滤波器中值滤波是一种典型的非线性滤波技术,它是排序滤波器的一种。这种滤波器的响应以滤波器包围的图像区域中所包含的像素排序为基础,然后使用统计排序结果决定的值代替中心像素的值。

982341656123456689图像平滑5.2.4中值滤波器在OpenCV中,实现中值滤波的函数是cv2.medianBlur(),其语法格式为:dst=cv2.medianBlur(src,ksize)其中输入输出参数为:dst表示返回的中值滤波处理结果;src表示输入图像;ksize表示滤波卷积核的大小,卷积核必须为奇数。图像平滑例5.4对图像使用中值滤波,观察滤波效果。带有椒盐噪声的图像importcv2img=cv2.imread("d:/pics/lenasp.jpg")#读入带有椒盐噪声的图像

#中值滤波image3=cv2.medianBlur(img,3)#使用卷积核为3*3的中值滤波image7=cv2.medianBlur(img,7)#使用卷积核为7*7的中值滤波image15=cv2.medianBlur(img,15)#使用卷积核为15*15的中值滤波

#显示滤波后的图像cv2.imshow("Originimage",img)#显示原始图像cv2.imshow("N=3medianimage",image3)#显示3*3滤波后的图像cv2.imshow("N=7medianimage",image3)#显示7*7滤波后的图像cv2.imshow("N=15medianimage",image3)#显示15*15滤波后的图像cv2.waitKey()cv2.destroyAllWindows()图像平滑(a)带有椒盐噪声的图像(b)卷积核为3x3中值滤波(c)卷积核为7ⅹ7中值滤波(d)卷积核为15ⅹ15中值滤波可以看出,中值滤波器对减少“椒盐噪声”非常有效。中值滤波不会改变信号中的阶跃变化,因此能够平滑信号中的噪声,同时又不会模糊信号的边缘信息,这个性质使得它能够很好的使用与图像空域滤波的相关应用。图像平滑5.2.5双边滤波双边滤波在计算某个像素点时不仅考虑距离信息,还会考虑色差信息,这种计算方式可以在有效去除噪声的同时保护边缘信息。在通过双边滤波处理边缘的像素点时,与当前像素点色差较小的像素点会被赋予较大的权重。相反,色差较大的像素点会被赋予较小的权重,双边滤波正是通过这种方式保护了边缘信息。在通过双边滤波计算边缘像素时,对于白色像素点赋予的权重较大,而对于黑色像素点赋予的权重很小,甚至是0。这样计算后的结果是白色仍然是白色,黑色仍然是黑色,边缘信息得到了保护。图像平滑5.2.5双边滤波在OpenCV中,实现双边滤波的函数是cv2.bilateralFilter(),其语法格式为:dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)其中输入输出参数为:dst:表示返回的双边滤波处理结果;src:表示原始图像;d:表示在滤波时选取的空间距离参数,即以当前像素点为中心点的半径;sigmaColor:表示双边滤波时选取的色差范围;sigmaSpace:表示坐标空间的sigma值,值越大,表示越多的点参与滤波;borderType:表示以何种方式处理图像边界。图像平滑例5.5对图像使用双边滤波,观察滤波效果。带有椒盐噪声的图像importcv2img=cv2.imread("d:/pics/lenasp.jpg")#读入带有椒盐噪声的图像

#双边滤波image1=cv2.bilateralFilter(img,30,50,100)#滤波半径30image2=cv2.bilateralFilter(img,70,50,100)#滤波半径70image3=cv2.bilateralFilter(img,150,50,100)#滤波半径150

#显示滤波后的图像cv2.imshow("Originimage",img)#带有椒盐噪声的图像cv2.imshow("BF1image",image1)#滤波半径30的图像cv2.imshow("BF2image",image2)#滤波半径70的图像cv2.imshow("BF3image",image3)#滤波半径150的图像cv2.waitKey()cv2.destroyAllWindows()图像平滑(a)带有椒盐噪声的图像(b)滤波半径为30双边滤波(c)滤波半径70双边滤波(d)滤波半径150双边滤波可以看出,在滤除原图像中平整部分噪声的同时,也较好的保留了原图像中的边缘信息。5.3

图像锐化5.3图像锐化图像锐化处理的目的是使模糊的图像变得更加清晰起来,图像的模糊实质就是图像受到平均或积分运算造成的,因此可以对图像进行还原运算如微分运算来使图像清晰化。从频谱角度来分析,图像模糊的实质是其高频分量被衰减,因而可以通过高通滤波操作来清晰图像。图像锐化滤波能减弱或消除图像中的低频分量,但不影响高频分量。因为低频分量对应图像中灰度值缓慢变化区域,因而与图像的整体特性如整体对比度和平均灰度值有关。锐化滤波能使图像反差增加、边缘明显,可用于增强图像中被模糊的细节或景物边缘。图像锐化5.3.1拉普拉斯滤波拉普拉斯滤波是利用拉普拉斯算子(Laplacian)在图像邻域内进行像素灰度差分计算,通过二阶微分推导出的一种图像邻域增强算法。其基本思想是当邻域的中心像素灰度低于它所在邻域内的其他像素的平均灰度时,此中心像素的灰度应该进一步降低;当高于时进一步提高中心像素的灰度,从而实现图像锐化处理。0101-41010

常用的一个模板图像锐化5.3.1拉普拉斯滤波在OpenCV中,实现Laplacian滤波的函数cv2.Laplacian(),其语法格式为:dst=cv2.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])其中输入参数为:src:需要处理的图像;ddepth:图像的深度,-1表示采用的是与原图像相同的深度。Ksize:算子的大小;Scale:缩放导数的比例常数,默认情况下没有伸缩系数;delta:是一个可选的增量,将会加到最终的dst中;borderType是判断图像边界的模式。图像锐化例5.6使用拉普拉斯算子锐化图像,观察效果。importcv2img=cv2.imread('d:/pics/onion.png')#读入一幅彩色图像#进行拉普拉斯算子运算lap=cv2.Laplacian(img,cv2.CV_16S,ksize=3)#求绝对值并转为8比特图像laplacian=cv2.convertScaleAbs(lap)

#显示滤波后的图像cv2.imshow("Original",img)#原图像cv2.imshow("Laplacian",laplacian)#经拉普拉斯算子后的图像cv2.waitKey()cv2.destroyAllWindows()图像锐化可以看出,在滤除原图像中平整部分噪声的同时,也较好的保留了原图像中的边缘信息。图像锐化5.3.2自定义卷积核滤波OpenCV提供了多种滤波方式,来实现图像的平滑、锐化效果,大多数滤波方式所使用的卷积核都具有一定的灵活性,能够方便地设置卷积核的大小和数值。但是,我们有时希望使用特定的卷积核实现卷积操作,这时前面介绍过的滤波函数都无法将卷积核确定为特定形式,这时要使用OpenCV的自定义卷积函数。图像锐化5.3.2自定义卷积核滤波在OpenCV中,实现Laplacian滤波的函数cv2.filter2D(),其语法格式为:dst=cv2.filter2D(src,ddepth,kernel[,anchor[,delta[,borderType]]])其中输入输出参数为:dst:表示输出图像;src:输入原图像;ddepth:输出图像的深度;kernel:表示卷积核,一个单通道数组矩阵。anchor:表示内核的基准点,其默认值为(-1,-1),位于中心位置;delta:修正值,可选项,默认值为0;borderType:表示边界处理方式,通常使用默认值即可。图像锐化例5.7使用自定义卷积核滤波器对图像进行滤波处理importcv2importnumpyasnp

#读入图像img=cv2.imread('d:/pics/lena.jpg')img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转化为灰度图像

#使用自定义的卷积函数kernel3=np.array([[-1,-1,0],[-1,0,1],[0,1,1]])kernel5=np.array([[-1,-1,-1,-1,0],[-1,-1,-1,0,1],[-1,-1,0,1,1],[-1,0,1,1,1],[0,1,1,1,1]])

image3=cv2.filter2D(img_gray,-1,kernel3)image5=cv2.filter2D(img_gray,-1,kernel5)

#显示滤波后的图像cv2.imshow("Originimage",img_gray)#原始图像cv2.imshow("k3image",image3)#卷积核k3图像cv2.imshow("k5image",image5)#卷积核k5图像cv2.waitKey()cv2.destroyAllWindows()图像锐化(a)原图像

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论