数字图像处理与深度学习技术应用教材配套课件 第6章 图像平滑处理_第1页
数字图像处理与深度学习技术应用教材配套课件 第6章 图像平滑处理_第2页
数字图像处理与深度学习技术应用教材配套课件 第6章 图像平滑处理_第3页
数字图像处理与深度学习技术应用教材配套课件 第6章 图像平滑处理_第4页
数字图像处理与深度学习技术应用教材配套课件 第6章 图像平滑处理_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第6章图像平滑处理6.1概述概述图像平滑或滤波目的是消除噪声,降低干扰,改善图像质量。图像平滑常用的方法是采用区域处理,利用相邻的像素值,进行均值滤波或中值滤波。6.1平滑处理的基本方法图像在获取、传输过程中,受干扰的影响,会产噪声,噪声干扰正常信号。造成图像毛糙。图像去噪是一种信号滤波的方法,目的是保留有用信号,去掉噪音信号。噪声是随机产生的,分布不规则,大小也不规则。噪声像素的灰度是空间不相关,与邻近像素显著不同。图像噪声噪声

(a)随机噪声

(b)椒盐噪声

一幅图像往往受到各种噪声的干扰,噪声常为一些孤立的像素点,往往是叠加在图像上的随机噪声,像雪花使图像被污染,而图像灰度应该相对连续变化的,一般不会突然变大或变小,这种噪声可以用邻域平均法使它得到抑制。邻域平均法(均值滤波)邻域平均法是一种利用模板对图像进行模板操作(卷积运算)法,常用的3×3和5×5模板如下:邻域平均法邻域平均法是一种利用模板对图像进行模板操作(卷积运算)的方法(b)5x5模版邻域平均法也叫均值滤波,是对待处理的像素给定一个模板,该模板包括了其周围的邻近像素,用模板中的全体像素的均值来替代原来的像素值。(a)3x3模版邻域平均法邻域平均法:通过一点和邻域内像素点求平均来去除突变的像素点,优点是算法简单,计算速度快,代价是会造成图像一定程度上的模糊。邻域平均法存在的问题如果窗口内各点的噪声是独立等分布的,经过这种方法平滑后,信噪比可提高倍。在此算法中,M,N的值不宜过大,因为M,N值的大小对速度有直接影响,且M,N值越大变换后的图像越模糊,特别是在边缘和细节处。邻域平均法存在的问题可以抑制高频成分,但也使图像变得模糊。平滑效果不好,减少噪音的同时,损失了高频信息。邻域平均法存在的问题效果展示邻域平均法是一种利用模板对图像进行模板操作(卷积运算)法,常用的3×3和5×5模板如下:邻域平均法邻域平均法:,代价是会造成图像一定程度上的模糊。邻域平均法存在的问题M,N值越大变换后的图像越模糊,特别是在边缘和细节处。邻域平均法存在的问题按照与中心点的距离不同,赋予像素点不同的权值,靠近中心点的权重值较大,远离中心点的权重值较小,在此基础上计算邻域内各个像素值不同权重的和。

