美文网首页
加性高斯白噪声及维纳滤波的基本原理与Python实现

加性高斯白噪声及维纳滤波的基本原理与Python实现

作者: iwuqing | 来源:发表于2019-05-25 23:52 被阅读0次

1. 加性高斯白噪声

1.1 特点

加性高斯白噪声属于白噪声的一种,有如下两个特点:

  • 功率谱密度为常数,即白
  • 高斯则为其幅度的概率密度函数服从高斯分布

1.2 高斯分布的一维概率密度函数

P(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}

  • \sigma 为标准差
  • \mu为均值

1.3 Python内置库说明

random.gauss(mu, sigma)其值即服从高斯分布,若想要是实现加性高斯白噪声,循环作加即可

1.4 Code

import numpy as np
import random

def gaussian_white_noise(intput_signal, mu, sigma):
    '''
    加性高斯白噪声(适用于灰度图)
    :param intput_signal: 输入图像
    :param mu: 均值
    :param sigma: 标准差
    :return:
    '''

    intput_signal_cp = np.copy(intput_signal)  # 输入图像的副本

    m, n = intput_signal_cp.shape   # 输入图像尺寸(行、列)

    # 添加高斯白噪声
    for i in range(m):
        for j in range(n):
            intput_signal_cp[i, j] = intput_signal_cp[i, j] + random.gauss(mu, sigma)


    return intput_signal_cp

1.5 测试对比

均值为0,标准差为10时的加行高斯白噪声前后对比图

2. 逆滤波

实际上逆滤波是维纳滤波的一种理想情况,当不存在加性噪声时,维纳滤波与逆滤波等同。

2.1 基本原理

在时域内有
y(n) = x(n)\bigotimes h(n)

  • x(n)为输入信号
  • h(n)为系统函数
  • y(n)为输出信号

根据时域卷积定理,我们知道时域卷积等于频域乘积

Y(\omega) = X(\omega) \times H(\omega)

  • Y, X, H分别为输出信号,输入信号,系统函数的傅里叶变换

则有
X(\omega) = \frac{Y(\omega)}{H(\omega)}
这意味着,当我们已知系统函数时,我们可以很简单的完成滤波。

2.2 Code

import numpy as np


def inverse_filtering(input_singal, h):
    '''
    逆滤波
    :param input_singal: 输入信号
    :param h: 退化函数(时域)
    :return: 滤波后的信号(幅值)
    '''
    output_signal = [] #输出信号
    output_signal_fft = [] #输出信号的傅里叶变换

    h_fft = np.fft.fft2(h) # 退化函数的傅里叶变换

    input_singal_fft = np.fft.fft2(input_singal)  # 输入信号的傅里叶变换

    output_signal_fft = input_singal_fft / h_fft

    output_signal = np.abs(np.fft.ifft2(output_signal_fft))

    return output_signal

3 维纳滤波

3.1 直观认识

理解了逆滤波的基本过程之后,实际上维纳滤波就不是太大问题了。实际上,逆滤波对于绝大多数情况滤波效果都不好,因为逆滤波是通过傅里叶变换将信号由时域转换到频域,再根据时域卷积定理,在频域作除法。对于乘性干扰这当然是没问题的,甚至是完美的。而如果存在加性噪声,例如:加性高斯白噪声。逆滤波效果就不好了,某些情况下几乎无法完成滤波情况。

3.2 数学解释

输入信号经过系统函数后
时域上
y(n) = x(n)\bigotimes h(n)
频域上
Y(\omega) = X(\omega) \times H(\omega)
若存在加性噪声则为
时域上
y(n) = g(n) + d(n)

  • 其中g(n) = x(n)\bigotimes h(n)

频域上
Y(\omega) = G(\omega) + C(\omega)

  • 其中G(\omega) = X(\omega) \times H(\omega)


\frac {Y(\omega)}{H(\omega)} = \hat{X}(\omega)=X(\omega)+\frac{C(\omega)}{H(\omega)}

