python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理

原理

二维傅里叶变换是一种在图像处理中常用的数学工具,它将图像从空间域(我们通常看到的像素排列)转换到频率域。这种变换揭示了图像的频率成分,有助于进行各种图像分析和处理,如滤波、图像增强、边缘检测等。
在数学上,二维傅里叶变换的原理可以描述如下:
基本概念:
空间域:图像以像素的形式展示,每个像素表示特定位置的亮度或颜色值。
频率域:图像表示为不同频率的波形组合。在这个域中,图像的每个点表示一个特定频率的振幅和相位。
变换过程:

二维傅里叶变换通过将图像从空间域转换到频率域,揭示了图像中的频率信息。
变换公式涉及复数运算,考虑图像中每个点对所有频率成分的贡献。
数学表达式:
对于一个二维图像 f(x,y),其傅里叶变换
F(u,v) 定义为:
在这里插入图片描述
应用:
在频率域,图像的不同特性(如边缘、纹理)会表现为不同的频率成分。
对频率域的操作(如滤波)后,可以通过逆傅里叶变换将图像恢复到空间域。
直观理解:
低频成分通常对应于图像中的大面积均匀区域。
高频成分对应于图像中的细节,如边缘和纹理。
二维傅里叶变换在图像处理中的应用广泛,是一种强大的工具,能够帮助理解和处理图像信息。

python代码实现

在这里插入图片描述

提示

函数np.fft.fft2可以得到其傅里叶变换系数,用np.abs计算复数幅度谱后显示如右上图 所示。经对数变换后显示如左下图。最后经np.fft.fftshift函数将频谱图中心化。生成更多图像,比如单频率正弦波图像,观察它们的频谱成分。

代码

import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread('cameraman.tif', 0)#img = cv2.imread('Fig0421.tif', 0)
dft = np.abs(np.fft.fft2(img))
log_dft = np.log(1+dft)
center_dft = np.fft.fftshift(log_dft)img_list = [img, dft, log_dft, center_dft]
img_name_list = ['original', 'DFT', 'log transformed DFT', 'centralized DFT']_, 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('2D_FFT.jpg')
plt.show()

结果展示

在这里插入图片描述
在这里插入图片描述

结果分析

傅里叶谱图上的每一个像素点都代表一个频率值,幅值由像素点亮度变码而得。最中心的亮点是指直流分量,傅里叶谱图中越亮的点,对应于灰度图中对比越强烈(对比度越大)的点。
实际上对图像进行二维傅立叶变换得到频谱图,就是图像梯度的分布图,当然频谱图上的各点与图像上各点并不存在一一对应的关系,即使在不移频的情况下也是没有。傅立叶频谱图上我们看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅立叶变换后的频谱图,也叫功率图,我们首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。
对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰.
图像信号能量将集中在系数矩阵的四个角上。经过变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大。

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

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

相关文章

按摩上门预约小程序源码系统 开发组合:PHP+MySQL 附带完整的搭建教程

现代生活节奏的加快,人们越来越注重健康与放松。按摩作为传统的舒缓方式,市场需求逐年上升。然而,传统的按摩服务预约方式较为繁琐,用户需拨打热线电话或前往实体店进行预约,这无疑增加了用户的操作成本。因此&#xf…

【JavaScript】异步解决方案的发展历程

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

揭秘营销返利模式!

随着互联网的普及和发展,越来越多的商家开始采用营销返利模式来吸引消费者。这种模式不仅可以提高销售额,还可以让消费者获得实实在在的优惠。本文将详细解析营销返利模式的秘密,让你轻松掌握这一有效的营销策略! 一、什么是营销返…

C++继承与派生——(6)派生类的析构函数

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 站在巨人的肩上,是为了超过…

关于Omlox定位标准(一)——omlox hub