Gaussian平滑法邻域处理---模板1)将模板在图中漫游,并将模板中心与图中某个像素位置重合;2)将模板上系数与模板下对应像素相乘;3)将所有乘积相加;4)将和赋给图中对应模板中心位置的像素。卷积步骤卷积的处理过程卷积的处理过程为得到一幅经过完整的经过滤波处理的图像,必须对x=0,1,2,…,M-1和y=0,1,2,…,N-1依次应用公式。在M×N的图像f上,用m×n大小的掩模:其中a=(m-1)/2且b=(n-1)/2,处理的掩模长与宽都为奇数。简化表达形式:3×3的掩模:模板操作“-”表示无法进行模板操作的像素点。卷积运算的边界问题?边界问题的解决1)忽略图像边界数据;多采用该方法。2)在图像四周复制原图像边界像素的值,从而使卷积核悬挂在图像四周时可以进行正常的计算。3)计算出来的像素值的超出范围问题,对此可简单地将其值置为0或255。边界问题的解决中值滤波法中值滤波:抑制噪声又要保持细节。将窗口中奇数个数据按大小顺序排列,处于中心位置的那个数作为处理结果。取3X3窗口从小到大排列,取中间值中值滤波法3×3模板:中间值序号是5。5×5模板:中间值序号是13。7×7模板:中间值序号是25。9×9模板:中间值序号是41。模板操作中值滤波几种常用窗口中值滤波几种常用窗口均值滤波器对高斯噪声的滤波效果较好,对椒盐噪声的滤波效果不好。中值滤波器对椒盐噪声的滤波效果较好,对高斯噪声的滤波效果不好。均值滤波器对高斯噪声的滤波效果较好,对椒盐噪声的滤波效果不好。中值滤波器对椒盐噪声的滤波效果较好,对高斯噪声的滤波效果不好。高斯滤波Python实现cv2.GassianBlur()函数来实现图像的高斯滤波。dst=cv2.GassianBlur(src,ksize,sigmaX,sigmaY,borderType)dst表示返回的高斯滤波处理结果。src表示原始图像,该图像不限制通道数目。ksize表示滤波卷积核的大小,奇数。sigmaX--卷积核在水平方向上的权重值。sigmaY--卷积核在垂直方向上的权重值。borderType表示以哪种方式处理边界值。

importcv2ascvimage=cv.imread("F:/picture/g1.jpg")#读取一幅图像cv.imshow("image",image)#显示原图#定义卷积和为5*5,gauss=cv.GaussianBlur(image,(5,5),0,0)cv.imshow("gauss",gauss)#显示滤波后的图像

均值滤波Python实现cv2.blur()函数来实现图像的均值滤波。dst=cv2.blur(src,ksize,anchor,borderType)dst--返回的均值滤波处理结果。src--原始图像,该图像不限制通道数目。ksize--滤波卷积核的大小。anchor---其默认值为(-1,-1),卷积核中心点。borderType表示以哪种方式处理边界值。

【例】importcv2ascvimage=cv.imread("F:/picture/g1.jpg")#读取一幅图像cv.imshow("image",image)#显示原图means5=cv.blur(image,(5,5))#定义卷积和为5×5,实现均值滤波means10=cv.blur(image,(10,10))#定义卷积和10×10,实现均值滤波means20=cv.blur(image,(20,20))#定义卷积和20×20,实现均值滤波

随着卷积核的增大,图像的失真情况越来越严重。

在方框滤波中,可以选择是否对均值滤波的结果进行归一化,即可以选择滤波结果是邻域像素值之和的平均值,还是邻域像素值之和。

方框滤波方框滤波Python实现cv2.boxFilter()函数来实现图像的方框滤波。dst=cv2.boxFilter(src,depth,ksize,anchor,normalize,borderType)dst:返回的方框滤波处理结果。src:原始图像,该图像不限制通道数目。depth:处理后图像的深度,-1表示与原始图像相同的深度。ksize:滤波卷积核的大小。anchor:图像处理的锚点,默认(-1,-1),卷积核中心点。normalize:是否进行归一化操作。borderType:以哪种方式处理边界值。

#定义卷积和为5*5,-1深度与原图同,normalize=0不进行归一化box5_0=cv.boxFilter(image,-1,(5,5),normalize=0)box2_0=cv.boxFilter(image,-1,(2,2),normalize=0)#定义卷积和为5*5,normalize=1进行归一化box5_1=cv.boxFilter(image,-1,(5,5),normalize=1)#定义卷积和为2*2,normalize=1进行归一化box2_1=cv.boxFilter(image,-1,(2,2),normalize=1)cv.imshow("box5_0",box5_0)#显示滤波后的图像

