1.均值滤波器
均值滤波是在空域中进行相应的操作,在滤波的过程中选定一个模板,图像中每一点的像素值都由这个模板中所有点的像素值的均值代替。均值滤波公式为:
其中,f′(x,y)是含有噪声的原始图像,g(x,y)是经过均值滤波之后得到的图像,s是以点(i,j)为中心的模板中像素的集合,模板尺寸为m×n。
均值滤波器也称为低通滤波器,可以把每个像素都当成滤波核的核心,然后计算出核内所有像素的平均值,最后让核心像素等于这个平均值。
均值滤波计算速度比较快,但是随着模板尺寸的增加会在去噪的同时损坏图像的细节信息。
opencv将均值滤波封装成了blur()方法。
dst = cv2.blur(src, ksize, anchor, borderType)
代码如下:
import cv2
img = cv2.imread('1.jpg')
dst1 = cv2.blur(img,(3,3))
dst2 = cv2.blur(img,(5,5))
dst3 = cv2.blur(img,(9,9))
cv2.imshow('img',img)
cv2.imshow('3*3',dst1)
cv2.imshow("5*5",dst2)
cv2.imshow('9*9',dst3)
cv2.waitKey()
cv2.destroyAllWindows()
2.中值滤波器
中值滤波也是一种在空域中进行处理的去噪方法,滤波方式是选定一个模板,在这个模板中进行相应的操作,首先将模板中的像素值进行排序,选择序列中的像素中值作为模板中心的像素值,这样能够去除图像中与周边像素差异较大的噪声点,从而达到去噪的目的。滤波模板的选择是多样的,可以是正方形或长方形的矩阵,也可以是圆形或者十字形的。
中值滤波公式为:
opencv将均值滤波封装成了medianBlur()方法。
dst = cv2.midanBlur(src, ksize)
代码如下:
import cv2
img = cv2.imread('1.jpg')
dst1 = cv2.medianBlur(img,3)
cv2.imshow('img',img)
cv2.imshow('3*3',dst1)
cv2.waitKey()
cv2.destroyAllWindows()
3.高斯滤波器
高斯滤波过程中,滤波核中像素会与卷积核进行卷积计算,最后将结果赋值给滤波核的核心像素。
opencv将均值滤波封装成了GaussianBlur()方法。
dst = cv2.GaussianBlur(src, ksize, sigmaX,sigmaY,borderType)
代码如下:
import cv2
img = cv2.imread('1.jpg')
dst1 = cv2.GaussianBlur(img,(5,5),0,0)
cv2.imshow('img',img)
cv2.imshow('5*5',dst1)
cv2.waitKey()
cv2.destroyAllWindows()
4.双边滤波器
双边滤波也是一种在空域中进行处理的去噪方法,通过考虑距离因素和像素值差异的影响,使它在去噪的同时,能够很好地保留图像的特征信息,具体模板权值公式如下:
opencv将均值滤波封装成了bilateralFilter()方法。
dst = cv2.bilateralFilter(src, d,sigmaColor,sigmaSpace,borderType)
代码如下:
import cv2
img = cv2.imread('1.jpg')
dst1 = cv2.bilateralFilter(img,15,200,100)
cv2.imshow('img',img)
cv2.imshow('3*3',dst1)
cv2.waitKey()
cv2.destroyAllWindows()