频率域滤波图像复原的python实现——数字图像处理

news2024/11/27 22:34:48

原理

维纳滤波的原理是基于统计方法,旨在通过最小化信号的估计误差来改善信号的质量。它在处理具有噪声干扰的信号时特别有效。维纳滤波旨在从受噪声干扰的信号中恢复原始信号。它假设信号和噪声都是随机过程,并且它们的统计特性是已知的或可估计的。维纳滤波器的设计基于最小化输出和所需信号之间的均方误差(MSE)。

数学原理
假设 x(n) 是原始信号,d(n) 是观测到的受噪声干扰的信号,y(n) 是滤波器的输出。那么,噪声 v(n) 可以表示为:
在这里插入图片描述
维纳滤波器的目标是找到一个滤波器 h(n),使得输出 y(n) 尽可能接近原始信号 x(n)。这可以通过最小化均方误差来实现:
在这里插入图片描述
在频域中,维纳滤波器的频率响应 H(f) 可以表示为:
在这里插入图片描述

实际应用
在实际应用中,信号和噪声的统计特性可能不完全已知,因此需要估计这些特性。维纳滤波器可以是固定的,也可以是自适应的,自适应滤波器会根据输入信号的变化动态调整其参数。维纳滤波在信号处理、图像处理、通信等领域有广泛的应用,特别是在需要从噪声中恢复信号的场合。

python实现下图

在这里插入图片描述

提示

这是一幅经过参数k=0.0025的大气湍流模型退化后的图像。结果图中的第一行是经大气湍流模型退化后的图像在逆滤波和维纳滤波后的结果:逆滤波参数和上个实验一样,限制滤波频率是通过对比值G(u,v)/H(u,v)应用一个阶数为10,截止频率为60的巴特沃斯低通函数来实现的;参数K取0.01。通过观察结果可以发现在只有退化函数作用时,逆滤波和维纳滤波的效果相差不大。结果图中第二行的基础上叠加均值为0,方差为0.01的高斯噪声形成的(可以用skimage.util.random_noise函数添加噪声),对其进行逆滤波的参数仍和上一步一样,阶数为10,截止频率为60;而维纳滤波的参数K取0.2。通过比较结果,可以看出在叠加噪声的情况下,逆滤波难以得到理想结果,而维纳滤波通过交互式地选取参数K可以较好地滤除噪声的干扰。大家可以尝试K的不同参数值,观察维纳滤波结果的表现。

python代码

import cv2
import numpy as np
import skimage
from matplotlib import pyplot as plt

img = cv2.imread('Fig0525.tif', 0)
img_n = skimage.util.random_noise(img, mode='gaussian', seed=None, clip=False, mean=0, var=0.01)
img_n = 255*(img_n-img_n.min())/(img_n.max()-img_n.min())
img_n = img_n.astype(np.uint8)
img_original_list = [img, img_n]
img_name_list = ['original', 'inverse', 'wiener']

rows = img.shape[0]
cols = img.shape[1]

Cx = rows//2
Cy = cols//2

# 大气湍流模型的参数
k = 0.0025

# 构造退化函数
H = np.zeros((rows, cols))
for x in range(rows):
    for y in range(cols):
        D = ((x - Cx) ** 2 + (y - Cy) ** 2) ** (5/6)
        H[x, y] = np.exp(-k * D)

# 根据上一个实验得出的截止频率,构造巴特沃斯低通滤波器
D0 = 60
n = 10
HB = np.zeros((rows, cols))
for x in range(rows):
    for y in range(cols):
        D = np.sqrt((x-Cx)**2 + (y-Cy)**2)
        HB[x, y] = 1 / (1 + (D/D0)**(2*n))

# 维纳滤波的参数
K = [0.01, 0.2]

img_inverse_list = []
img_wiener_list = []
for idx, img in enumerate(img_original_list):
    dft = np.fft.fft2(img)
    dft_shift = np.fft.fftshift(dft)
    # 逆滤波
    dft_filtered = np.multiply(np.multiply(dft_shift, 1/H), HB)
    img_result = np.abs(np.fft.ifft2(np.fft.fftshift(dft_filtered)))
    img_inverse_list.append(img_result)
    # 维纳滤波
    K_ = K[idx]
    HW = np.conj(H) / ((np.abs(H) ** 2)+K_)
    dft_filtered = np.multiply(dft_shift, HW)
    img_result = np.abs(np.fft.ifft2(np.fft.fftshift(dft_filtered)))
    img_wiener_list.append(img_result)

_, axs = plt.subplots(2, 3)

for i in range(2):
    axs[i, 0].imshow(img_original_list[i], cmap='gray')
    axs[i, 0].set_title(img_name_list[0])
    axs[i, 0].axis('off')
    axs[i, 1].imshow(img_inverse_list[i], cmap='gray')
    axs[i, 1].set_title(img_name_list[1])
    axs[i, 1].axis('off')
    axs[i, 2].imshow(img_wiener_list[i], cmap='gray')
    axs[i, 2].set_title(img_name_list[2])
    axs[i, 2].axis('off')

