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

原理:

带阻滤波器(Band-Stop Filter)是一种在信号处理领域常用的滤波器,它的主要功能是去除(或减弱)信号中特定频率范围内的成分,同时允许其他频率范围的信号通过。这种滤波器在多种应用中都非常有用,比如去除电子设备中的干扰信号、音频处理中的噪声消除等。

频率选择性:带阻滤波器设计用来阻止一个特定的频率带宽内的信号。这个带宽被称为阻带(Stop Band),其外的频率区域则被允许通过,这部分称为通带(Pass Band)。
**滤波过程:**当信号进入带阻滤波器时,滤波器会根据其频率特性分别处理不同的频率成分。在阻带范围内的频率成分会被显著衰减或完全去除。而在通带范围内的频率成分则基本不受影响,可以顺利通过滤波器。
设计参数:
截止频率:决定阻带的上下频率边界。
阻带宽度:阻带的频率范围。
衰减量:阻带内信号的衰减程度。
滤波器阶数:影响滤波器的陡峭程度和性能。
类型
模拟带阻滤波器:使用电阻、电容和电感等元件构建,常用于模拟信号处理。
数字带阻滤波器:通过数字信号处理算法实现,可以精确设定阻带频率和宽度,常用于数字信号处理。
应用
带阻滤波器广泛应用于电子、通信、音频处理等领域,特别是在需要去除特定频率干扰或噪声的情况下。例如,去除电源线产生的50Hz或60Hz的电气噪声,或者在音频编辑中去除特定频率的背景噪音。

python实现下述结果

在这里插入图片描述

提示

结果依次显示了添加周期噪声后的图像及其频谱图,根据所加噪声频率确定的带阻滤波器的频域表示,带阻滤波器对含噪图像滤波后得到的结果图。
第一步为图像添加正弦噪声,其理论说明如下图
在这里插入图片描述

实验中,直接在空间域根据上面一个公式添加正弦噪声,A=50,Bx=By=0,四组噪声,频率分别为u0=v0=50;u1=-50,v1=50;u2=50sqrt(2),v2=0;u3=0,v3=50sqrt(2)。注意:图像在叠加噪声前需转换为浮点数。
第二步计算含噪图像的频谱。
第三步构造带阻滤波器的传递函数(参考数字图像处理这本书),其中参数W=5,D0=50*sqrt(2),n=4
第四步是滤波并将结果转到空间域并显示。

python代码

import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread('Fig0427.tif', 0)
rows = img.shape[0]
cols = img.shape[1]Cx = rows//2
Cy = cols//2# 噪声频率
u0 = 50
v0 = 50
u1 = u0*np.sqrt(2)
v1 = v0*np.sqrt(2)# 先将图像转换为浮点数,便于后续添加噪声
img = img.astype(np.float32)
for x in range(rows):for y in range(cols):noise1 = np.sin(2*np.pi*u0*x/rows+2*np.pi*v0*y/cols)noise2 = np.sin(2*np.pi*-u0*x/rows+2*np.pi*v0*y/cols)noise3 = np.sin(2*np.pi*u1*x/rows)noise4 = np.sin(2*np.pi*v1*y/cols)noise = noise1+noise2+noise3+noise4img[x, y] = img[x, y] + 50*noise
# img = 255*(img-img.min())/(img.max()-img.min())# 计算带噪图像的频谱
dft = np.fft.fft2(img)
dft_shift = np.fft.fftshift(dft)
dft_show = np.log1p(np.abs(dft_shift))
# dft_show = 255*(dft_show-dft_show.min())/(dft_show.max()-dft_show.min())
# cv2.imwrite('fft2.jpg', dft_show)img_list = [img, dft_show]
img_name_list = ['original', 'fft']# 带宽,决定了带阻滤波器去除频率分量的多少
W = 5
# 截止频率,决定了去除哪些频率分量
D0 = u1
# 巴特沃斯滤波器的阶数
n = 4# 构造巴特沃斯带阻滤波器
H = np.zeros((rows, cols))
for x in range(rows):for y in range(cols):D = np.sqrt((x - Cx) ** 2 + (y - Cy) ** 2)H[x, y] = 1 / (1 + (D*W / (D**2 - D0**2 + 1e-10)) ** (2 * n))img_list.append(H)
img_name_list.append('bandreject')dft_filtered = np.multiply(dft_shift, H)
img_result = np.abs(np.fft.ifft2(np.fft.fftshift(dft_filtered)))
img_list.append(img_result)
img_name_list.append('result')_, axs = plt.subplots(2, 2)for i in range(2):for j in range(2):axs[i, j].imshow(img_list[i * 2 + j], cmap='gray')axs[i, j].set_title(img_name_list[i * 2 + j])axs[i, j].axis('off')#plt.savefig('bandreject.jpg')
plt.show()

