高斯滤波:是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用。在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声。
高斯核计算方式:

公式中前一部分常数可以忽略不计,因为最后都是要进行归一化的。
python代码如下
import cv2
import numpy as np
class Gaussian:
def __init__(self, source_img, k, sigma):
self.source_img = cv2.imread(source_img)
self.k = k
self.sigma = sigma
def Gaussian_Filter(self):
if len(self.source_img.shape) == 3:
hight, width, coner = self.source_img.shape
else:
self.source_img = np.expand_dims(self.source_img, axis=-1)
hight, width, coner = self.source_img.shape
#图像填充
edge = self.k // 2
out_img = np.zeros((hight + edge * 2, width + edge*2, coner),dtype=np.float)
out_img[edge:edge+hight, edge:edge + width] = self.source_img.copy().astype(np.float)
#卷积核计算
kenerl = np.zeros((self.k, self.k), dtype=np.float)
for x in range(-edge, -edge + self.k):
for y in range(-edge, -edge + self.k):
kenerl[y + edge, x + edge] = np.exp(-((x - edge -1)**2) + ((y - edge -1)**2)) / (2 * self.sigma**2)
kenerl /= kenerl.sum() #归一化
#滤波
tmp = out_img.copy()
for y in range(hight):
for x in range(width):
for c in range(coner):
out_img[edge + y, edge + x, c]= np.sum(kenerl * tmp[ y:y + self.k, x: x + self.k, c] )
out_img = np.clip(out_img, 0, 255)
out_img =out_img[edge:edge+hight, edge:edge+width].astype(np.uint8)
cv2.imwrite('gauss.jpg', out_img)
if __name__=="__main__":
img = './example.jpg' #滤波的图片
k = 5 #卷积核的大小
sigma = 1.6 #方差
gauss = Gaussian(img, k, sigma)
gauss.Gaussian_Filter()

本文详细介绍了高斯滤波器的工作原理及其在图像处理中的应用,特别是对于高斯白噪声的抑制效果。通过Python代码示例,展示了如何自定义高斯核并应用于图像,以达到平滑和去噪的目的。
504

被折叠的 条评论
为什么被折叠?