中值滤波Python实现cv2.medianBlur()函数来实现图像的中值滤波。dst=cv2.medianBlur(src,ksize)dst表示返回的方框滤波处理结果。src表示原始图像,该图像不限制通道数目。ksize表示滤波卷积核的大小。importcv2ascvimage=cv.imread("F:/picture/jiao1.jpg")#读取一幅图像cv.imshow("image",image)#显示原始图像#使用卷积核为5*5的中值滤波median=cv.medianBlur(image,5)cv.imshow("median",median)#显示滤波结果cv.waitKey()cv.destroyAllWindows()中值滤波可以有效地处理椒盐噪声,而且不会产生图像模糊的现象。高斯滤波以距离为权重,设计滤波系数,只考虑空间位置上的关系,丢失边缘的信息。双边滤波在高斯基础上,叠加了像素值的考虑,非线性滤波,对保留边缘更有效。

6.6双边滤波空间距离:当前点距离滤波模板中心点的欧式距离。灰度距离:当前点距离滤波模板中心点的灰度的差值的绝对值双边滤波的核函数是空间域核与像素范围域核的综合结果:1)平坦区域,变化很小,差值接近于0,范围域权重接近于1,空间域权重起作用,相当于进行高斯模糊;2)边缘区域,像素差值大,像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘的信息。在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。双边滤波Python实现cv2.bilateralFilter()实现图像的双边滤波。dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)dst:返回的双边滤波处理结果。src:原始图像,该图像不限制通道数目。d:空间距离参数,以当前像素点为中心点的半径。一般取5。sigmaColor:双边滤波时选取的色差范围。sigmaSpace:坐标空间sigma值,越大,越多点滤波。borderType:以何种方式处理边界

importcv2ascvimage=cv.imread("F:/picture/luot.jpg")#读取一幅图像cv.imshow("image",image)#显示原始图像gauss=cv.GaussianBlur(image,(55,55),0,0)#对图像进行高斯滤波bilateral=cv.bilateralFilter(image,55,100,100)#对图像进行双边滤波

虽然OpenCV提供了多种滤波方式来实现平滑图像的效果,希望使用特定的卷积核实现卷积操作,自定义卷积核实现图像的平滑处理。

6.72D卷积核的实现自定义卷积核Python实现在OpenCV中,允许用户使用实现卷积操作dst=cv2.filter2D(src,d,kernel,anchor,delta,borderType)dst:返回的双边滤波处理结果。src:原始图像,该图像不限制通道数目。d:处理结果图像的图像深度,-1表示与原始图像相同深度。kernel:一个单通道的卷积核。anchor:图像处理的锚点,(-1,-1)位于卷积核中心点。delta:修正值,可选。会在滤波的基础上加上该值果。borderType:以何种情况处理边界。

image=cv.imread("F:/picture/lena.png")#读取一幅图像cv.imshow("image",image)#显示原始图像k1=np.ones((13,13),np.float32)*3/(13*13)#13×13卷积核k2=np.ones((9,9),np.float32)*2/81#9×9的卷积核k3=np.ones((5,5),np.float32)/25#5×5的卷积核out1=cv.filter2D(image,-1,k1)#13×13卷积核进行滤波cv.imshow("out1",out1)#显示滤波后的图像cv.imshow("out2",out2)#显示滤波后的图像6.2噪声消除法6.2.1二值图像的黑白点噪声滤波用3×3模板的均值进行滤波:当f(i,j)周围的8个像素的平均值为a时,若|f(i,j)-a|>127.5,

则对f(i,j)的黑白进行翻转;若不到127.5,则f(i,j)不变。

二值图像的黑白点噪声滤波二值图像的黑白点噪声滤波该方法相当于如下3×3模板:1)取得图像大小、数据区,并把数据区复制到缓冲区中;2)循环取得各点像素值;3)取得该点周围8像素值的平均值;4)平均值与该点像素值相比,若大于127.5则把该点颜色反转;实现步骤for(intj=1;j<height-1;j++)for(inti=1;i<wide-1;i++){averg=0; averg=(int)((p_data[(j-1)*wide+(i-1)]+p_data[(j-1)*wide+i]+p_data[(j-1)*wide+(i+1)]+p_data[j*wide+(i-1)] +p_data[j*wide+i+1]+p_data[(j+1)*wide+(i-1)]+p_data[(j+1)*wide+i]+p_data[(j+1)*wide+i+1])/8);

if(abs(averg-p_temp[j*wide+i])>127.5) p_temp[j*wide+i]=averg;}

