频率域滤波图像复原之带阻滤波器的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 plt

img = 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+noise4
        img[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.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netplan介绍

1 介绍 1.1 简介 Netplan是一个抽象网络配置描述器。通过netplan命令,你只需用一个 YAML文件描述每个网络接口所需配置。netplan并不关系底层管理工具是NetworkManager还是networkd。 它是一个在 Linux 系统上进行网络配置的实用程序。您创建所需接口的描述并定义…

C语言编译器(C语言编程软件)完全攻略(第二十部分:Code::Blocks下载地址和安装教程(图解))

介绍常用C语言编译器的安装、配置和使用。 二十、Code::Blocks下载地址和安装教程(图解) Code::Blocks 是一款免费开源的 C/C IDE,支持 GCC、MSVC 等多种编译器,还可以导入 Dev-C 的项目。Code::Blocks 的优点是:跨…

16 Linux 内核定时器

一、Linux 时间管理和内核定时器简介 1. 内核时间管理简介 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、定时器等。 硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系…

一文详解动态 Schema

在数据库中,Schema 常有,而动态 Schema 不常有。 例如,SQL 数据库有预定义的 Schema,但这些 Schema 通常都不能修改,用户只有在创建时才能定义 Schema。Schema 的作用是告诉数据库使用者所希望的表结构,确保…

【读书】《白帽子讲web安全》个人笔记Ⅰ-1

目录 前言: 第1章 我的安全世界观 1.1 Web安全简史 1.1.1中国黑客简史 1.1.2黑客技术的发展历程 1.1.3web安全的兴起 1.2黑帽子,白帽子 1.3返璞归真,揭秘安全的本质 1.4破除迷信,没有银弹 1.5安全三要素 1.6如何实施安…

web期末作业数字时钟,实时更新,音乐播放

文章目录 月球动态引导页加载引导页主页面主页面html需要完整代码私信我 月球动态引导页 加载引导页 主页面 主页面html <!DOCTYPE html> <html lang"zh-CN"><head><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1&…

【数据采集与预处理】流数据采集工具Flume

一、Flume简介 数据流 &#xff1a;数据流通常被视为一个随时间延续而无限增长的动态数据集合&#xff0c;是一组顺序、大量、快速、连续到达的数据序列。通过对流数据处理&#xff0c;可以进行卫星云图监测、股市走向分析、网络攻击判断、传感器实时信号分析。 &#xff08;…

使用docker安装mysql 8.0

打开命令行&#xff0c;运行 ocker pull mysql:8.0.21 下载成功后&#xff0c;可以看到 进入cmd&#xff0c;输入 docker run -d --name mysql -p 3306:3306 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORDabc12345…

Vue3-36-路由-路由的元数据信息 meta

什么是 meta 简单的理解&#xff0c;meta 就是路由对象 的一个属性对象&#xff0c; 可以 通过这个 属性给 路由对象添加 一些必要的属性值&#xff0c; 在使用路由对象时可以获取到这个属性型对象&#xff0c;从而进行一些其他的逻辑判断。 meta 这个非常的简单&#xff0c;就…

最新GPT4教程,GPT语音对话使用,Midjourney绘画,ChatFile文档对话总结+DALL-E3文生图教程工具

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

【Filament】自定义Blinn Phong光照模型

1 前言 光照元素主要有环境光&#xff08;ambient&#xff09;、漫反射光&#xff08;diffuse&#xff09;、镜面反射光&#xff08;specular&#xff09;&#xff0c;基础的光照模型主要有兰伯特&#xff08;Lambert&#xff09;光照模型、冯氏&#xff08;Phong&#xff09;光…

解决pyuvc无法读取yuv格式的问题

问题描述 我使用pyuvc访问uvc摄像头&#xff0c;但是发现pyuvc只支持了MJPEG的格式和GRAY格式。我在linux下通过v4l2-ctl查看&#xff0c;发现摄像头本身还支持YUV的格式&#xff0c;但是pyuvc解析出的帧格式则没有。后面通过阅读pyuvc的代码&#xff0c;发现libuvc本身没有限…

代码随想录刷题第三十八天| 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

代码随想录刷题第三十八天 动态规划基础理论 斐波那契数 (LC 509) 题目思路&#xff1a; 代码实现&#xff1a; class Solution:def fib(self, n: int) -> int:if n<1: return ndp [0 for _ in range(n1)]dp[1] 1for i in range(2, n1):dp[i] dp[i-1]dp[i-2] …

DS|图(存储与遍历)

题目一&#xff1a;DS图 -- 构建邻接表 题目描述&#xff1a; 已知一有向图&#xff0c;构建该图对应的邻接表。 邻接表包含数组和单链表两种数据结构&#xff0c;其中每个数组元素也是单链表的头结点&#xff0c;数组元素包含两个属性&#xff0c;属性一是顶点编号info&…

Spark概述

Spark概述 Spark是什么 Apache Spark是一个快速的&#xff0c;多用途的集群计算系统&#xff0c;相对于Hadoop MapReduce将中间结果保存在磁盘中&#xff0c;Spark使用了内存保存中间结果&#xff0c;能在数据尚未写入硬盘时在内存中进行运算Spark只是一个计算框架&#xff0c;…

unity PDFRender Curved UI3.3

【PDF】PDFRender 链接&#xff1a;https://pan.baidu.com/s/1wSlmfiWTAHZKqEESxuMH6Q 提取码&#xff1a;csdn 【曲面ui】 Curved UI3.3 链接&#xff1a;https://pan.baidu.com/s/1uNZySJTW0-pPwi2FTE6fgA 提取码&#xff1a;csdn

Syntax Error: Error: Cannot find module ‘imagemin-optipng‘

一、背景&#xff1a; 心酸&#xff0c;很难受&#xff1b;本人主要做后端开发&#xff0c;这几天要打包前端项目 遇到了这个报错 Syntax Error: Error: Cannot find module imagemin-optipng 搞了3天时间才打包成功&#xff0c;使用了各种姿势才搞定。期间百度了各种方案都…

JVM工作原理与实战(七):类的生命周期-初始化阶段

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、类的生命周期 1.加载&#xff08;Loading&#xff09; 2.连接&#xff08;Linking&#xff09; 3.初始化&#xff08;Initialization&#xff09; 4.使用&#xff08;Using&…

噬菌体序列分析工具PhaVa的使用和使用方法

github: 25280841/PhaVa: Adapting the phasefinder approach for identifying phase variation to long reads (github.com) 挺简单的&#xff0c;这里就不翻译了&#xff0c;大家看着直接用吧。 PhaVa PhaVa is an approach for finding potentially Phase Variable invert…

linux中的系统安全

一.账号安全 将非登录用户的shell设为/sbin/nologin 系统中用户有三种&#xff1a;超级管理员 普通用户 程序用户 前两种用户可以登录系统&#xff0c;程序用户不给登录 所以称为非登录用户 命令格式&#xff1a; usermod -s /sbin/nologin&#xff08;改已有用户&#…