结果展示

在这里插入图片描述

总结

带阻滤波器可分为窄带阻滤波器和宽带阻滤波器,在实际电路中,常利用无源低通滤波器和高通滤波器并联构成无源带阻滤波电路,然后接相同比例运算电路,从而得到有源带阻滤波电路。它能通过大多数频率分量、但将某些范围的频率分量衰减到极低水平的滤波器。其中点阻滤波器(notch filter)是一种特殊的带阻滤波器,它的阻带范围极小,有着很高的Q值(Q Factor)。
这是分别对应于图像水平方向和垂直方向的正铉噪声。在构建滤波器的时候就需要考虑,尽可能的过滤除这些具有这些亮点对应的正铉噪声,希望尽可能消减细节。N=4.

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

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

相关文章

C语言中#define的用法详解

C语言中的#define是一个预处理器指令,用于定义常量、宏和条件编译。在本文中,我们将深入探讨#define的各种用法,以及它在C程序中的作用。 1. 定义常量 #define最基本的用法之一是定义常量。通过使用#define,可以在程序中为一个值…

计算机网络——多址复用技术

1. 频分多址(FDMA) 1.1 基本原理 频率分配:在FDMA系统中,整个可用的频带被分割成多个较小的频带或通道。每个通道分配给一个用户。 时间利用:用户在分配给他们的频道上持续进行通信,不受时间限制。 1.2 优…

云尚办公项目学习

完整的笔记可以参考这个专栏,写的挺详细的:云尚办公课件笔记,come on boy form-create前端组件 formProps记录了表单有哪些表单项,分别是哪些类型(下拉,单选,输入框) formOptions记…

移动零【双指针】

Problem: 283. 移动零 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。 右指针不断向右移动,每次右指针指向非零数,则将左右指针对应…

VuePress部署到GitHub Pages

一、git push自动部署 1、创建用于工作流的文件 在项目根目录下创建一个用于 GitHub Actions 的工作流 .yml 文件 name: docson:# 每当 push 到 main 分支时触发部署push:branches: [main]# 手动触发部署workflow_dispatch:jobs:docs:runs-on: ubuntu-lateststeps:- uses: a…

深入Pandas:数据分析的强大工具

文章目录 引言Pandas简介Pandas的核心功能实战示例:数据分析与可视化示例目的环境需求示例数据集示例过程及结果源代码 结语 引言 在当今快速发展的数据科学领域,Python凭借其强大的库生态系统,特别是像Pandas这样的库,已成为数据…

MACOS Atrust服务异常

MAC版Atrust服务异常 点击进入办公后出现提示其一: 核心服务未启动,部分功能存在异常,确定重新启动吗? 可能的原因: 1.上次已完全退出客户端 2.核心服务被其他程序优化禁用 点击重新启动后,出现提示&#x…

【React】react-router-dom中的HashRouter和BrowserRouter实现原理

1. 前言 在之前整理BOM的五个对象时,提到: location.hash发生改变后,会触发hashchange事件,且history栈中会增加一条记录,但页面不会重新加载——实现HashRouter的关键history.pushState(state, , URL)执行后&#xf…

Chinese-llama-2部署踩坑记录

Chinese-llama-2部署踩坑记录 1. Chinese-LLaMA-Alpaca-2A. 部署a. inference_with_transformers_zhb. text generation webui_zhc. api_calls_zhd. llamacpp_zhe. privategpt_zhf. langchain_zh Tool Github 1. Chinese-LLaMA-Alpaca-2 A. 部署 a. inference_with_transform…