(a)原图(b)二值图像的黑白点噪声滤波二值图像的黑白点噪声滤波效果图函数说明(1)retval=image.getdata(band=None)将此图像的内容作为一个包含像素值的序列对象返回。该序列对象是平铺的,所以第一行的值直接跟在第0行的值之后,以此类推。retval:包含像素值的序列的对象;band:返回频段。默认是返回所有波段。要返回单个波段,需要传入索引值(例如,从“RGB”图像中获得“R”波段,则索引值为0)。(2)retval=image.putpixel(xy,color)用于修改x,y处的像素。retval:返回一个修改后的图像;xy:像素坐标,以(x,y)的形式给出;value:像素值。效果展示6.2.2消除孤立黑像素点在二值图像中,消除孤立于周围的黑像素点(变成白的)。*****

**

*****四邻域八邻域在4点邻域的情况下,若黑像素f(i,j)的上下左右4个像素全为白,则f(i,j)为白。在8点邻域法相似。消除孤立黑像素点1)取得图像大小、数据区,并把数据区复制到缓冲区中;2)循环取得各点像素值;3)判断为4连接或8连接;4)为4连接时,若该点上下左右4个像素全为白,则该点置白,8邻域处理法相似。实现步骤if(connec==4){ for(intj=1;j<height-1;j++) for(inti=1;i<wide-1;i++) { if(*(p_temp+wide*j+i)==255) continue;if((*(p_temp+wide*(j-1)+i)+*(p_temp+wide*(j+1)+i)+*(p_temp+wide*j+i-1)+*(p_temp+wide*j+i+1))==255*4) *(p_data+wide*j+i)=255; }}(a)原图

(b)4连接(c)8连接效果图效果展示6.3应用技术6.3.13×3均值滤波理论基础理论基础在f(i,j)上按行(或列)对每个像素选取3×3尺寸的邻域,并用邻域中邻近像素的平均灰度来置换这一像素值。函数说明retval=cv2.blur(src,ksize,anchor,borderType)retval:表示返回的均值滤波处理结果;src:表示原始图像,该图像不限制通道数目;ksize:表示滤波卷积核的大小;anchor:表示图像处理的锚点,其默认值为(-1,-1),表示位于卷积核中心点,通常直接使用默认值即可;borderType:表示以哪种方式处理边界值,通常直接使用默认值即可。效果展示图6-8图像3x3邻域平均法效果图6.3.2N×N均值滤波理论基础在本程序中当灰度图像f中以像素f(i,j)为中心的N×N屏蔽窗口(N=3,5,7,…)内平均灰度值为a时,无条件做f(i,j)=a处理,N由用户给定,且取N值越大,噪声减少越明显。但“平均”是以图像的模糊为代价的。图像7×7均值滤波效果6.3.3超限邻域平均法理论基础为了减少模糊效应,找到清除噪声和边缘模糊这对矛盾的最佳统一。阈值的邻域平均法以某个灰度值T作为阈值,如果某个像素的灰度大于其邻近像素的平均值,并超过阈值,才使用平均灰度置换这个像素灰度:(6-1)函数说明retval=cv2.cvtColor(src,code[,dstCn])retval:表示与输入值具有相同类型和深度的输出图像;src:表示原始输入图像;code:是色彩空间转换码,常见的枚举值有cv2.cvtColor_BGR2RGB、cv2.cvtColor_BGR2GRAY、cv2.cvtColor_BGR2HSV、cv2.cvtColor_BGR2YCrCb、cv2.cvtColor_BGR2HLS;dstCn:表示目标图像的通道数。

