一文读懂傅里叶变换处理图像的原理 !!

傅里叶变换处理图像

文章目录

前言

快速傅里叶变换

第一步:计算二维快速傅里叶变换

第二步:将零频域部分移到频谱中心

编码

低通滤波器

高通滤波器

理想的滤波器

巴特沃思(Btterworth)滤波器

高斯(Gaussian)滤波器

滤波器比较

低通滤波器的结论

高通滤波器的结论

总结


前言

图 (a): (从左到右) (1) 原始图片 (2) 使用高斯低通滤波器 (3) 使用高斯高通滤波器. 本文中的原始图像来自OpenCV Github示例。

数字图像现在已经成为我们日常生活的一部分。因此,数字图像处理变得越来越重要。如何提高图像的分辨率或降低图像的噪声一直是人们热门话题。傅里叶变换可以帮助我们解决这个问题。我们可以使用傅立叶变换将灰度像素模式的图像信息转换成频域并做进一步的处理

今天,我将讨论在数字图像处理中,如何使用快速傅立叶变换,以及在Python中如何实现它。操作流程如下 (从左到右):

图(b)

  1. 实现快速傅里叶变换,将灰度图像转换为频域
  2. 零频域部分的可视化与集中
  3. 应用低/高通滤波器过滤频率
  4. 离散
  5. 实现快速傅里叶逆变换生成图像数据

让我们深入到每一部分,找出这些步骤背后的理论。


快速傅里叶变换

图 (c): (从左到右) (1)原始图像 (2) FFT 频谱的可视化输出 (3) 集中化 (4) 离散化 (5) 逆向FFT

与现实生活中的光波和声波不同,由于像素的不连续性,数字图像是离散的。这意味着我们应该实现离散傅立叶变换(DFT)而不是傅立叶变换。然而,离散傅立叶变换(DFT)常常太慢而不实用,这就是我选择快速傅立叶变换(FFT)进行数字图像处理的原因。

第一步:计算二维快速傅里叶变换

快速傅里叶变换(FFT)处理的结果是一个很难直接可视化的复数数组。因此,我们必须把它转换成二维空间。这里有两种方法可以可视化这个快速傅里叶变换(FFT)结果:①. 频谱;②. 相位角。

图 (d): (从左到右t) (1) 频谱 (2) 相位角

从图(d)(1)可以看出,四个角上有一些对称图案。这些图案可以在下一步中转换到图像的中心。

频谱图像中的白色区域显示出较高的频率。频谱图像中的角表示低频域。因此,结合以上两点,角上的白色区域表明:在低/零频域中存在高频率,这对于大多数图像来说是非常正常的情况。

另一方面,很难从图(d)(2)中识别出任何明显的图案,这并不代表快速傅立叶变换(FFT)的相位角完全没有用处,因为相位保留了图像所必需的形状特征。

第二步:将零频域部分移到频谱中心

二维快速傅立叶变换(FFT)具有平移和旋转特性,因此我们可以在不丢失任何信息的情况下移动频谱。我把零频域部分移到了频谱的中心,这使得频谱图像对人类更为可见。此外,这种转换可以帮助我们轻松实现高通/低通滤波器。

步骤3:与步骤2相反。将零频域部分移回原位置

步骤4:与步骤1相反。计算二维快速傅里叶逆变换。

步骤3和步骤4的过程是将频谱信息转换回灰度图像。它可以通过应用逆向移位和快速傅立叶变换(FFT)的逆运算来实现。

编码

在Python中,我们可以利用Numpy模块中的numpy.fft  轻松实现快速傅立叶变换(FFT)运算操作。

在理解了傅里叶变换背后的基本理论之后,我们就可以研究如何控制频谱输出来处理图像了。首先,我们需要了解低/高通滤波器。

低通滤波器

图 (e):低通滤波器是一种只允许低频谱通过的滤波器。图像中的低频谱意味着像素值变化缓慢。例如,图像中颜色变化较小的平滑区域(如新空白白纸的中心)被视为低频谱内容。