#plt.savefig('wiener_filter.jpg')
plt.show()

结果展示

在这里插入图片描述

K=0.025
在这里插入图片描述

讨论

维纳滤波是美国应用数学家诺伯特·维纳(Norbert Wiener)在二十世纪四十年代提出的一种滤波器,并在1949年出版.
维纳滤波器(Wiener filter)是由数学家维纳(Norbert Wiener)提出的一种以最小平方为最优准则的线性滤波器。在一定的约束条件下,其输出与一给定函数(通常称为期望输出)的差的平方达到最小,通过数学运算最终可变为一个托布利兹方程的求解问题。维纳滤波器又被称为最小二乘滤波器或最小平方滤波器,目前是基本的滤波方法之一。维纳滤波是利用平稳随机过程的相关特性和频谱特性对混有噪声的信号进行滤波的方法,1942年美国科学家N.维纳为解决对空射击的控制问题所建立,是40年代在线性滤波理论方面所取得的最重要的成果。
维纳滤波器的优点是适应面较广,无论平稳随机过程是连续的还是离散的,是标量的还是向量的,都可应用。对某些问题,还可求出滤波器传递函数的显式解,并进而采用由简单的物理元件组成的网络构成维纳滤波器。维纳滤波器的缺点是,要求得到半无限时间区间内的全部观察数据的条件很难满足,同时它也不能用于噪声为非平稳的随机过程的情况,对于向量情况应用也不方便。因此,维纳滤波在实际问题中应用不多。实现维纳滤波的要求是:①输入过程是广义平稳的;②输入过程的统计特性是已知的。根据其他最佳准则的滤波器亦有同样要求。然而,由于输入过程取决于外界的信号、干扰环境,这种环境的统计特性常常是未知的、变化的,因而难以满足上述两个要求。这就促使人们研究自适应滤波器。
经过改变参数k,可以看出在叠加噪声的情况下,逆滤波难以得到理想结果,而维纳滤波通过交互式地选取参数K可以较好地滤除噪声的干扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1365630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试算法99:最小路径之和

题目 在一个mn(m、n均大于0)的格子中,每个位置都有一个数字。一个机器人每步只能向下或向右,请计算它从格子的左上角到达右下角的路径的数字之和的最小值。例如,从图14.8中33的格子的左上角到达右下角的路径的数字之和…

vue-springboot 音乐推荐系统 带歌词的音乐播放器系统设计与实现 7902c

少数民族音乐网站在流畅性,续航能力,等方方面面都有着很大的优势。这就意味着少数民族音乐网站的设计可以比其他系统更为出色的能力,可以更高效的完成最新的音乐信息、音乐资讯、在线交流等功能。 此系统设计主要采用的是JAVA语言来进行开发&…

有趣的前端知识(一)

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读HTML简介基础声明HTML标签标题段落注释水平线文本格式化标签超链接图像<i…

C#开源的一款友好的.NET SDK管理器

前言 今天推荐一款由C#开源的、友好的.NET SDK管理器&#xff1a;Dots。 工具介绍 Dots 是一款 .NET SDK 管理器&#xff0c;可让您轻松安装、卸载和切换 .NET SDK。它是一款跨平台工具&#xff0c;可在 Windows 和 macOS 上运行&#xff0c;即将支持 Linux。它由 C# 编写&a…

机器学习周报第27周

目录 摘要Abstract一、文献阅读 摘要 本周阅读了一篇混沌时间序列预测的论文&#xff0c;论文模型主要使用的是时间卷积网络&#xff08;Temporal Convolutional Network&#xff0c;TCN&#xff09;、LSTM以及GRU。在数据集方面除了使用现实的时间序列数据外&#xff0c;还通…

区块链与元宇宙电商:重塑商业生态革命

小编介绍&#xff1a;10年专注商业模式设计及软件开发&#xff0c;擅长企业生态商业模式&#xff0c;商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地&#xff1b;扶持10余个电商平台做到营收过千万&#xff0c;数百个平台达到百万会员&#xff0c;欢迎咨询。 在当…

ICMP隐蔽隧道工具Pingtunnel搭建隧道(附搭建环境避坑超详细)

工具介绍可参考其他博主文章&#xff0c;这里直接上环境搭建和踩坑避坑后的工具攻击过程。 目录 环境搭建 #安装libpcap的依赖环境 打通隧道&#xff08;linux服务端开启监听&#xff09; 连接测试&#xff08;kali攻击机上启动&#xff09; 远控攻击&#xff08;win7&…

CSS案例:flex、justify-content、align-items

黑马程序员JS学习时的一个案例&#xff0c;CSS有点不懂&#xff0c;单拎出来分析。 具体出处是某站视频中的数组篇讲解&#xff0c;&#xff08;点击链接跳转&#xff09; CSS案例 效果&代码1. 先分析最大的boxflex布局 justify-contentalign-items以 flex-end 为例 2. box…

