问题三十五:傅立叶变换——带通滤波

news2024/12/23 12:43:12

在这里插入图片描述
傅里叶变换(Fourier Transform)是一种用于分析信号的数学工具,它将信号分解成若干个不同频率的正弦和余弦函数。在图像处理中,傅里叶变换可以用来分析图像中各个频率的成分,从而进行滤波、增强等操作。

在傅里叶变换中,频率表示了信号的周期性特征。具体来说,一个频率为f的正弦函数可以表示为:
s i n ( 2 π f t ) sin(2πft) sin(2πft)
其中,t表示时间,f表示频率。傅里叶变换的基本思想就是将一个信号分解成若干个不同频率的正弦和余弦函数的叠加,即:
f ( t ) = Σ ( A k ∗ s i n ( 2 π f k t ) + B k ∗ c o s ( 2 π f k t ) ) f(t) = Σ(A_k * sin(2πf_kt) + B_k * cos(2πf_kt)) f(t)=Σ(Aksin(2πfkt)+Bkcos(2πfkt))
其中, A k A_k Ak B k B_k Bk是傅里叶变换的系数, f k f_k fk表示第k个频率。

在图像处理中,傅里叶变换可以将一个图像分解成若干个不同频率的正弦和余弦函数的叠加。我们可以通过对这些频率成分的增强或滤波,对图像进行增强或降噪的操作。

带通滤波是一种常用的图像滤波方法,它可以在一定范围内保留图像的某些频率成分,同时去除其他频率成分。具体来说,带通滤波将一个频率范围内的所有频率成分都放大或保留,而其他频率成分则被去除或削弱。

下面是一个Python实现带通滤波的示例代码:

import numpy as np
import cv2
import matplotlib.pyplot as plt

def bandpass_filter(img, lowcut, highcut):
    """
    带通滤波
    :param img: 原图像
    :param lowcut: 低频截止频率
    :param highcut: 高频截止频率
    :return: 滤波后的图像
    """
    # 将图像转换为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 进行傅里叶变换
    f = np.fft.fft2(gray)
    fshift = np.fft.fftshift(f)

    # 构建高斯滤波器
    rows, cols = gray.shape
    mid_row, mid_col = int(rows / 2), int(cols / 2)
    sigma = 5  # 高斯滤波器的标准差
    x, y = np.meshgrid(np.arange(cols) - mid_col, np.arange(rows) - mid_row)
    g = np.exp(-(x ** 2 + y ** 2) / (2 * sigma ** 2))

    # 构建带通滤波器
    bp = np.zeros((rows, cols), np.float32)
    d = np.zeros((rows, cols), np.float32)
    for i in range(rows):
        for j in range(cols):
            d[i, j] = np.sqrt((i - mid_row) ** 2 + (j - mid_col) ** 2)
            if lowcut <= d[i, j] <= highcut:
                bp[i, j] = 1

    # 将滤波器应用到频域图像上
    fshift_bp = fshift * bp

    # 进行傅里叶反变换
    f_ishift = np.fft.ifftshift(fshift_bp)
    img_back = np.fft.ifft2(f_ishift)
    img_back = np.abs(img_back)

    # 对图像进行归一化
    img_back = (img_back - np.min(img_back)) / (np.max(img_back) - np.min(img_back))

    # 将图像转换为8位灰度图像
    img_back = np.uint8(img_back * 255)

    return img_back

# 读取图像
img = cv2.imread('lena.jpg')

# 进行带通滤波
img_filtered = bandpass_filter(img, 20, 80)

# 显示原图和滤波后的图像
plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(img_filtered, cmap='gray')
plt.title('Filtered Image')
plt.show()

这段代码中,我们首先将图像转换为灰度图像,然后进行傅里叶变换。接着,我们构建一个高斯滤波器,用于平滑频域图像,并构建一个带通滤波器,用于保留一定范围内的频率成分。将带通滤波器应用到频域图像上,并进行傅里叶反变换,得到滤波后的图像。