由于低通滤波器的输出只允许低频通过,对噪声等高频谱内容进行了阻塞,使得处理后的图像具有较少的噪声像素。因此,低通滤波器被广泛应用于图像的去噪。

高通滤波器

图(f):相反,高通滤波器是只允许高频谱通过的滤波器。图像中的高频谱意味着像素值变化很大。例如,图像中颜色变化较大的边缘区域,如两张重叠的白纸和黑纸之间的边缘,被认为是高频谱内容。

在图像中,通过做适当的重复计算来锐化原图像,能用适当的重复计算来锐化原始图像的图像,从高通滤波器的输出可获得图像中的边缘。这将增强原始图像的清晰度,使边缘更加清晰。

从图e(5)和图f(5),我们可以注意到这两个滤波器呈现不同的特性。低通滤波器倾向于保留图像中的整体信息。另一方面,高通滤波器试图辨别出图像中的变化

理想的滤波器

图(g):(从左到右)(1)使用D₀=50的低通滤波器 (2)使用D₀=50的高通滤波器

公式 (1):在理想低通滤波器的公式中,D₀是合理常量,D(u,v)是频域中一点(u,v)与频域矩形中心之间的距离

在理想滤波器背后的概念非常简单:给定一个半径值D₀作为阈值,低通滤波器图(g)(1)在阈值下H(u,v)等于1,在阈值以上H(u,v)等于0。

公式(2):在理想高通滤波器的公式中,D₀是合理常量,D(u,v)是频域中一点(u,v)与频域矩形中心之间的距离

巴特沃思(Btterworth)滤波器

图(h):(从左到右) (1) 使用n=20,D₀=50的Butterworth 低通滤波器(2) 使用n=20,D₀=50的Butterworth 高通滤波器

图 (i):(从左到右) (1)使用n=3的Butterworth 低通滤波器 (2)使用n=3的Butterworth高通滤波器

公式(3):在Butterworth低通滤波器的公式中, D₀是一个合理常量, D(u,v)是频域中一点(u,v)与频域矩形中心之间的距离

与理想滤波器不同的是,巴特沃斯滤波器没有明显的不连续性,使得通过的频率和被过滤的频率之间有明显的边界。巴特沃斯滤波器在函数中引入了一个新的参数n。当操作n时,它影响着通过的频率和被过滤的频率之间边界的清晰程度。图(h)和图(i)

公式(4):在Butterworth高通滤波器的公式中, D₀是一个合理常量,D(u,v)是频域中一点(u,v)与频域矩形中心之间的距离

高斯(Gaussian)滤波器

图 (j):(从左到右) (1) 使用D₀=50的高斯低通滤波器 (2) 使用D₀=50的高斯低通滤波器

公式 (5):在高斯低通滤波器的公式中,D₀是一个合理常量,D(u,v)是频域中一点(u,v)与频域矩形中心之间的距离

与巴特沃斯滤波器相比,高斯滤波器产生的边界更平滑。通过的频谱和被过滤的频谱之间的边界非常模糊,这便可以更平滑的处理图像。

公式 (6):在高斯高通滤波器的公式中,D₀是一个合理常量,D(u,v)是频域中一点(u,v)与频域矩形中心之间的距离

滤波器比较

图 (k):(从左到右) 理想滤波器, n=10的Butterworth滤波器和D₀=50 的高斯滤波器

把所有不同的过滤器放在图(k)中,以总结我们在过滤器设计中所做的工作。从左到右,圆的边缘变得模糊,这将对输出结果产生不同的影响

总体上来看,巴特沃斯滤波器是介于理想滤波器和高斯滤波器之间的滤波器。

低通滤波器的结论

图 (l): (从左到右) (1) 理想滤波器的输出 (2)巴特沃斯滤波器的输出 (3) D₀=50时高斯滤波器的输出

图(l)显示所有三个滤波器都是低通滤波器,因为输出图像保留了整个图像信息。此外,我们可以很容易地注意到高斯滤波器由于低失真比其他两个滤波器表现更好。理想滤波器产生大量波形噪声的原因是,理想滤波器的设计阻塞了距离原点一定半径以外的所有信息。因此,有些信息会在没有任何平滑的情况下急剧中断。相反,巴特沃斯滤波和高斯滤波是平滑的阻塞在距离原点一定半径之外的信息,这使得图像更平滑,失真更小。