效果展示本例选取阈值为10。6.3.4方框滤波理论基础除均值滤波之外,OpenCV还提供了方框滤波的方式。与均值滤波的不同在于,方框滤波不仅仅只计算像素均值,两种方式选择计算:函数说明dst=cv2.boxFilter(src,depth,ksize,anchor,normalize,borderType)dst:表示返回的方框滤波处理结果;src:表示原始图像,该图像不限制通道数目;depth:表示处理后图像的深度,一般使用-1表示与原始图像相同的深度;ksize:表示滤波卷积核的大小;anchor:锚点,其默认值为(-1,-1),表示位于卷积核中心点;normalize:表示是否进行归一化操作;borderType:表示以哪种方式处理边界值。效果展示(a)原图(b)5x5未归一化方框滤波结果效果展示(c)2X2为归一化方框滤波结果(d)5x5归一化方框滤波结果(e)2x2归一化方框结果6.4高斯滤波理论基础在高斯滤波中,按照与中心点的距离的不同,赋予像素点不同的权重值,靠近中心点的权重值较大,远离中心点的权重值较小,在此基础上计算邻域内各个像素值不同权重值的和函数说明dst=cv2.GassianBlur(src,ksize,sigmaX,sigmaY,borderType)dst:表示返回的高斯滤波处理结果;src:表示原始图像,该图像不限制通道数目;ksize:卷积核的大小,需要注意的是滤波卷积核的数值必须是奇数。sigmaX:表示卷积核在水平方向上的权重值。sigmaY:表示卷积核在垂直方向上的权重值。

borderType:表示以哪种方式处理边界值。效果展示6.5中值滤波中值滤波将窗口中奇数个数据按大小顺序排列,处于中心位置的那个数作为处理结果。一般采用一个含有奇数个点的滑动窗口,将窗口中各点灰度值的中值来替代指定点图像中值滤波示意图如图6-14所示,取3×3窗口,从小到大排列:33200201202205206207208210

取中间值205,代替原来的数值202

中值滤波实现步骤:①将模板在图中漫游,并将模板中心与图中某个像素位置重合;②读取模板下各对应像素的灰度值;③将这些灰度值从小到大排成1列;④找出这些值里排在中间的1个;(5)将这个中间值赋给对应模板中心位置的像素。中值滤波器对椒盐噪声的滤波效果较好,对高斯噪声的处理效果不好。6.5.1N×N中值滤波理论基础本程序计算灰度图像f中以像素f(i,j)为中心的N×N屏蔽窗口(N=3,5,7,…)内灰度的中值为u,无条件做f(i,j)=u处理,n由用户给定。函数说明在OpenCV中提供了cv2.medianBlur()函数来实现图像的中值滤波。其一般格式为:retval=cv2.medianBlur(src,ksize)retval:表示返回的方框滤波处理结果;src:表示原始图像,该图像不限制通道数目;ksize:表示滤波卷积核的大小。效果展示6.5.2十字型中值滤波理论基础本程序计算灰度图像f中以像素f(i,̊j)为中心的十字形屏蔽窗口内灰度值的中值u,无条件做f(i,̊j)=u处理,N由用户给定。效果展示6.5.3

N×N最大值滤波理论基础本程序计算灰度图像f中以像素f(i,̊j)为中心的N×N屏蔽窗口(N=3,5,7,…)内灰度的中值为u,无条件做f(i,j)=u处理,n由用户给定。函数说明(1)retval=cv2.copyMakeBorder(src,top,bottom,left,right,borderType)用来给图片添加边框。retval:返回带边框的图像;src:要处理的原图;top,bottom,left,right:上下左右要扩展的像素数;borderType:边框类型,(2)min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(ret)该函数用来找出矩阵中的最大值和最小值以及对应的坐标位置。min_val:最小值;max_val:最大值;min_loc:最小值坐标;max_loc:最大值坐标;ret:输入矩阵。效果展示6.6双边滤波理论基础双边滤波将滤波器的权系数分解设计为空域滤波器的权系数和图像亮度差的权系数空间距离:当前点距离模板中心点的欧式距离Wd为灰度距离:当前点距离模板中心点的灰度差值的绝对值Wr为双边滤波器:

理论基础双边滤波卷积表示为

温馨提示

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

评论

0/150

提交评论