最后,我们对图像进行归一化和类型转换,以便显示和保存图像。在本例中,我们使用matplotlib库显示原图和滤波后的图像。

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

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

相关文章

电商项目后端框架SpringBoot、MybatisPlus

后端框架基础 1.代码自动生成工具 mybatis-plus &#xff08;1&#xff09;首先需要添加依赖文件 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.2</version></dependency><de…

【markdown】markdown语法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

亿华通寻路:“氢”能之火,何以燎原?

氢&#xff0c;是能满足人类一切幻想的终极能源。以氢作为燃料的燃料电池&#xff0c;虽然还没有锂电池行业那样风光&#xff0c;但也在新能源战略布局中占有不可撼动的地位。近两年各界玩家跨界入局&#xff0c;更是掀起了持续的投资浪潮。在国内&#xff0c;政策依然是氢能发…

JAVA进阶--->JVM

文章目录JVM--java Virtual MachineJVM当时学习的存在位置JVM概述(什么是JVM)为什么学习JVM&#xff1f;虚拟机JVM作用JVM组成部分类加器作用类加载过程类什么时候会被加载&#xff08;初始化&#xff09;类加载器双亲委派机制打破双亲委派机制运行时数据区1.程序计数器2.本地方…

提取游戏《Limbus Company》(边狱公司)内素材

注意事项 相关工具会传到网盘。链接如下&#xff08;如果没链接那就是过期还没更新/文章没更新) BGM&#xff1a; 解包工具合集&#xff08;不包含uestdio&#xff0c;assetstdio)&#xff1a;点击此处 此文章主要是讲解如何提取游戏内的音频文件&#xff0c;所以默认各位会…

Spark性能优化四 内存

文章目录&#xff08;一&#xff09;性能优化分析内容怎么被消耗的如何预估程序会消耗多少内存呢(二&#xff09; 性能优化方案1)高性能序列化类库2)持久化或者checkpoint3)JVM 垃圾回收调优4)提高并行度5&#xff09;数据本地化&#xff08;一&#xff09;性能优化分析 一个计…

RocketMQ的基本概念与系统架构

RocketMQ安装与启动基础概念消息&#xff08;Message)主题&#xff08;Topic)标签&#xff08;Tag&#xff09;队列&#xff08;Queue)消息标识&#xff08;MessageId/Key)系统架构生产者 Producer消费者 Consumer名字服务器 NameServer功能介绍路由注册路由剔除路由发现客户端…

【Spark分布式内存计算框架——Structured Streaming】1. Structured Streaming 概述

前言 Apache Spark在2016年的时候启动了Structured Streaming项目&#xff0c;一个基于Spark SQL的全新流计算引擎Structured Streaming&#xff0c;让用户像编写批处理程序一样简单地编写高性能的流处理程序。 Structured Streaming并不是对Spark Streaming的简单改进&#xf…

Hypium框架使能ArkTS应用高效测试

HarmonyOS发布了声明式开发框架ArkUI&#xff0c;带来了极简高效的开发体验&#xff0c;备受广大开发者的青睐。那么&#xff0c;我们在开发过程中&#xff0c;如何确保ArkTS应用的功能和界面满足预期呢&#xff1f;ArkTS应用怎样高效进行专项测试&#xff1f;接下来&#xff0…

机器学习管道中的数据定价

机器学习管道中的数据定价 Data Pricing in Machine Learning 作者&#xff1a;Pipelines Zicun Cong Xuan Luo Pei Jian Feida Zhu Yong Zhang Abstract 机器学习具有破坏性。同时&#xff0c;机器学习只能通过多方协作&#xff0c;在多个步骤中取得成功&#xff0c;就…

Spark 性能调优