高通滤波器的结论

图 (m): (从左到右) (1) 理想滤波器的输出 (2)巴特沃斯滤波器的输出 (3) D₀=50时高斯滤波器的输出

毫无疑问,图(m)中的滤波器是高通滤波器,因为输出结果只捕获边缘。在滤波器中,高通滤波器结果的差异类似于低通滤波器结果。与巴特沃斯滤波器和高斯滤波器相比,理想滤波器的滤波结果有很多失真。

总结

傅里叶变换是处理二维信息的有力工具。FFT允许我们在另一个维度处理图像,这带来了更大的灵活性。

来源:小白学视觉

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

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

相关文章

YogaPro 16s 安装Ubuntu23.04 教程

一、 制作启动盘 官网下载Ubuntu23.04镜像,安装rufus软件,按照下图设置相应格式,然后点击开始即可 二、 磁盘空间分配 流程: 此电脑右键管理 -> 选择磁盘管理 -> 选中D盘 -> 压缩卷 -> 选择需压缩的内存即可 三、…

【AI视野·今日CV 计算机视觉论文速览 第280期】Mon, 1 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 1 Jan 2024 Totally 46 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning Vision from Models Rivals Learning Vision from Data Authors Yonglong Tian, Lijie Fan, Kaifeng Chen, Dina K…

数据结构之堆——学习笔记

1.堆的简介: 接下来看一下堆的建立; 接下来是如何在堆中插入数据以及删除数据: 大根堆的插入操作类似只是改变了一下大于和小于符号,同时插入操作的时间复杂度为O(logn)。 来看几个问题: 答案当…

3D人体姿态估计(教程+代码)

3D人体姿态估计是指通过计算机视觉和深度学习技术,从图像或视频中推断出人体的三维姿态信息。它是计算机视觉领域的一个重要研究方向,具有广泛的应用潜力,如人机交互、运动分析、虚拟现实、增强现实等。 传统的2D人体姿态估计方法主要关注通…

递归问题示例

