版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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为双边滤波器:
理论基础双边滤波卷积表示为
表示为归一化因子,S为卷积范围。综合结果:①平坦区域,变化很小,差值接近于0,范围域权重接近于1,空间域权重起作用,相当于进行高斯模糊;②边缘区域,像素差值大,像素范围域权重变大,即使距离远空间域权重小,加上像素域权重总的系数也较大,从而保护了边缘信息。在突变的边缘上,使用了像素差权重,所以很好的保留了边缘。函数说明dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)dst:表示返回的双边滤波处理结果;src:表示原始图像,该图像不限制通道数目;d:表示在滤波时选取的空间距离参数,表示以当前像素点为中心点的半径,在实际应用中一般选取5;sigmaColor:表示双边滤波时选取的色差范围;sigmaSpace:表示坐标空间中的sigma值,值越大,越多的点参与滤波;borderType:表示以何种方式处理边界。效果展示
(a)原图(b)高斯滤波(c)双边滤波6.7
2D卷积核的实现理论基础2D卷积核都能方便地设置卷积核的大小和数值。函数说明dst=cv2.filter2D(src,d,kernel,anchor,delta,borderType)dst:表示返回的双边滤波处理结果;src:表示原始图像,该图像不限制通道数目;d:表示处理结果图像的图像深度,一般使用-1表示与原始图像使用相同的图像深度;kernel:表示一个单通道的卷积核;anchor:锚点,其默认值为(-1,-1),表示位于卷积核中心点;delta:修正值,可选。如存在,滤波的基础上加上该值;borderType:表示以何种情况处理边界。效果展示(a)原图(b)ksize=13效果展示(c)ksize=9(d)ksize=5作者杨淑莹敬上谢谢!第7章图像边缘锐化处理7.1概述边缘:指灰度值发生急剧变化的地方边缘检测目的:在不破坏信息的条件下,减少数据量,绘制出其边缘线图。图像梯度:计算的是图像的边缘信息,它能够反映图像像素变化的速度,如灰度值变化大,梯度值大;灰度值变化小,梯度值小。图像梯度:像素的一阶导数,通过计算像素值的差来近似导数值。图像梯度及边缘检测图像锐化图像锐化图像锐化常见的边缘类型
阶梯状
脉冲状
屋顶状用差分定义一元函数f(x)二阶微分:
用差分定义一元函数f(x)一阶微分:一阶、二阶微分运算G(i,j)=f(i,j)-f(i-1,j)单向微分运算G(i,j)=-f(i,j-1)+f(i,j)单向微分运算
对灰度图像f在纵方向进行微分,按下式求得:
G(i,j)=f(i,j)-f(i-1,j)纵向微分运算该算法的数学表达式为:G(i,j)=f(i,j)-f(i,j-1)横向微分运算对灰度图像f在纵方向和横方向两个方向进行微分。同时增强水平和垂直方向的边缘。G(i,j)=sqrt{[f(i,j)-f(i,j-1)]*[f(i,j)-f(i,j-1)]+[f(i,j)-f(i-1,j)]*[f(i,j)-f(i-1,j)]}双向一次微分运算
相减的结果反映了图像亮度变化率的大小。像素值保持不变的区域,相减的结果为零,即像素为黑;像素值变化剧烈的区域,相减后得到较大的变化率,像素灰度值差别越大,则得到的像素就越亮,图像的垂直边缘得到增强。微分运算作用图像微分后处理计算结果出现了小于零的像素值整体加一个正数,可以获得类似浮雕的效果。取绝对值图像一阶微分X方向Y方向双向梯度是1个矢量,由分别沿x和y方向计算微分的结果构成。梯度运算Robert提出的交叉微分算子Z1Z2Z3Z4Z5Z6Z7Z8Z9-10010-110Sobel
算子Z1Z2Z3Z4Z5Z6Z7Z8Z9-1-2-1000121-101-202-101133Z1Z2Z3Z4Z5Z6Z7Z8Z9-1-1-1000111-101-101-101Prewitt算子梯度锐化模板-1-1-1000111-101-101-101-1-2-1000121-101-202-101用于边缘增强的梯度法二元图像函数f(x,y)的拉普拉斯变换:x方向y方向由以上两个分量相加:二阶微分—拉普拉斯算子扩展方式二阶微分—拉普拉斯算子强调突变,弱化慢变。二阶微分—拉普拉斯算子将原始图像和拉普拉斯图像叠加在一起的,保持锐化处理的效果,又能复原背景信息。二阶微分—拉普拉斯算子二阶微分—拉普拉斯算子掩模实现二阶微分—拉普拉斯算子高斯-拉普拉斯(LOG)算子是效果更好的边缘检测器,把高斯平滑器和拉普拉斯锐化结合起来,先平滑掉噪声,再进行边缘检测。高斯-拉普拉斯(LOG)算子LOG算子中心点的距离与位置加权系数的关系高频提升滤波器微分运算可用来求信号的变化率,具有加强高频分量的作用,微分处理后的图像非常暗,不适用。如果既要求图像的轮廓清晰,又要求保持目标物体的内部灰度不变,这就是高频提升滤波器的目的。微分运算会使低频成分损失很多,而高频成分突出,为了使图像边缘清晰,内容完整保留,用下式:高频提升滤波器线性锐化滤波与高频提升滤波
采用多个边缘检测算子,不同的检测算子模板采用不同的方向、不同的邻域导数,用求卷积的方法,计算每个模板,取最大值。自适应检测将所有模板逐一作用于每一个像素,产生最大输出值的模板方向,表示该点边缘方向,如果所有方向上的模板接近于零,该点没有边缘;如果所有方向上的模板输出值近似相等,没有可靠边缘方向。实现步骤Kirsch边缘检测算子151锐化算子小结
好的检测结果:对边缘的错误检测率要低,在检测出真实边缘的同时,避免检测出虚假的边缘。好的边缘定位精度:标记的边缘位置要和图像上真正边缘的位置尽量接近。对同一边缘要有低的响应次数:有的算子会对一个边缘会产生多个响应。本来只有一个边缘点,可是检测出来会出现多个边缘点。克服噪声的影响。152算子比较
Roberts算子:利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没经过平滑处理,因此不具备能抑制噪声能力。对陡峭边缘且含噪声少的图像效果较好。Sobel算子和Prewitt算子:先做加权平滑处理,再做微分运算,平滑部分的权值有些差异,对噪声具有一定的抑制能力,但不能完全排除虚假边缘。虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。算子比较154
Laplacian算子:是不依赖于边缘方向的二阶微分算子,对阶跃型边缘点定位准确,对噪声非常敏感,使噪声加强,容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘。算子比较155算子比较
LOG算子:先用高斯函数平滑滤波,后用Laplacian算子检测边缘,克服Laplacian算子抗噪声差的缺点,但同时也平滑掉比较尖锐的边缘,尖锐边缘无法检被测到。随堂测试以下锐化算子中,属于二阶算子的是ARoberts梯度算子BSobel算子CPrewitt算子DLaplacian算子7.2图像微分边缘检测7.2.微分技术应用7.2.1微分边缘检测
微分运算作用效果微分运算应用在图像上,可使图像的轮廓清晰。纵向微分运算;横向微分运算;双方向一次微分运算。
微分运算作用效果微分运算作用相减的结果反映了图像亮度变化率的大小。像素值保持不变的区域,相减的结果为零,即像素为黑;像素值变化剧烈的区域,相减后得到较大的变化率,像素灰度值差别越大,则得到的像素就越亮,边缘得到增强微分运算纵向微分运算对灰度图像f在纵方向进行微分,按下式求得:7.2.2纵向边缘检测理论基础对灰度图像f在纵向进行微分操作:(7-1)这里i代表列,j代表行。该算法用如下卷积核:
7.2.3横向边缘检测理论基础对灰度图像f在横向进行微分:
该算法用如下卷积核:
对灰度图像在横向方向进行微分,图像的横向水平边缘得到检测。7.2.4双向边缘检测理论基础对灰度图像在纵向和横向进行微分,结果图像的纵向和横向的边缘得到检测。该算法用如下卷积核:
水平(i方向)垂直(j方向)效果展示
(a)原图(b)纵向微分
(c)横向微分(d)双向一次微分7.3常用的边缘检测算子7.3.1Roberts边缘检测算子一阶微分算子作用效果Roberts梯度算子交叉算法无平滑,对噪声太敏感计算简单,但没有清楚的中心点
理论基础Roberts边缘算子采用的是对角方向相邻的两个像素之差。
该算法的算子如下:(1)retval=cv2.filter2D(src,d,kernel,anchor,delta,borderType)retval:表示返回的双边滤波处理结果;src:表示原始图像,该图像不限制通道数目;d:表示处理结果图像的图像深度,-1表示与原始图像使用相同的图像深度;kernel:表示一个单通道的卷积核;anchor:锚点,其默认值为(-1,-1),中心点;delta:表示修正值,可选。如果该值存在,加上该值作为最终的滤波处理结果;borderType:表示以何种情况处理边界;函数说明(2)retval=cv2.addWeighted(src1,alpha,src2,beta,gamma,dtype=-1))这个函数的作用是计算两个数组(图像阵列)的加权和,把两张图片叠加在一起。retval:输出图像;src1:第一个图片阵列;alpha:第一个图片的权重值;src2:第二个图片阵列;beta:第二个图片的权重值;gamma:偏移量;dtype:输出阵列的可选深度。数学表达式为:
函数说明效果展示7.3.2Sobel边缘检测算子算法原理Sobel算子包含两组的矩阵,横向及纵向模板,将之与图像进行平面卷积,得出横向及纵向的灰度差分近似值。Sobel算子是典型的基于一阶导数的边缘检测算子算子中引入了类似局部平均的运算,对噪声具有平滑作用,能很好地消除噪声的影响。
Sobel算子Python实现dst=cv2.Sobel(src,ddepth,dx,dy[,ksize[,scale[,delta[,borderType]]]])·ddepth表示输出图像的深度。·dx表示x方向上求导的阶数。·dy表示y方向上求导的阶数。·ksize表示Sobel核的大小。·scale表示计算导数时的缩放因子,默认值是1。·delta表示在目标函数上所附加的值,默认为0。·borderType表示边界样式。voidcvAddWeighted(constCvArr*src1,doublealpha,constCvArr*src2,doublebeta,doublegamma);src1,第一个原数组.alpha,第一个数组元素权重src2第二个原数组beta,第二个数组元素权重gamma,图1与图2作和后添加的数值。不要太大,不然图片一片白。总和等于255以上就是纯白色了。其他一阶微分算子作用效果Sobel算子3×3模板邻域梯度的均值
效果展示7.3.3Prewitt边缘检测算子边缘检测Prewitt算子其他一阶微分算子作用效果Prewitt算子3×3模板邻域梯度的均值与sobel相比,图像效果比较干净
效果展示7.3.4Scharr边缘检测算子Scharr算子为Sobel的改进,与Sobel相同的计算速度,但是精度更高。Scharr算子不同的是,Scharr仅作用于大小为3的内核。图像与水平方向上的卷积:垂直方向上的边缘强度,图像与垂直方向上的卷积:水平方向上的边缘强度。Python实现dst=cv2.Scharr(src,ddepth,dx,dy,dst=None,ksize=None,delta=None,borderType=None)ddepth表示输出图像的深度。dx,dy:int类型的,表示x方向的差分阶数,1或0kSize:模板大小,对于Sobel取值为1,3,5,7,当不输入的时候,默认为3。特殊的,当kSize=1的时候,采用的模板为1*3或者3*1而非平时的那些格式delta表示在目标函数上所附加的值,默认为0。borderType表示边界样式。效果展示7.3.5Krisch自适应边缘检测理论基础Kirsch边缘检测算子为:
图像中的每个点都用8个掩模进行卷积,所有8个方向中的最大值作为边缘幅度图像输出。最大响应掩模的序号构成了边缘方向的编码。
边缘检测Kirsch算子其他一阶微分算子作用效果Kirsch算子8个方向边缘检测Kirsch算子函数说明(1)retval=scipy.signal.convolve2d(src,kernel,mode,boundary,fillvalue)用于实现二维离散卷积。retval:返回的图像;src:输入的二维图像;kernel:输入的二维数组,代表卷积核;mode:卷积类型,有“full”,“valid”以及“same”类型;boundary:边界填充方式,有“fill”,“warp”以及“symm”方式;fillvalue:当boundary="fill"时,设置边界填充的方式,默认为0。效果展示图7-6Krisch
边缘检测处理效果图7.3.6拉普拉斯算子理论基础拉普拉斯算子属于二阶微分:x方向:
y方向:由以上两个分量相加:
Sobel算子和Scharr算子都是一阶导数算子;Laplacian算子是二阶导数算子,具有旋转不变性,满足不同方向上的边缘检测要求。二维函数的Laplacian(拉普拉斯)变换计算公式定义:Laplacian算子图像二阶微分作用效果Laplacian算子4邻域
在图像边缘处理中,二阶微分的边缘定位能力更强,锐化效果更好,因此在进行图像边缘处理时,直接采用二阶微分算子而不使用一阶微分。Laplace是一个二阶导数的算子,是一个x方向二阶导数和y方向二阶导数的和的近似求导算子。Laplace算子为可以看出,该算子在上下左右四个90度的方向上结果相同,也就是说在90度方向上无方向性。为了让其在45度的方向上也具有该性质,对laplace进行扩展定义即Laplace扩展算子图像二阶微分作用效果Laplacian算子加入对角像素8邻域噪声被增强双边缘理论基础常用的拉普拉斯边缘检测模板:Python实现dst=cv2.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])·ddepth表示输出图像的深度。·ksize表示二阶导数核的大小,必须是正奇数。·scale表示计算导数时的缩放因子,默认值是1。·delta表示在目标函数上所附加的值,默认为0。·borderType表示边界样式。一般Laplace运算之前,会先对图像进行模糊平滑处理,目的是去除高频噪声importcv2ascvimage=cv.imread("F:/picture/coins.jpg",0)#读取一幅灰度图#使用拉普拉斯算子计算边缘信息laplacian=cv.Laplacian(image,cv.CV_64F)laplacian=cv.convertScaleAbs(laplacian)#对计算结果取绝对值#显示图像cv.imshow("image",image)cv.imshow("laplacian",laplacian)a原始图像;b是对原始图像进行边缘检测的结果。可以看出,拉普拉斯边缘检测可以检测出更多的边缘信息。理论基础拉普拉斯(Laplacian)算子是不依赖于边缘方向的二阶微分算子,对阶跃型边缘点定位准确。对噪声敏感,噪声成分加强,抗噪声能力差,易丢失一部分边缘的方向信息。该算子强调突变,弱化慢变。
(a)原图(b)拉普拉斯算子边缘检测图7-7拉普拉斯边缘检测函数说明retval=cv2.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])retval:表示计算得到的目标函数图像;src:表示原始图像;ddepth:表示输出图像的深度;ksize:表示二阶导数核的大小,必须是正奇数;scale:表示计算导数时的缩放因子,默认值是1;delta:表示在目标函数上所附加的值,默认为0;borderType:表示边界样式。效果展示7.3.7高斯-拉普拉斯算子拉普拉斯边缘检测算子没有对图像做平滑处理,会对噪声产生影响。首先要对图像进行高斯平滑处理,然后再与拉普拉斯核进行卷积运算。因为要做两次卷积,计算复杂度较大,为了降低计算时的复杂度,去噪,二维高斯函数的拉普拉斯变换:高斯拉普拉斯边缘检测理论基础高斯-拉普拉斯算子先用高斯函数做平滑滤波,后用拉普拉斯算子检测边缘,克服了拉普拉斯算子抗噪声能力比较差的缺点,在抑制噪声的同时,平滑掉了比较尖锐的边缘。二维高斯函数高斯函数拉普拉斯变换:具体步骤1.构建窗口大小为H×W、标准差为σ的LoG卷积核。
H、W均为奇数且一般H=W,卷积核锚点的位置在2.将图像矩阵与LoGH×W核进行卷积操作,结果记为I_Cov_LoG。3.将得到的边缘信息二值化显示。高斯拉普拉斯边缘检测的效果与先进行高斯平滑然后再进行拉普拉斯边缘检测的效果是类似的。
#主函数image=cv.imread("F:/picture/lena.png",0)#显示原图cv.imshow("image",image)#LoG卷积2为sigmaimg1=LoG(image,2,(7,7),'symm')img2=LoG(image,2,(11,11),'symm')img3=LoG(image,2,(13,13),'symm')#边缘的二值化显示L1=edge_binary(img1)L2=edge_binary(img2)L3=edge_binary(img3)#显示LoG边缘检测结果cv.imshow("L1",L1)cv.imshow("L2",L2)cv.imshow("L3",L3)importnumpyasnpimportmathimportcv2ascvfromscipyimportsignal效果分析a.原始图像;b.7×7的LoG卷积核得到的检测结果;c.11×11的LoG卷积核得到的检测结果;d.13×13的LoG卷积核得到的检测结果。可以看出,随着卷积核的增大,图像边缘信息也在增加,当卷积核过大时,会检测出图像中的噪声。高斯-拉普拉斯(LOG)算子作用效果高斯-拉普拉斯(LOG)算子
先用高斯函数作平滑滤波,
后用Laplacian算子检测边缘克服了Laplacian算子抗噪声能力比较差的缺点理论基础具体步骤如下。①构建模板大小为H×W、标准差为σ的LoG卷积核
H、W均为奇数且一般H=W,卷积核锚点的位置为
(a)高斯平滑(b)高斯-拉普拉斯锐化模板②将图像矩阵与LoGH×W核进行卷积操作。③将得到的边缘信息进行二值化,然后显示。效果展示锐化算子小结好的检测结果:对边缘的错误检测率要低,在检测出真实边缘的同时,避免检测出虚假的边缘。好的边缘定位精度:标记的边缘位置要和图像上真正边缘的位置尽量接近。对同一边缘要有低的响应次数:有的算子会对一个边缘回产生多个响应。本来只有一个边缘点,可是检测出来会出现多个边缘点。克服噪声的影响。锐化算子小结
Roberts
SobelKirsch
LOG锐化算子小结Roberts:局部差分算子寻找边缘,易丢失一部分边缘,没有平滑处理,不具备能抑制噪声能力。对陡峭边缘且含噪声少的图像效果较好。Sobel和Prewitt:先做加权平滑处理,再做微分运算,平滑部分的权值有些差异,对噪声有抑制能力,但不能完全排除虚假边缘。虽然这两个算子边缘定位效果不错,但检测出的边缘容易出现多像素宽度。Laplacian:是不依赖于边缘方向的二阶微分算子,对阶跃型边缘点定位准确,对噪声非常敏感,使噪声加强,噪声能力差,容易丢失一部分边缘的方向信息,造成一些不连续的检测边缘。LOG:克服Laplacian算子抗噪声差的缺点,但同时也平滑掉比较尖锐的边缘,尖锐边缘无法检被测到7.3.8Canny边缘检测Canny边缘检测是一种十分流行的边缘检测算法,它使用了一种多级边缘检测算法,可以更好地检测出图像的边缘信息。Canny边缘检测近似算法的步骤如下。1)高斯滤波来平滑图像,目的是去除噪声2)计算每个像素点的梯度强度和方向3)应用非极大值抑制技术,来消除边误检(本来不是但检测出来是)4)应用双阈值的方法,来决定可能的(潜在的)边界5)通过抑制孤立的弱化边缘最终完成边缘检测(滞后的边界跟踪)Canny边缘检测
边缘检测容易受到图像中噪声的影响,因此第一步是使用5x5高斯滤波器消除图像中的噪声。
高斯滤波器是一种线性滤波器,能够有效地抑制噪声,平滑图像。高斯滤波器的模板系数随着模板中心的增大而减小。相对于均值滤波器,对图像的模糊程度较小。1)高斯平滑2)Sobel算子计算图像边缘的幅度水平方向上的卷积核sobelx;垂直方向上的卷积核sobely卷积,得到dx和dy;利用平方和的开方得到边缘强度。计算出梯度方向angle=arctan2(dy,dx)。
获得梯度的幅度与方向后,对每一个位置进行非极大值抑制处理。方法:逐一遍历像素点,判断当前像素点是否是周围像素点中具有相同梯度方向上的最大值。如果该点是极大值,则保留该点。否则将其归零。3)非极大抑制Non-maximumsuppression4、双阈值检测设定一个阈值上界和阈值下界,如果大于阈值上界则认为必然是边界(称为强边界),小于阈值下界则认为必然不是边界,两者之间的则认为是候选项(称为弱边界),进一步处理。A大于最大阈值,为强边界,保留。B和C位于最大最小之间(成为弱边界),候选,等待进一步判断(第5步)。D小于最小阈值,不是边界,丢弃。5、滞后边界跟踪
即与强边界相连的位于最大最小阈值之间的弱边界认为是边界,其他的弱边界则被抑制。B为弱边界,但他是属于孤立的弱边界,舍弃。C同样也是弱边界,与强边界A相连,故其也为边界,保留。Python实现edg=cv2.Canny(src,threshould1,threshould2[,apertureSize[,L2gradient]])edg表示计算得到的边缘信息。src表示输入的8位图像。threshould1表示第一个阈值。threshould2表示第二个阈值。apert
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年航天飞行器创新风向标:中国案例领航
- 全新幼儿园教学楼暖气设备改造合同(2024版)3篇
- 急性变态反应性会厌炎的临床特征
- 基于大数据的二零二四年度市场分析与预测合同2篇
- 零售业库房管理员聘用协议
- 轨道交通线路工程招投标邀请书
- 食品安全稳定性条例
- 商务咨询服务承销协议书范本
- 生物医药设备涂料涂装协议
- 实习生退出协议
- ISBAR辅助工具在交班中应用
- 《公司干部述职报告》课件
- GB/T 44906-2024生物质锅炉技术规范
- 信息技术安全培训方案
- 护理院医德医风管理方案
- 《大学校园安全教育》课件
- 汽车维修绿色环保方案
- 幼儿园教师值班制度
- 2024年区块链供应链管理平台建设合同
- 施工工期、施工进度计划及工期保证措施
- 租空调合同模板
评论
0/150
提交评论