低通滤波器用来去除噪声,达到图像模糊作用;高通滤波器用来找图像边缘
(1) 2D卷积:cv2.filter2D(),使用5*5均值过滤器
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('opencv_logo.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()
(2) 均值滤波:3*3归一化后滤波器
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('opencv-logo-white.png')
blur = cv.blur(img,(5,5))
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()
(3) 高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
blur = cv.GaussianBlur(img,(5,5),0)
(4) 中值滤波
中值,将数据从小到大排序后的中间值。适用于针对椒盐噪声。
median = cv.medianBlur(img,5)
(5) 双边滤波
在双边滤波器中,输出像素的值依赖于邻域像素值的加权值组合:
w(i,j,k,l)取决空域核和值域核的卷积,(i,j),(k,l)分别指两个像素点的坐标。d函数根据像素距离选择权重,距离越近权重越大,r函数根据像素的差异来分配权值。