新手深入PyTorch中RNN、LSTM和GRU使用和理解

目录 torch.nn子模块Recurrent Layers nn.RNNBase RNNBase 类描述 RNNBase 类的功能和作用 flatten_parameters() 方法 示例代码 nn.RNN RNN 类描述 RNN 类的功能和作用 RNN 类的参数 输入和输出 注意事项 示例代码 nn.LSTM LSTM 类描述 LSTM 类的功能和作用 …

05、Kafka ------ CMAK 各个功能的作用解释(主题和分区 详解,用命令行和图形界面创建主题和查看主题)

目录 CMAK 各个功能的作用解释(主题)★ 主题★ 分区★ 创建主题:★ 列出和查看主题 CMAK 各个功能的作用解释(主题) ★ 主题 Kafka 主题虽然也叫 topic,但它和 Pub-Sub 消息模型中 topic 主题及 AMQP 的 t…

【AI视野·今日NLP 自然语言处理论文速览 第六十六期】Tue, 31 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 31 Oct 2023 (showing first 100 of 141 entries) Totally 100 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Eval4NLP 2023 Shared Task on Prompting Large Language Models a…

nginx下日志配置和排查错误

目录 一:配置 二:排查日志 一:配置 在Nginx中,日志配置是记录服务器活动和排查问题的重要环节。以下是一些常见的Nginx日志配置选项: 日志级别:通过设置日志级别,可以控制日志的详细程度。常…

【心得杂记】简单聊聊限制高速面阵相机性能的因素

研究了限制高速面阵相机发展的因素,感觉就是揭开了薄雾面纱之后的复杂。 个人观点,不保证全对~ 欢迎讨论~ 高速相机是一个整体,涉及的各个零部件和模组很多,每个环节都会影响相机指标的提高。 高速相机主要包括的核心部件有&#…

什么是低代码开发平台(Low Code Platform) 有什么优势特点

低代码平台(Low Code Platform)是一种用于快速开发应用程序的软件开发平台。它通过可视化的界面和简化的开发工具,使开发人员能够使用少量的编码和配置来构建复杂的应用程序。 白码低代码平台是一种高效、灵活的软件开发工具,通过可视化的界面和少量的编…

vue3(十二)-基础入门之反向代理

一、反向代理 当遇到跨域问题时,可以通过反向代理解决跨域问题 1、创建一个与 package.json 同级的文件 vue.config.js vue.config.js : 代理以 /ajax 为开头的地址。代理服务器为 :https://www.xxxx.com const { defineConfig } requi…

普中STM32-PZ6806L开发板(HAL库函数实现-按键扫描)

简介 实现按键扫描, 实现四个按键按下控制灯的亮灭 电路原理图 按键电路原理图 按键与主芯片引脚原理图 其他知识 原理图分析 Key_UP按下会有高电平输入, 所以电路设置应该是默认低电平, 初始化为下拉输入 Key_Left/Right/Down按下会有低电平, 初始化为下拉输…

OpenHarmony从入门到放弃(四)

设计一款使用Harmony开发的App 接下来我会通过设计并开发一款资讯类的App来入门OpenHarmony; 以下是我对App的设计想法; 一、模块划分 内容模块:App的核心模块,负责管理和展示资讯内容,具体包括内容获取与处理&…

Winform、WPF如何解决前端卡死问题

在WinForms和WPF中,前端卡死问题通常是由于长时间的计算或阻塞操作导致的。以下是一些解决前端卡死问题的常见方法: 使用异步操作:将长时间的计算或阻塞操作放在后台线程中执行,以避免阻塞UI线程。可以使用Task、async/await等异步…

CSS 使用技巧

CSS 使用技巧 引入苹方字体 苹方提供了六个字重,font-family 定义如下:苹方-简 常规体font-family: PingFangSC-Regular, sans-serif;苹方-简 极细体font-family: PingFangSC-Ultralight, sans-serif;苹方-简 细体font-family: PingFangSC-Light, sans…