频率域图像增强之理想低通滤波器的python实现——数字图像处理

原理

理想低通滤波器(Ideal Low-Pass Filter, ILPF)是数字图像处理中一个重要的概念,尤其在频率域滤波中扮演着关键角色。
定义:
理想低通滤波器是一种在频率域内工作的滤波器,旨在通过允许低频信号通过同时阻止高频信号来平滑图像。
它在频率域中通常表示为一个中心为原点的圆形区域。
工作原理:
图像首先通过傅里叶变换从空间域转换到频率域。
在频率域内,理想低通滤波器定义了一个截止频率,该频率确定了保留低频成分的区域大小。位于圆形内部(半径小于截止频率)的频率成分被保留,而圆形外部的高频成分被阻断。
截止频率:
截止频率是确定滤波器效果的关键参数。截止频率越低,滤波效果越强,导致图像更加平滑,但同时可能丢失更多的细节。
相反,较高的截止频率会保留更多的高频信息,但滤波效果减弱。
应用效果:
理想低通滤波器能有效去除图像中的噪声和高频细节,使图像变得更加平滑。
但它也可能引入一些不希望的效果,如振铃效应,这是由于其在截止频率处突然变化的特性所导致。
局限性:
理想低通滤波器因其在截止频率处的非自然过渡而不常用于实际应用。这种突然的过渡会导致图像中出现人造的振铃效应。
在实际应用中,通常会选择更平滑的低通滤波器,如高斯低通滤波器,以获得更自然的图像过渡效果。
应用领域:
虽然理想低通滤波器在实际图像处理中的应用受限,但它在理论学习和教育中仍然非常重要,帮助我们理解频率域滤波的基本概念。理想低通滤波器提供了一个基础框架,用于理解如何在频率域内操作图像,以及如何通过频率分析来影响图像的视觉内容。尽管在实际应用中可能更倾向于使用其他类型的低通滤波器,理解理想低通滤波器的基本原理仍然是学习数字图像处理的重要组成部分。

编写代码,

输出如下图所示的结果:
在这里插入图片描述

提示

结果显示了理想低通滤波器截止频率分别为5,15,30,80,230时的滤波结果。首先对图像做傅里叶变换并中心化其频谱。接着生成不同截止频率的理想低通滤波器,公式参考课本上公式5.29,需要注意的是,在计算D(u,v)时,不能直接用书上的公式计算(u,v)和原点(0,0)的距离,由于频谱经过了中心化,频率中心已经平移到了(M/2,N/2),所以要计算(u,v)到(M/2,N/2)的距离。最后,如公式5.28所示,将图像频谱与生成的理想低通滤波器传递函数H(u,v)相乘,再做去中心化和傅里叶反变换,便可以得到滤波后的图像。可以观察半径较小的ILPF的模糊效果和振铃特性。注意,np.fft.ifft2得到的是复数阵列,需要用np.abs取其幅度得到最终的图像。此外,滤波后的图像中会出现像素值超过255的情况,plt.imshow会自动调整灰度图的值域范围,所以为了正确显示图像,需要在imshow时加上参数vmin和vmax,如:axs[i, j].imshow(img, vmin=0, vmax=255, cmap=‘gray’)

import cv2
import numpy as np
import matplotlib.pyplot as pltimg=cv2.imread("Fig0441.tif",0)rows,cols=img.shapeDFT=np.fft.fft2(img)
center=np.fft.fftshift(DFT)H=np.zeros((rows,cols))
img_list=[img]
img_name_list=["original"]for n in [5,15,30,80,230]:for i in range(rows):for j in range(cols):D=np.sqrt(np.power((i-rows/2),2)+np.power((j-cols/2),2))if D<=n:H[i,j]=1else:H[i,j]=0G=np.multiply(H,center)no_center=np.fft.fftshift(G)g=np.abs(np.fft.fft2(no_center))img_list.append(g)img_name_list.append("r="+str(n))
_,axs=plt.subplots(2,3)for i in range(2):for j in range(3):axs[i,j].imshow(img_list[i*3+j],vmin=0,vmax=255,cmap="gray")axs[i,j].set_title(img_name_list[i*3+j])axs[i,j].axis('off')plt.show()

