进一步了解傅里叶变换的应用(附案例代码)

news2024/11/26 10:43:09

        傅里叶变换(Fourier Transform)是一种非常常见的数学工具,能够将一个函数(或时域信号)分解成一些基本频率的合成。它使我们可以将时域信号(例如波形图)转换成频域信号,因而更容易地看出信号中的频率成分。 傅里叶变换的基本思想是将一个连续信号分解成一些正弦波(即基本频率)的加权和,即任意周期信号都能表示成单频正弦函数或余弦函数的和的形式,这些正弦波的频率、振幅和相位可以表征原信号的特征。傅里叶变换可以在频域上对信号进行分析,以便检测特定频率的信号成分,因此常被用于信号处理、通信和图像处理等领域。 值得注意的是,傅里叶变换不仅可以对连续信号进行转换,还可以对离散信号(如数字信号)进行离散傅里叶变换(DFT)处理。

 

目录

 1、实现图像增强

2、图像压缩

3、图像分析

4、图像重建

5、案例代码实现(基于python+openCV)

(1)导入相关模块和原始图像

(2)计算DFT效率最佳的尺寸

(3)将图像转换为np.float32,然后使用函数cv2.dft()和cv2.idft()

(4)应用掩码Mask和求逆DTF


      下面主要介绍傅里叶变换在图像处理中有很多应用,其中主要包括以下几个方面:

 1、实现图像增强

       通过傅里叶变换将图像转化为频域,并进行滤波操作,从而去除噪声和干扰,提高图像质量。使用傅里叶变换(FFT)进行图像增强通常涉及以下步骤:

  • 将图像转换成频域:将图像进行二维傅里叶变换得到其频谱数据;
  • 可选滤波:对频谱数据进行滤波,可以去除一些不需要的频率,并保留一些需要增强的频率;
  • 将频谱转换回空域:使用傅里叶逆变换将带有滤波后的增强信息的频谱转换回空域;
  • 对输出进行增强:将增强后的图像与原始图像进行比较。如果需要进一步增强图像,可以进行适当的调整。

       在实际操作时,还需要考虑如何选择适当的滤波算法以及如何调整滤波后的频域数据以达到最佳的图像增强效果。常用的滤波算法有低通滤波、高通滤波、带通滤波、陷波和同态滤波等。选择使用哪种滤波算法应根据不同场景进行具体分析。

2、图像压缩

       使用傅里叶变换将图像转化为频域表示,在频域中进行压缩处理,通过舍弃低振幅的高频成分实现图像压缩和数据存储的减少。傅里叶变换进行图像压缩通常包括以下步骤:

  • 将图像转换为频域:通过使用二维离散傅里叶变换(DFT)将图像从空域转换到频域,得到其频谱数据;
  • 压缩频域数据:可以采用不同的压缩算法,如使用奇异值分解(SVD)的压缩,使用小波变换进行压缩等方式对得到的频谱数据进行压缩;
  • 将压缩后的频域数据转换回空域:通过使用离散傅里叶逆变换(IDFT)可以将压缩后的频域数据转换回空域;
  • 进一步数据压缩:可应用各种数据压缩算法来增强所获得的数据压缩效果。

        需要注意的是,将图像转换为频域会导致周围无用的零频项出现,而这些零频项在压缩的过程中对于数据压缩是有害的,会导致数据压缩的效果不如预期。因此,在对图像进行傅里叶变换之前,必须首先对其进行零填充来扩展图像,使其的大小具有固定的形式。此外,傅里叶变换还对图像的对齐和旋转引起的问题敏感。

3、图像分析

       傅里叶变换能够将图像中的纹理和周期性变化分解出来,进而进行特征提取和分析。比如可以通过傅里叶变换来检测和分析图像中的纹理特征。 傅里叶变换进行图像分析通常包括以下步骤:

  • 将图像转换为频域:通过使用二维离散傅里叶变换(DFT)将图像从空域转换到频域,得到其频谱数据;
  • 分析频域数据:我们可以分析得到的频域数据来提取图像的各种属性,如频率谱、图像的峰值、频域滤波器等等;
  • 将频域数据转换回空域:通过使用离散傅里叶逆变换(IDFT)可以将分析后的频域数据转换回空域;
  • 观察分析结果:通过观察分析后得到的结果可得到图像各种属性的分布情况以及与其他图像的比较结果等。

       在使用傅里叶变换进行图像分析时,频域数据的分析需要根据具体的应用需求来进行。例如,我们可以观察图像的频率谱来判断图像中的高频或低频信号,也可以使用频域滤波器来去除图像中的噪声。此外,由于傅里叶变换基于局部均衡性的假设,因此分析结果可能会受到光照、投影等因素的影响。因此,在实际运用中需要选用合适的算法来减少这些因素的影响,并且需要根据具体情况来进行调整和优化。

