当前位置:   article > 正文

python中实现高斯滤波(三通道、不需要转灰度图)_图片分三个通道进行滤波

图片分三个通道进行滤波

1、高斯滤波简介:
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
2、高斯滤波定义:
高斯滤波(Gauss filter)实质上是一种信号的滤波器,其用途为信号的平滑处理,数字图像用于后期应用,其噪声是最大的问题,因为误差会累计传递等原因,大多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。
3、图像处理中的两种实现方式
在图像处理中,高斯滤波一般有两种实现方式,一是用离散化窗口滑窗卷积,另一种通过傅里叶变换。最常见的就是第一种滑窗实现,只有当离散化的窗口非常大,用滑窗计算量非常大(即使用可分离滤波器的实现)的情况下,可能会考虑基于傅里叶变化的实现方法。
4、算法原理
高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,人们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Laplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积=>空域卷积。

滤波器就是建立的一个数学模型,通过这个模型来将图像数据进行能量转化,噪声就是属于高频率部分,高斯滤波器平滑处理后降低噪声的影响。

若使用理想滤波器,会在图像中产生振铃现象。采用高斯滤波器的话,系统函数是平滑的,避免了振铃现象。
5、代码实现
from imageio import imread
from scipy.misc import imsave, imresize
import matplotlib.pyplot as plt
import numpy as np

Gaussian filter

def gaussian_filter(img, K_size=21, sigma=1.3): #设置卷积核大小21*21 sigma标准差,不设置会自动生成

H, W, C = img.shape     #读出图片数据的长、款、深度

## Zero padding  计算需要填充的0层,并填充

pad = K_size // 2

out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)  #填充后的out

out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)

## prepare Kernel   卷积核设置

K = np.zeros((K_size, K_size), dtype=np.float)   #初始化

for x in range(-pad, -pad + K_size):

    for y in range(-pad, -pad + K_size):

        K[y + pad, x + pad] = np.exp( -(x ** 2 + y ** 2) / (2 * (sigma ** 2)))#二维高斯分布中的指数部分

K /= (2 * np.pi * sigma * sigma)    #二维高斯分布的系数

K /= K.sum()

tmp = out.copy()

# filtering   进行卷积运算

for y in range(H):

    for x in range(W):

        for c in range(C):

            out[pad + y, pad + x, c] = np.sum(K * tmp[y: y + K_size, x: x + K_size, c])#先乘后加

out = np.clip(out, 0, 255)

out = out[pad: pad + H, pad: pad + W].astype(np.uint8)   #数据类型转换

return out
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

Read image

img = imread(‘E:\matlammsvv\ssz.jpg’)
out = gaussian_filter(img, K_size=21, sigma=1.3)
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.subplot(1, 2, 2)
plt.imshow(out)
plt.show()
在这里插入图片描述
关于高斯滤波的简介部分摘抄了链接上的部分内容,链接放在下面,程序部分借鉴了大神的部分代码,自己修改增加了部分,感谢大神,链接找不到了就不放了。
https://baike.so.com/doc/1781738-1884180.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/236768
推荐阅读
相关标签
  

闽ICP备14008679号