于是,从上面对输入信号的估计表达式可以看出,多出了一项加性噪声的傅里叶变换与系统函数的比值。尤其当H(\omega)相对于C(\omega)很小时,滤波后的信号差距十分严重。

3.3 维纳滤波表达式

\hat{X}(\omega)=\left[\frac{1}{H(\omega)} \frac{|H(\omega)|^{2}}{|H(\omega)|^{2}+K}\right] G(\omega)

  • K = \frac{|C(\omega)|^2}{|H(\omega)|^2}

而我们又知道:白噪声的白为噪声的功率谱为常数,即|C(\omega)|^2为常数,于是,从直观上看,当|H(\omega)|相对于|C(\omega)|较大时,则K较小,上式第一项则较小,而第二项较大从而保持相对平稳。

3.4 Code

import numpy as np

def wiener_filtering(input_signal, h, K):
    '''
    维纳滤波
    :param input_signal: 输入信号
    :param h: 退化函数(时域)
    :param K: 参数K
    :return: 维纳滤波后的信号(幅值)
    '''
    output_signal = []  # 输出信号

    output_signal_fft = [] # 输出信号的傅里叶变换

    input_signal_cp = np.copy(input_signal) # 输入信号的副本

    input_signal_cp_fft = np.fft.fft2(input_signal_cp)  # 输入信号的傅里叶变换

    h_fft = np.fft.fft2(h) # 退化函数的傅里叶变换

    h_abs_square = np.abs(h_fft)**2 # 退化函数模值的平方

    # 维纳滤波
    output_signal_fft = np.conj(h_fft) / (h_abs_square + K)

    output_signal = np.abs(np.fft.ifft2(output_signal_fft * input_signal_cp_fft)) # 输出信号傅里叶反变换

    return output_signal

4 维纳滤波与逆滤波对比

camera coins

5 GitHub

click me!

相关文章

  • 加性高斯白噪声及维纳滤波的基本原理与Python实现

    1. 加性高斯白噪声 1.1 特点 加性高斯白噪声属于白噪声的一种,有如下两个特点: 功率谱密度为常数,即白 高斯...

  • [图像增强][空间滤波]1.噪声消除法

    本篇主要介绍几种常见的噪声消除法:模糊,高斯滤波,盒滤波,中值滤波。 1. 基本原理 邻域 根据图像中像素与像素之...

  • 10高斯均值滤波

    高斯滤波_模块去噪声 均值滤波_源码

  • 自编高斯滤波器

    高斯滤波是一种线性平滑滤波,对于除去高斯噪声有很好的效果。但是高斯滤波并不是效率最高的滤波算法。高斯滤波的具体操作...

  • 开始

    初始计算机视觉 高斯模糊,高斯滤波 突出中心 降低随机噪声 中值模糊,中值滤波 降低椒盐噪声(某些值过大或过小) ...

  • 图像滤波

    掩膜去噪法对于高斯白噪声有较好的优化效果,而中值滤波法对于椒盐噪声去噪效果很好。

  • exp3-图像复原

    图像复原中的均值滤波、统计排序滤波,去除高斯、椒盐噪声 去除周期噪声 由退化函数进行图像复原

  • opencv各种卷积核滤波器

    高斯滤波 使图像平滑,可以用来去除噪声。高斯滤波器将中心像素周围的像素按照高斯分布加权平均进行平滑化。 中值滤波 ...

  • 关于加性高斯白噪声AWGN

    Additive White Gaussian Noise (AWGN) AWGN's PSD and its i...

  • 55. 高斯均值滤波

    本文使用高斯滤波api和均值滤波的源码实现图像滤波 高斯滤波: 结果如下: 均值滤波: 实现步骤: 读取原图片 指...

网友评论

      本文标题:加性高斯白噪声及维纳滤波的基本原理与Python实现

      本文链接:https://www.haomeiwen.com/subject/nnuttctx.html