关于Omlox定位标准 Omlox是世界上第一个开放的定位标准,旨在实现灵活的实时定位解决方案,,可以使用来自各个制造商的单元。“omlox"一词源自拉丁词汇"omni”(无处不在)和"locus"(位置…

18国签署,全球首份《安全AI系统开发指南》发布

内容概述: 2023年11月27日,美国、英国和其他十几个国家公布了首份关于如何保护AI免受流氓行为侵害的详细国际协议《安全AI系统开发指南》,敦促企业打造“设计安全”的AI系统。协议由英国国家网络安全中心(NCSC)主导&a…

基于电商场景的高并发RocketMQ实战-Broker写入读取流程性能优化总结、Broker基于Pull模式的主从复制原理

🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁&#x1f3…

【Spark精讲】一文讲透SparkSQL执行过程

SparkSQL执行过程 逻辑计划 逻辑计划阶段会将用户所写的 SQL语句转换成树型数据结构(逻辑算子树), SQL语句中蕴含的逻辑映射到逻辑算子树的不同节点。 顾名思义,逻辑计划阶段生成的逻辑算子树并不会直接提交执行,仅作为中间阶段 。 最终逻辑…

二、KMDF开发之HelloWord

目录 第一步、创建KMDF项目 第二步、代码里增加打印信息 最终我们是要自己开发PCIE驱动,这里使用HelloWord工程把整个环境打通,下一篇将讲KMDF双机调试环境的搭建,开发环境的搭建见上一篇博文《一、KMDF开发之环境搭建-CSDN博客》。 第一步…

关键字:abstract关键字

在 Java 中,abstract是一个关键字,用于修饰类和方法。当一个类被声明为抽象类时,它不能被实例化,只能被其他类继承。同时,抽象类可以包含抽象方法,抽象方法没有方法体,只包含方法的签名&#xf…

java spring boot 自定义 aop

以一个锁的加锁和释放为例 1、先定义注解 /*** 锁切面* author fmj*/ Retention(RetentionPolicy.RUNTIME) Target(ElementType.METHOD) public interface VersionLockAOP { }2、然后定义切面类以及切点 /*** 切面*/ Component Aspect Slf4j public class VersionLockAOPAspe…

Spring AOP<一>简介与基础使用

spring AOP 基础定义 含义使用切面组织多个Advice,Advice放在切面中定义。也就是说是定义通知的自定义类。自定义的AOP类Aspect连接点方法调用,异常抛出可以增强的点JoinPoint :也就是**被增强的方法的总称,可以获取具体方法的信息&#xff…

Navicat删除连接报错:service in use cannot be deleted的解决方法

我在删除连接时遇到了这个报错,内容如图。下面我介绍两种解决方法,非常简单。 第一种 右键点击想要删除的连接,先选择“关闭连接”。再选择“删除连接” 第二种 如果第一种方法无效,直接关闭Navicat软件,重新打开。然后…

【c/c++】指针例图基础详解

文章目录 指针变量内存指针详解例1例2练习&答案解析 指针变量内存 int main(){// 各类型变量占字节数printf("char: %d\n",sizeof(char)); // 1printf("short: %d\n",sizeof(short)); // 2printf("int: %d\n",sizeof(int)); // 4pri…

uniapp多级动态表单规则

最近有个新的业务、主要涉及多层级的动态表单提交,其中又涉及很多类型,踩了很多坑之后,终于研发完毕。 传来的数据格式处理 传来的数据格式涉及比较多的内容,以下举例一个,涉及到规则的填写 规则写法有两种&#xff…

算法基础之蒙德里安的梦想

蒙德里安的梦想 核心思想: 状态压缩dp 总方案 横放的方案 剩下的地方竖着放是固定的了 状态压缩 : 将每一列的图(横终点 横起点 竖) 用一个二进制数存下 向后凸的为1 反之为0 状态计算: 所有 i – 1 列 不冲突的 都加和 f[i , j] f[i - 1…

小程序域名SSL证书能否用免费的?

在小程序开发中,确保通信安全性是至关重要的一环,而SSL证书正是为此提供了有效的保障。SSL证书通过加密数据传输,防止数据被中间人恶意窃取或篡改,为用户和应用提供了更安全的通信环境。 针对小程序域名的SSL证书,通常…

【HTML5】第1章 HTML5入门

学习目标 了解网页基本概念,能够说出网页的构成以及网页相关名词的含义 熟悉Web标准,能够归纳Web标准的构成。 了解浏览器,能够说出各主流浏览器的特点。 了解HTML5技术,能够知道HTML5发展历程、优势以及浏览器对HTML5的支持情…

PINNs解麦克斯韦方程

1 问题介绍 麦克斯韦方程控制着光的传播及其与物质的相互作用。因此,利用计算电磁学模拟求解麦克斯韦方程对理解光与物质相互作用和设计光学元件起着至关重要的作用。对于线性、非磁性、各向同性材料没有电、磁电流密度的方程通常可以写成如下形式: 2 物…

C# WPF上位机开发(Web API联调)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多时候,客户需要开发的不仅仅是一个上位机系统,它还有其他很多配套的系统或设备,比如物流小车、立库、数字孪…