结果展示

在这里插入图片描述

总结

做法流程:首先对图像做傅里叶变换并中心化其频谱。接着生成不同截止频率的理想低通滤波器,在计算D(u,v)时,不能直接用书上的公式计算(u,v)和原点(0,0)的距离,由于频谱经过了中心化,频率中心已经平移到了(M/2,N/2),所以要计算(u,v)到(M/2,N/2)的距离。最后,,将图像频谱与生成的理想低通滤波器传递函数H(u,v)相乘,再做去中心化和傅里叶反变换,便可以得到滤波后的图像。可以看到,半径越小,图片越模糊。
低通滤波器容许低频信号通过, 但减弱(或减少)频率高于截止频率的信号的通过。对于不同滤波器而言,每个频率的信号的减弱程度不同。当使用在音频应用时,它有时被称为高频剪切滤波器, 或高音消除滤波器。一个理想的低通滤波器能够完全剔除高于截止频率的所有频率信号并且低于截止频率的信号可以不受影响地通过。实际上的转换区域也不再存在。一个理想的低通滤波器可以用数学的方法(理论上)在频域中用信号乘以矩形函数得到,作为具有同样效果的方法,也可以在时域与sinc函数作卷积得到。

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

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

相关文章

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解 目录 时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现贝叶斯变化点检测与时间序列分解 1.Matlab实现贝叶斯变化点检测与时间序列分解&#xff0c;完…

数据中心网络架构

参考&#xff1a; 一文读懂胖树 数据中心网络架构VL2详解 数据中心网络拓扑设计目标 总体目标 业务可以部署在任意的服务器上可以根据需要动态扩展或者缩小服务器规模 网络角度 均衡负载且高性能&#xff1a;服务器之间的性能仅受限于服务器网卡&#xff0c;而不是链路性能…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群&#xff08;可选&#xff09;其他&#xff1a;Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…

【userfaultfd 条件竞争】starCTF2019 - hackme

前言 呜呜呜&#xff0c;这题不难&#xff0c;但是差不多一个多月没碰我的女朋友 kernel pwn 了&#xff0c;对我的 root 宝宝也是非常想念&#xff0c;可惜这题没有找到我的 root 宝宝&#xff0c;就偷了她的 flag。 哎有点生疏了&#xff0c;这题没看出来堆溢出&#xff0c…

Linux引导过程与服务控制

目录 一、操作系统引导过程 1. 过程图示 2. 步骤解析 2.1 bios 2.2 mbr 2.3 grup 2.4 加载内核文件 3. 过程总结 4. centos6和centos7启动区别 5. 小结 二、服务控制及切换运行级别 1. systemd核心概念 2. 运行级别 3. Systemd单元类型 4. 运行级别所对应的Syst…

基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

js文件上传 分片上传/断点续传/极速秒传

(极速秒传)利用md5判断上传的文件是否存在 MD5信息摘要算法&#xff0c;一种被广泛使用的密码散列函数&#xff0c;可以产生出一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c;用于确保信息传输完整一致。 每一个文件都会生成…

对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

前言 一个web系统&#xff0c;从接口的使用范围也可以分为对内和对外两种&#xff0c;对内的接口主要限于一些我们内部系统的调用&#xff0c;多是通过内网进行调用&#xff0c;往往不用考虑太复杂的鉴权操作。但是&#xff0c;对于对外的接口&#xff0c;我们就不得不重视这个…

Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索

Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而&#xff0c;有时&#xff0c;将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是&#xff0c;如何结合文本和语义搜索结果&#xff1f; 首先&#xff0c;让我…