STM32 基础知识(探索者开发板)--146讲 IIC

IIC特点&#xff1a; 同步串行半双工通信总线 IIC有一个弱上拉电阻&#xff0c;在主机和从机都没有传输数据下拉时&#xff0c;总线会自动上拉 SCL在低电平期间&#xff0c;改变SDA的值来上传数据&#xff0c;方便SCL电平上升时进行数据读取 SCL在高电平期间&#xff0c;不能…

第二证券:如何解决股票亏损问题?

1、进行补仓 假设该股票基本面较好只是暂时的出现下跌&#xff0c;那么就可以选择补仓。出资者在亏本过程中&#xff0c;可以经过补仓来增加持仓数量&#xff0c;从而下降其持仓本钱&#xff0c;等候股票的反弹&#xff0c;来抵达快速解套的意图。 2、高抛低吸、做T获利弥补 …

书生·浦语大模型趣味 Demo笔记及作业

文章目录 笔记作业基础作业&#xff1a;进阶作业&#xff1a; 笔记 书生浦语大模型InternLM-Chat-7B 智能对话 Demo&#xff1a;https://blog.csdn.net/m0_49289284/article/details/135412067书生浦语大模型Lagent 智能体工具调用 Demo&#xff1a;https://blog.csdn.net/m0_…

018、通用集合类型

Rust标准库包含了一系列非常有用的被称为集合的数据结构。大部分的数据结构都代表着某个特定的值&#xff0c;但集合却可以包含多个值。 与内置的数组与元组类型不同&#xff0c;这些集合将自己持有的数据存储在了堆上。这意味着数据的大小不需要在编译时确定&#xff0c;并且可…

【Docker】数据卷容器

多个容器进行数据交换 这里引入一个数据卷容器的概念 以下介绍容器A与容器B进行数据交换的原理 假如容器A要与容器 B 进行数据交换&#xff0c; 首先创建一个容器C&#xff0c;将他挂载到数据卷&#xff0c;然后再将容器A与容器B挂载到容器C&#xff0c;这样做相当于容器A与…

在版权付费方面,OpenAI 比人想象中的还要「小气」

随着新闻出版商与AI公司达成“使用新闻训练AI模型”的协议&#xff0c;像 OpenAI 等科技企业愿意为受版权保护的信息支付的价格逐渐浮出水面。 据 The Information 报道&#xff0c;OpenAI 每年愿意向出版商提供 100万到500万美元来支付受版权保护的新闻文章训练其AI模型。 但…

LaTex的下载与安装(Texlive+TexStudio,2023版)

目录 1. Texlive的下载与安装2. TexStudio的下载与安装 LaTex的下载与安装涉及到环境配置和编辑器安装&#xff0c;本文主要根据一下两个较为常用的组合进行下载和安装&#xff1a; Texlive&#xff08;是必须安装的LaTex环境&#xff09;&#xff1b;TexStudio&#xff08;是…

数据挖掘总结(考试版)

数据挖掘总结&#xff1a; 第一章&#xff1a; 数据挖掘KDD步骤&#xff1a; 数据清理: (消除噪声和删除不一致的数据)数据集成&#xff08;多种数据源可以组合在一起&#xff09;数据选择&#xff08;从数据库中提取与分析任务相关的数据&#xff09;数据变换&#xff08;数…

基于海思SD3403/3519AV200的医疗内窥镜技术框架

医疗内窥镜市场&#xff0c;经过多年的发展&#xff0c;产品种类繁多&#xff0c;应用场景更加的多样了&#xff0c;但是基础的技术方案非常的收敛&#xff0c;主流的方案就是海思的SOC和FPGA。海思的SOC以优秀的图像质量&#xff0c;和便携的开发占据了大量的硬镜应用&#xf…

2024年1月7日15:09:50

2024年1月7日15:09:55复习&#xff1a;我今天学了有价值的东西&#xff0c;那就是在瓦罗兰特拿到了三杀 2024年1月7日15:11:10学习了如何使用vivopad2的键盘 可以稍微用一下 2024年1月7日15:17:58 学习一个编程的题目 2024年1月7日15:31:27不用机械键盘打字效率就是比不用低…

系列六、MindManager取消首字母自动大写

一、MindManager取消首字母自动大写 1.1、步骤 主页>字体>设置字体样式>格式字体>文本和大写>文本大写>无 1.2、参考 https://tieba.baidu.com/p/3752136361

私有仓库Gogs搭建(docker环境)

文章目录 环境准备Gogs简介MYSQL(docker) 搭建gogs(docker) 部署gogs初始化配置配置管理员信息仓库创建项目代码上传仓库 环境准备 本地环境安装git,参考Git分布式版本控制工具学习管理面板1panel&#xff0c;安装参考Armbian安装1panel教程服务器docker环境&#xff08;如果使…