4、图像重建

       傅里叶变换实现图像重建的具体步骤如下:

  • 选择一张需要重建的图像,并进行离散化。一般可以将图像划分为像素并将像素的灰度值转换为矩阵;
  • 对图像矩阵进行二维离散傅里叶变换(DFT),得到频谱数据;
  • 根据需要,可以使用滤波器对频谱数据进行处理以去除噪声或其他干扰信号。比如,可以使用高通/低通滤波器进行滤波操作;
  • 对经过滤波处理的频谱数据进行逆变换,得到重建后的图像;
  • 可以对重建后的图像进行分析和评估,比如进行对比度和清晰度的测量。

       需要注意的是,图像重建过程中可能会出现信息丢失,因此在滤波或其他后处理中需要慎重考虑。此外,傅里叶变换常常要求进行矩阵计算,因此计算机的计算速度和计算精度也会影响图像重建的准确度,建议结合深度学习等热点方向使用。

5、案例代码实现(基于python+openCV)

(1)导入相关模块和原始图像

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

img = cv2.imread('imageslion.jpg', 0)

img

输出结果:


rows, cols = img.shape
print(rows, cols)

输出结果:

281 282

      第一次运行,可能会出现如下情况:

     打开Anaconda Prompt,运行pip install opencv-python,或者pip install opencv-python-headless,解决 cv2 安装失败的问题。

(2)计算DFT效率最佳的尺寸

nrows = cv2.getOptimalDFTSize(rows)
ncols = cv2.getOptimalDFTSize(cols)
print(nrows, ncols)

输出结果:

288 288

nimg = np.zeros((nrows, ncols))
nimg[:rows, :cols] = img
img = nimg

img

输出结果:

array([[  1.,   4.,   1., ...,   0.,   0.,   0.],
       [ 57., 109., 116., ...,   0.,   0.,   0.],
       [ 69., 157., 160., ...,   0.,   0.,   0.],
       ...,
       [  0.,   0.,   0., ...,   0.,   0.,   0.],
       [  0.,   0.,   0., ...,   0.,   0.,   0.],
       [  0.,   0.,   0., ...,   0.,   0.,   0.]])

(3)将图像转换为np.float32,然后使用函数cv2.dft()和cv2.idft()

dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)

magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))

plt.subplot(221), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])

rows, cols = img.shape
crow, ccol = rows // 2, cols // 2

# 首先创建一个mask,中心正方形为1,其他均为0
# 如何删除图像中的高频内容:将LPF应用于图像。它实际上模糊了图像。
# 为此首先创建一个在低频时具有高值的掩码,即传递LF内容,在HF区域为0。
mask = np.zeros((rows, cols, 2), np.uint8)
mask[crow - 30:crow + 30, ccol - 30:ccol + 30] = 1

(4)应用掩码Mask和求逆DTF

fshift = dft_shift * mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])