1常规性能调优 1.1常规性能调优一&#xff1a;最优资源配置 Spark性能调优的第一步&#xff0c;就是为任务分配更多的资源&#xff0c;在一定范围内&#xff0c;增加资源的分配与性能的提升是成正比的&#xff0c;实现了最优的资源配置后&#xff0c;在此基础上再考虑进行后面…

高研发投入成就产品力,蔚来财报透露重要信号

3月1日晚间&#xff0c;蔚来发布了2022年第四季度及全年财报。 财报显示&#xff0c;蔚来四季度营收160.6亿元&#xff0c;同比增长62.2%&#xff0c;连续11个季度正增长&#xff0c;同时全年总营收达492.7亿元&#xff0c;季度和年度营收均创新高。 尽管过去一年受到新冠疫情…

妇女节到了,祝福所有女神 Happy Women‘s Day!

在每年&#xff13;月&#xff18;日人们庆祝妇女节 &#xff37;omens Day is cllebrated on March 8 every year.国际妇女节(IWD)&#xff0c;中国内地称“三八”国际劳动妇女节或国际劳动妇女节。是在每年的3月8日为庆祝妇女在经济、政治和社会等领域作出的重要贡献和取得的…

5个商用字体网站分享

整理了5个免费、商用字体素材网站&#xff0c;对你有帮助记得点赞收藏。 更多设计素材免费下载&#xff1a; https://www.sucai999.com/?vNTYxMjky 1、FontSpace https://www.fontspace.com/ 这个网站提供了96000款免费字体&#xff0c;可商业用途的字体就有17000款&#xf…

RK3568-IOT核心板不同规格品牌TF卡读写速率测试

1. 测试对象HD-RK3568-IOT 底板基于HD-RK3568-CORE工业级核心板设计&#xff08;双网口、双CAN、 5路串口&#xff09;&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。适用于工业自动化控制、人机界面、中小型医疗分析器…

VMworkstation centos虚拟机配置仅主机模式

首先是仅主机模式介绍&#xff0c;可以略过直接看下面具体配置过程。仅主机模式用于在宿主机和虚拟机之间建立局域网&#xff0c;宿主机和虚拟机之间可以互相访问&#xff0c;原理是建立虚拟交换机和宿主机虚拟网卡&#xff08;vmnet1&#xff09;&#xff0c;宿主机虚拟网卡和…

深入分析域内ntlm relay to adcs服务的利用(含wireshark抓包分析)

前言 2021年中旬&#xff0c;specterops发布了一项针对域证书服务(adcs)的利用白皮书&#xff0c;文档中提到了19种对adcs服务的利用。本篇主要是分析文中提出的ntlm relay to adcs窃取证书的攻击流程&#xff0c;原理和抓包分析。 相关内容 ADCS介绍 Active Directory证书…

AI for Science系列(三):赛桨PaddleScience底层核心框架技术创新详解

继上一篇典型案例及API功能介绍&#xff0c;本篇重点讲解飞桨核心框架为支持科学计算任务在技术上的创新工作与成果。 框架技术创新 飞桨科学计算套件赛桨PaddleScience底层技术依赖飞桨核心框架。为了有力地支撑科学计算任务高效训练与推理&#xff0c;飞桨核心框架在自动微…

案例13-前端对localStorage的使用分析

一&#xff1a;背景介绍 前端在调用后端接口获取某一个人的评论次数、获赞次数、回复次数。调用之后判断后端返回过来的值。如果返回回来的值是0的话&#xff0c;从缓存中获取对应的值&#xff0c;如果从缓存中获取的评论次数为空那么其他两个的次数也为0。 二&#xff1a;思路…

SqlServer Management Studio启用身份验证登录

背景 一开始安装好SqlServer Management Studio时&#xff0c;默认只能用本地window身份验证登录&#xff0c;也就是除了SqlServer的电脑&#xff0c;别的都访问不了这个数据库&#xff0c;这是很不方便的 方案 1.打开SqlServer Management Studio&#xff0c;先用window身份…