数字图像处理之图像模糊

减弱或消除噪声

卷积

卷积是两个变量在某范围内相乘后求和的结果。

使用的较小的矩阵叫卷积核,也叫滤波器、算子

卷积后矩阵会缩小,即缺少边缘,可通过一定方法填充

1
2
3
4
5
6
img = np.ones((5,5))		#图像
kernel = np.ones((3,3)) #卷积核

img2 = cv.filter2D(img, -1, kernel) #进行卷积
#(原图像,数据类型,卷积核) -1代表与原图相同数据类型
print(img2)

均值模糊

均值卷积核

1
2
3
4
5
6
7
8
9
10
11
#使用卷积核
K = np.ones((3,3)) / 9 #1/9的滤波器
img1 = cv.filter2D(img, -1, K)

#使用blur函数
img2 = cv.blur(img, (3,3)) #(3,3)为卷积核大小,1/3*3
show(np.hstack([img, img2]))

#使用boxFilter函数
img3 = cv.boxFilter(img, -1, (3,3)) #数据类型,卷积核大小
show(np.hstack([img, img3]))

中值滤波

对一个卷积核大小区域的值取中值

1
2
img4 = cv.medianBlur(img, 3)	#3为卷积核大小,为奇数
show(np.hstack([img, img4]))

高斯模糊

均值模糊不同位置权重一样,一般我们想要中心的权重大,周围的权重小。

高斯函数图像

image.png

σ为方差,方差越小越集中、图像越陡峭

高斯核

卷积核各点从高斯图像中取,S为各元素之和,将结果归一化

1
2
3
4
5
sigma = 100

img2 = cv.GaussianBlur(img, (5,5), sigmaX=sigma)
show(img2)
#(原图像,卷积核大小,σX)

双边滤波

前面的模糊会将边缘进行模糊,使用双边模糊会保留边缘等高频信息,平滑颜色(灰度)相近的地方。

原理:不断计算卷积核

  • 灰度差异卷积核:颜色差异越大,加权值越小
  • 空间距离卷积核:距离越远,加权值越小(类似高斯滤波)

image.png

1
2
3
img2 = cv.bilateralFilter(img, -1, sigmaColor=50, sigmaSpace=3)
#两个参数为颜色和距离计算时的方差
show(img2)

双边滤波算法解析