1 .什么是图像去噪?
图像噪声去除是降低数字图像中噪声的过程.
2 .去噪方法
2.1平均过滤
平均滤波又称线性滤波,主要方法是邻域平均法。 线性滤波的基本原理是用平均值替换原图像中的各个像素值。 即,对于处理对象的当前像素点(x,y ),选择由其附近的多个像素构成的模板,求出模板中的全部像素的平均值,将该平均值提供给当前像素点(x,y ),处理后图像在该点的灰度g )
函数实现:cv2.blur(img,ksize ),ksize为卷积核大小。
2.2中值滤波器
中值滤波是一种非线性平滑技术,它将每个像素点的灰度值设置为该点附近窗口中所有像素点的灰度值的中值。
函数实现:cv2.medianblur(img,k ),其中k是长方体的大小
中值滤波器最适合去除椒盐噪声。
2.3自定义去噪
函数原型:cv2.filter2d(src,dst,int ddepth,InputArray kernel,pointanchor=point(-1,-1),double delta=0,)
参数说明:
1.int ddepth:目标图像深度,否则生成与原始图像深度相同的图像。 如果ddepth输入值为-1,则目标图像和原始图像的深度匹配。
2.Point anchor:内核的基准点(anchor ),默认值为(-1,-1)表示位于kernel的中心位置。 也就是说,与用kernel进行处理的像素点重叠的点。
3.double delta:是在保存目标图像之前可选添加到像素的值,默认值为0
4.int borderType:像素向外逼近的方法。 默认值为BORDER_DEFAULT,即计算所有边界。
代码为以下:
efblur_demo(image ) :
#dst=cv.blur(image,) 5,5 ) )卷积核为5x5,平均值模糊
#dst=cv.medianblur(image,5 ) #中值模糊,有助于消除椒盐噪声
#自定义过滤器
kernel=NP.ones ([ 5,5 ],np.float32 )/25 #内核大小
Kernel=NP.Array([0,- 1,0 ]、[-1,5,-1]、[0,- 1,0 ]、np.float32 ) #锐化运算符
#filter2d(src,ddepth (图像深度,-1默认显示与src相同的深度)、kernel、dst=None、anchor=None )、delta=None、bordertype=
DST=cv.filter2d(image,-1,kernel=kernel ) #二维过滤器
cv.imshow('blur_demo ',dst ) )。
2.4 xddttt去噪
xddttt滤波是一种线性平滑滤波器,适合于xddttt噪声的去除,广泛应用于图像处理的降噪过程。 通常,xddttt滤波是平均整个图像的过程,其中通过加权平均它自己和附近的其它像素值来获得每个像素点的值。 xddttt滤波的具体操作是用一个模板(也称为卷积和掩码)扫描图像中的每个像素,用模板确定的附近像素的加权平均灰度值替换模板的中心像素点的值。
函数原型:cv2.guassianblur(img,ksize,sigmaX,sigmaY ) )。
参数说明: 1. img输入图像2. ksize卷积内核大小(必须为正奇数或0 )3.sigmaX、sigmaY(x ) x和y方向的xddttt内核标准偏差) )。
代码:的实现
import cv2 as cv
import numpy as np
efclamp(PV ) :
if pv 255:
返回255
elif pv 0:
返回0
else:
返回PV
defGaussian_noise(image ) : #加xddttt噪声
h,w,c=image.shape
forrowinrange(h ) :
forcolinrange(w ) :
s=NP.random.normal (0,20,3 ) #normal ) loc=0.0,scale=1.0,size=None )、平均值、标准偏差和大小
b=image[row,col,0]
g=image[row,col,1]
r=image[row,col,2]
image[row,col,0]=clamp(b s[0] )
image[row,col,1]=clamp(g s[1]
image[row,col,2]=clamp(r s[2] )
cv.imshow(Gaussian_noise ),image ) )。
if __name__=='__main__':
读取src=cv.im read (' ./images/crystal Liu1. jpg ' ) #图像并将其放入src
#cv.namedwindow('crystalliu ' )创建窗口
#cv.imshow('crystalliu ',src ) )将src图像放置在创建的窗口中
#blur_demo(src )是
# t1=cv.getTickCount () )
#是#Gaussian_noise(src )
# t2=cv.getTickCount ()
# time=(t2 - t1 )/cv.getTickFrequency ()
# print (时间咨询: % s ) % (时间* 1000 ) ) ) ) ) ) ) ) ) )。
#Gaussianblur(src,ksize,sigmaX,dst=None,sigmaY=None,borderType=None ) )。
# ksize表示卷积核的大小,sigmaX、y表示x、y方向的标准差,两者可以是一个,且ksize为大于0的奇数
DST=cv.Gaussianblur(src,(5,5 ),0 ) # xddttt模糊,sigmaX和ksize之一为0
cv.imshow(Gaussianblur )、dst ) )。
键入cv.waitkey(0)等键或1000ms后自动清除窗口,0表示仅键入键退出窗口
cv.destroyallwindows(#关闭所有窗口
————————————————
这是CSDN博客“sc_kobe”的原创文章,符合CC 4.0 BY-SA版权合同。 请附上原文来源的链接和本声明。
原文链接: https://blog.csdn.net/QQ _ 38309818/article/details/111683260