高斯滤波python实现可以任意设置高斯核大小和方差

高斯滤波python实现可以任意设置高斯核大小和方差高斯滤波 是一种线性平滑滤波器 对于服从正态分布的噪声有很好的抑制作用 在实际场景中 我们通常会假定图像包含的噪声为高斯白噪声 所以在许多实际应用的预处理部分 都会采用高斯滤波抑制噪声 高斯核计算方式 公式中前一部分常数可以忽略不计 因为最后都是要进行归一化的

大家好,我是讯享网,很高兴认识大家。

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

高斯核计算方式:

                                          
讯享网

公式中前一部分常数可以忽略不计,因为最后都是要进行归一化的。

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.sigma2) 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()

讯享网

小讯
上一篇 2025-03-28 14:18
下一篇 2025-01-09 23:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/38132.html