斐波那契数列 f ( n ) { 1 n 1 1 n 2 f ( n − 1 ) f ( n − 2 ) n > 2 1 , 1 , 2 , 3 , 5 , 8 . . . \begin{aligned} f(n)\begin{cases}1&n1\\ 1&n2\\ f(n-1)f(n-2)&n\gt2 \end{cases}\\ 1,1,2,3,5,8\quad ... \end{aligned} f(n)⎩ ⎨ ⎧​11f(n−1)f(n−…

CMU15-445-Spring-2023-Project #1 - Buffer Pool

前置知识,参考上一篇博客:CMU15-445-Spring-2023-Project #1 - 前置知识(lec01-06) 在存储管理器中实现缓冲池。缓冲池负责将物理页从主内存来回移动到磁盘。它允许 DBMS 支持大于系统可用内存量的数据库。缓冲池的操作对系统中的…

spring boot 集成邮件发送功能

一、首先到QQ邮箱申请开启POP3、SMTP协议 二、安装依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframew…

【漏洞挖掘】挖掘CNVD证书

文章目录 一、CNVD介绍事件型漏洞通用型漏洞 二、挖掘思路1. 黑盒测试资产搜集fofa API筛选脚本 2. 白盒测试代码审计 3. google hack注意事项 一、CNVD介绍 国家信息安全漏洞共享平台&#xff08;简称CNVD&#xff09;&#xff0c;对于白帽子来说&#xff0c;挖掘的漏洞提交后…

关于谷歌Gemini大模型

2023年12月7日&#xff0c;谷歌AI宣布发布新一代基于Transformer架构的大模型Gemini。 Gemini的名字来源于双子座&#xff0c;象征着模型的双重性质&#xff1a; 一方面&#xff0c;它是一个强大的训练模型&#xff0c;可以在各种下游任务上进行微调&#xff0c;如文本摘要、机…

MiniTab的宏基础知识

什么是宏&#xff1f; 宏是包含一系列 Minitab 会话命令的文本文件。可以使用宏自动执行重复性任务&#xff08;例如&#xff0c;生成月度报表&#xff09;或扩展 Minitab 的功能&#xff08;例如&#xff0c;计算特殊检验统计量&#xff09;。 Minitab 提供以下类型的宏&…

计算机毕业设计选题分享-SSM律师事务所业务管理系统01664(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM律师事务所业务管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;律师事务所业务管理系统当然也不能排除在外。律师事务所业务管理系统是以实际运用为开发背景…

CodeWave智能开发平台--03--目标:应用创建--04自定义主题样式5子页面页面跳转逻辑

摘要 本文是网易数帆CodeWave智能开发平台系列的第07篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成04自定义主题样式5子页面页面跳转逻辑 参考:新手训练营-PC端应用 CodeWave智能开发平台的07次接…

NVIDIA Jetpack6.0DP使用过程中的问题

Jetpack6.0DP是2023年12月才发布&#xff0c; 操作系统使用了ubuntu 22.04&#xff0c; gcc是11.4&#xff0c;版本都很高&#xff0c; 用起来还存在一些问题 无法使用jtop https://forums.developer.nvidia.com/t/jtop-no-longer-works-on-jp-6-0-dp/275215 使用$ sudo -H p…

【JAVA】OPENGL+TIFF格式图片,不同阈值旋转效果

有些科学研究领域会用到一些TIFF格式图片&#xff0c;由于是多张图片相互渐变&#xff0c;看起来比较有意思&#xff1a; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*;/*** 可以自已定义日志打印格式…

Oracle数据库新手零基础入门,Oracle安装配置和操作使用详解

一、教程描述 本套教程是专门为初学者量身定制的&#xff0c;无需任何Oracle数据库基础&#xff0c;课程采用循序渐进的教学方式&#xff0c;从Oracle数据库的基础知识开始讲起&#xff0c;并不会直接涉及到一项具体的技术&#xff0c;而是随着课程的不断深入&#xff0c;一些…

基于python的leetcode算法介绍之动态规划

文章目录 零 算法介绍一 例题介绍 使用最小花费爬楼梯问题分析 Leetcode例题与思路[118. 杨辉三角](https://leetcode.cn/problems/pascals-triangle/)解题思路题解 [53. 最大子数组和](https://leetcode.cn/problems/maximum-subarray/)解题思路题解 [96. 不同的二叉搜索树](h…

自动驾驶预测-决策-规划-控制学习(4):预测分析文献阅读

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、摘要分析1.Transformer模型是什么&#xff1f;什么是自注意力机制&#xff1f; 2.数据集是什么&#xff1f;3.预测车辆行驶轨迹和车辆换道意图4. LSTM 网络…

Pytest成魔之路 —— fixture 之大解剖!

1. 简介 fixture是pytest的一个闪光点&#xff0c;pytest要精通怎么能不学习fixture呢&#xff1f;跟着我一起深入学习fixture吧。其实unittest和nose都支持fixture&#xff0c;但是pytest做得更炫。 fixture是pytest特有的功能&#xff0c;它用pytest.fixture标识&#xff0c…

MybatisPlus—快速入门

目录 1.使用MybatisPlus的基本步骤 1.1引入MybatisPlus的起步依赖 1.2 定义Mapper 2.MybatisPlus常用注解 2.1 TableName 2.2 TableId 2.3 TableField 2.4 小结 3. 常用配置 4. 总结 1.使用MybatisPlus的基本步骤 1.1引入MybatisPlus的起步依赖 MyBatisPlus官方提…

如何使用 NFTScan NFT API 在 PlatON 网络上开发 Web3 应用

PlatON 是由万向区块链和矩阵元主导开发的面向下一代的全球计算架构&#xff0c;创新性的采用元计算框架 Monad 和基于 Reload 覆盖网络的同构多链架构&#xff0c;其愿景是成为全球首个提供完备隐私保护能力的运营服务网络。它提供计算、存储、通讯服务&#xff0c;并提供算力…