plt.subplot(223), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(img_back, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

输出结果:

需要原始图像的家人们可以去百度网盘(永久有效)获取:

链接:https://pan.baidu.com/s/173deLlgLYUz789M3KHYw-Q?pwd=0ly6
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

   点赞+关注,下次不迷路!

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

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

相关文章

ArcGIS按比例缩放图斑

今天介绍一下,在ArcGIS中,当我们需要按比例缩放图斑时,该如何操作呢。 可以使用“缩放”工具对要素进行缩放(使整个要素变大或变小)。在处理比例略有误差的数据(例如,来自多个源的细分宗地&…

ChatGPT背后的大预言模型 以及《ChatGPT全能应用一本通》介绍

大型语言模型已经彻底改变了我们通过自然语言处理进行交互的方式,使得更多的基于语言的应用程序成为可能,例如语言翻译,问答,文本摘要和聊天机器人。 由于这些模型是在大量文本数据集(如书籍,文章和社交媒…

C learning_13 操作符前篇(条件操作符、 逗号表达式、 下标引用、函数调用和结构成员、 表达式求值)

目录 条件操作符 逗号表达式 下标引用、函数调用和结构成员 1. [ ] 下标引用操作符 2. ( ) 函数调用操作符 3. 访问一个结构的成员 表达式求值 1.隐式类型转换 2.算术转换 3.操作符的属性 条件操作符 条件操作符是一种用于简化条件表达式的运算符。它通常表示为问号 …

《游戏编程模式》--重访设计模式--学习

序 在线阅读地址: 命令模式 Design Patterns Revisited 游戏设计模式 (tkchu.me) 参考文章: GameDesignPattern_U3D_Version/Assets/002FlyweightPattern at master TYJia/GameDesignPattern_U3D_Version GitHub 看到了没见过的观点:…

我的算法基础实验代码-下篇

第一题 题目介绍 输入一些数值,求出现的次数最多的数。如果有多个并列,则从大到小输出。 解题思路 代码实现 package com.nineWeek;import java.util.*;/*** author WangYH* version 2021.1.3* date 2023/5/7 18:29*/public class NumMostTimes {pu…

第十四届蓝桥杯b组c/c++

D:飞机降落&#xff08;全排列&#xff09; #include<iostream> #include<cstring> using namespace std;const int N 12; int n; struct node{int t, d, l; //t为此飞机的最早降落时间 d为盘旋时间 l为降落所需时间 }p[N]; bool st[N];//DFS求全排列模型 bool d…

【真题解析】系统集成项目管理工程师 2021 年下半年真题卷

本文为系统集成项目管理工程师考试(软考) 2021 年上半年真题&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#xff08;问答题 4 道&#xff0c;75…

ChatGPT 学习与使用总结

ChatGPT 学习与使用总结 最近ChatGPT大火&#xff0c;2023有可能就是AGI元年了。近两个月使用下来&#xff0c;ChatGPT给我最深刻的感觉就是它所具备的理解和思维能力&#xff0c;第一次体验时真的是非常震撼&#xff0c;完全是之前各种『人工智障』智能助理所不能比拟的&…

Windows系统出现蓝屏怎么办?这些方法可以修复!

Windows 系统蓝屏死机&#xff08;BSOD&#xff09;&#xff0c;也被称为“停止错误”&#xff0c;是Windows系统最常见的故障之一。 当Windows遇到严重的故障时就会显示蓝屏&#xff0c;系统崩溃。蓝屏上显示一个停止代码&#xff0c;如"MEMORY_MANAGEMENT"&#xf…

NeRF与三维重建专栏(一)领域背景、难点与数据集介绍

前言 关于该系列专栏&#xff0c;主要介绍NeRF在三维重建中的应用&#xff08;这里我们特指MVS&#xff0c;multi-view stereo&#xff0c;也即输入带位姿的图片&#xff0c;输出三维结构例如点云、mesh等&#xff1b;并且后面的工作也都是围绕MVS with NeRF讨论的。虽然也有w…

人类与ChatGPT:互动中的共同进步

一、ChatGPT的发展历程 1. GPT模型 ChatGPT是由OpenAI推出的一款聊天机器人&#xff0c;其核心技术基于GPT模型。GPT模型&#xff08;Generative Pre-training Transformer&#xff09;是一种基于Transformer结构的预训练语言模型。它在大规模的文本语料库上进行无监督的预训…

解析 ip addr 的输出的内容含义

解读 ip addr 的输出的网络连接信息含义 一、ifconfig 与 ip addr 用过Linux的读者都知道&#xff0c;在Linux查看ip可以使用ifconfig&#xff0c;当然这个ifconfig属于net-tools 工具集&#xff0c;其来源于BSD&#xff0c;Linux从2001年就不对其进行维护了。那我们应该用什…

基于下垂控制的并网逆变器控制MATLAB仿真模型

资源地址&#xff1a; 基于下垂控制的并网逆变器控制MATLAB仿真模型资源-CSDN文库 主要模块&#xff1a; 建议使用MATLAB2021b及以上版本打开&#xff01; 功率计算模块、下垂控制模块、电压电流双环控制模块、虚拟阻抗压降模块 扰动设置&#xff1a; 在0.5秒到2秒始端设置…

微软出品的实用小工具

微软出品的实用小工具 分享一些微软出品的实用小工具&#xff0c;希望对大家有所帮助。 文章目录 微软出品的实用小工具SysinternalsSuite常用工具AutorunsprocdumpProcess Explorer进程监视器 Process MonitorpsloggedonAccessChk示例 PsToolsrdcmanTcpviewVmmap Sysinternals…

数据结构_树与二叉树

目录 1. 树的基本概念 1.1 树的定义 1.2 基本术语 1.3 树的性质 1.4 相关练习 2. 二叉树的概念 2.1 二叉树的概念及其主要特性 2.2 二叉树的存储结构 2.2.1 顺序存储结构 2.2.2 链式存储结构 2.3 相关练习 3. 二叉树的遍历和线索二叉树 3.1 二叉树的遍历 3.1.1 先…

基于微信小程序校内论坛系统

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatis-plus 本系统分微信小程序和管理后台两部分&a…

神马网络——IP地址

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

ChatGPT提示词技巧

自计算机问世以来&#xff0c;人类与计算机之间的交互方式已经经历过几个重要的阶段&#xff1a; 指令式交互&#xff08;Command-based Interaction&#xff09; 早期的计算机系统主要采用了指令式交互方式&#xff0c;用户需要输入特定的命令或代码来完成各种任务。这种交…

软件与硬件的联调之小程序与云平台相互通信

软件与硬件的联调之小程序与云平台相互通信 本人专注使用云开发&#xff0c;实现一个前端可以做后端以及整个项目的部署与上线。 如果觉得我讲的好就可以给我点个赞。 #mermaid-svg-xJRh48GCcG2gzlqz {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

深度学习之图像分类识别(二):ZFNet

本专栏介绍基于深度学习进行图像识别的经典和前沿模型&#xff0c;将持续更新&#xff0c;包括不仅限于&#xff1a;AlexNet&#xff0c; ZFNet&#xff0c;VGG&#xff0c;GoogLeNet&#xff0c;ResNet&#xff0c;DenseNet&#xff0c;SENet&#xff0c;MobileNet&#xff0c…