Java异常篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、 Excption与Error包结构二、Thow与thorws区别三、Error与Exception区别?四、error和exception有什么区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女…

1213:八皇后问题 深度优先搜索算法

1213&#xff1a;八皇后问题 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 在国际象棋棋盘上放置八个皇后&#xff0c;要求每两个皇后之间不能直接吃掉对方。 【输入】 (无) 【输出】 按给定顺序和格式输出所有八皇后问题的解&#xff08;见样例&#xff09;。 题目…

Spring源码之依赖注入(二)

书接上文 文章目录 一. Autowire底层注入逻辑1. 属性注入逻辑 一. Autowire底层注入逻辑 前面我们分析了Spring时如何找到某个目标类的所有注入点这一个核心逻辑&#xff0c;但还没又对核心注入方法inject进行详细分析&#xff0c;下面我们就来详细分析Spring拿到所有的注入点…

【CASS精品教程】CASS11计算城镇建筑密度

CASS中可以很方便计算建筑密度。 文章目录 一、建筑密度介绍二、CASS计算建筑密度1. 绘制宗地范围2. 绘制建筑物3. 计算建筑密度三、注意事项一、建筑密度介绍 建筑密度(building density;building coverage ratio),指在一定范围内,建筑物的基底面积总和与占用地面积的比…

纠删码ReedSolomon

随着大数据技术的发展&#xff0c;HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了数据的可靠性&#xff0c;HDFS通过多副本机制来保证。在HDFS中的每一份数据都有两个副本&#xff0c;1TB的原始数据需要占用3TB的磁盘空间&#xff0c;存储利用率只有1/3。而且系统中大部分…

Spring Boot 2.7.11 集成 GraphQL

GraphQL介绍 GraphQL&#xff08;Graph Query Language&#xff09;是一种用于API的查询语言和运行时环境&#xff0c;由Facebook于2012年创建并在2015年公开发布。与传统的RESTful API相比&#xff0c;GraphQL提供了更灵活、高效和强大的数据查询和操作方式。 以下是GraphQL…

Spring技术内幕笔记之SpringMvc

WebApplicationContext接口的类继承关系 org.springframework.web.context.ContextLoader#initWebApplicationContext 对IOC容器的初始化 SpringMvc如何设计 DispatcherServlet类继承关系 MVC处理流程图如下&#xff1a; DispatcherServlet的工作大致可以分为两个部分&#xf…

NFC物联网开发智能衣橱解决方案

智能衣橱是智能家居的重要内容&#xff0c;现代家居市场对家居智能化控制尤为重视。但是&#xff0c;传统家居生产功能和模式已经无法满足智能化时代的需求&#xff0c;所以家居智能化成为家居行业发展的主要需求。与传统衣橱对比&#xff0c;智能衣橱的功能强大方便人们的生活…

Android--Jetpack--WorkManager详解

2024已经到来&#xff0c;愿你安睡时&#xff0c;山河入梦。愿你醒来时&#xff0c;满目春风。愿你欢笑时&#xff0c;始终如一。愿你行进时&#xff0c;前程似锦&#xff0c;坦荡从容。 编程语言的未来&#xff1f; 目录 一&#xff0c;定义 二&#xff0c;特点 三&#xff0c…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。这个问题如何解决?

这个错误信息 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件 表示 vue-cli-service 命令在你的系统上未被识别。这通常是因为 Vue CLI 没有被正确安装或其路径没有被加入到系统的环境变量中。以下是几个解决这个问题的步骤&#xff1a; 确认 …

LinkedList与ArrayList的比较

1.LinkedList 基于双向链表&#xff0c;无需连续内存 随机访问慢&#xff08;要沿着链表遍历&#xff09; 头尾插入删除性能高 占用内存多 2.ArrayList 基于数组&#xff0c;需要连续内存 随机访问快&#xff08;指根据下标访问&#xff09; 尾部插入、删除性能可以&…