OpenCV自学笔记十七:傅里叶变换

2023-09-21 19:48:04

1、Numpy实现傅里叶变换

傅里叶变换(Fourier Transform)是一种将信号从时域转换到频域的数学变换。它将一个连续或离散的时域信号分解为一组正弦和余弦函数的复合。

在Python中,可以使用NumPy库来实现傅里叶变换。具体步骤如下:

1. 导入NumPy库:

import numpy as np

2. 准备输入信号数据,可以是离散的时间序列数据或连续的函数。假设我们有一个离散的信号`x`,包含N个采样点:

x = np.array([5, 3, 6, 2, 8, 7])

3. 使用NumPy的`fft.fft()`函数进行傅里叶变换:

X = np.fft.fft(x)

这将返回一个复数数组`X`,其中包含了信号在频域的表示。

4. 对结果进行频谱转换,得到幅度谱和相位谱。可以使用`np.abs()`函数计算幅度谱,使用`np.angle()`函数计算相位谱:

amplitude_spectrum = np.abs(X)

phase_spectrum = np.angle(X)

5. 可选:对频域信号做其他处理。例如,可以将某些频率设置为零,然后使用逆傅立叶变换(`np.fft.ifft()`)将信号从频域转换回时域。

下面是一个完整的示例代码,演示了如何使用NumPy进行傅里叶变换:

import numpy as np

# 输入信号

x = np.array([5, 3, 6, 2, 8, 7])

# 傅里叶变换

X = np.fft.fft(x)

# 频谱转换

amplitude_spectrum = np.abs(X)

phase_spectrum = np.angle(X)

print("Amplitude Spectrum:", amplitude_spectrum)

print("Phase Spectrum:", phase_spectrum)

这个示例将计算输入信号`x`的傅里叶变换,并输出幅度谱和相位谱。

需要注意的是,以上示例是针对离散信号的傅里叶变换。如果要处理连续信号,可以使用NumPy中的`fft.fft()`函数的连续版本`np.fft.fftn()`或`np.fft.fftshift()`来进行相应的处理。

2、OpenCV实现傅里叶变换

傅里叶变换(Fourier Transform)是一种将时域信号转换为频域信号的数学工具,常用于图像处理和信号处理领域。OpenCV库提供了对傅里叶变换的支持。下面是傅里叶变换的原理和一个示例:

傅里叶变换将一个连续时间域信号表示为一组正弦和余弦函数的加权和。在图像处理中,我们可以将二维图像看作是一个二维离散信号。使用傅里叶变换,我们可以将图像从空域(时域)转换到频域。频域中的每个点表示了相应频率的成分在图像中的贡献。

示例:

下面是一个使用OpenCV实现傅里叶变换的简单示例代码:

​
import cv2

import numpy as np

from matplotlib import pyplot as plt

# 读取图像

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

# 进行傅里叶变换

f = np.fft.fft2(img)

fshift = np.fft.fftshift(f)

magnitude_spectrum = 20 * np.log(np.abs(fshift))

# 显示原始图像和频谱图

plt.subplot(121), plt.imshow(img, cmap='gray')

plt.title('Input Image'), plt.xticks([]), plt.yticks([])

plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')

plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])

plt.show()

​ 

在上面的示例中,我们首先使用`cv2.imread()`函数读取图像,并将其转换为灰度图像。然后使用`np.fft.fft2()`函数对灰度图像进行二维傅里叶变换。接下来,使用`np.fft.fftshift()`函数将频谱移到中心位置,并使用`20 * np.log(np.abs())`计算频谱的幅度谱(以对数尺度显示)。最后,使用`plt.subplot()`和`plt.imshow()`函数显示原始图像和频谱图。

运行上述代码,你将得到原始图像和对应的频谱图。频谱图中的亮度表示相应频率的成分在图像中的贡献大小。

更多推荐

公司内部网段太多,管控混乱,该如何规范跨网文件传输交换?

在当今的信息化时代,文件传输交换是企业日常工作中不可或缺的一项功能。无论是内部员工之间,还是与外部合作伙伴之间,都需要频繁地进行文件的发送、接收、共享和协作。然而,由于企业内部网段的复杂性和多样性,以及数据安全和合规性的要求,跨网文件传输交换往往面临着诸多的困难和挑战。公司内部网段太多,管控混乱可能造成的问题企业内部网

【UE5 C++ 學習日志】01. UEnhancedInput

UE5提供了一種對複雜輸入處理或運行時重新映射按鍵增强輸入插件。此插件向上兼容UE4的默認輸入系統,并可以實現径向死区、同时按键、上下文输入和优先级安排等多種功能。核心概念:(1)InputActions:InputAction代表角色需要做出的任意動作,例如跳躍或攻擊等等。同時還可以代表輸入的狀態,例如按鍵按下時保持

【Zabbix监控二】之zabbix自定义监控内容案例(自动发现、自动注册)

实验前准备:在Web页面中添加agent主机点击左边菜单栏【配置】中的【主机】,点击【创建主机】【主机名称】设置成zbx-agent01【可见的名称】设置成zbx-agent01-192.168.88.70【群组】选择Linuxservers【Interfaces】的【IP地址】设置成192.168.88.70再点击上

Redis模块五:持久化

目录持久化的定义Redis持久化的方式持久化策略设置RDBVSAOFVS混合持久化RDB优点RDB缺点AOF优点AOF缺点混合持久化优点混合持久化缺点持久化的定义所谓的持久化就是将数据从内存保存到磁盘的过程,它的⽬的就是为了防⽌数据丢失。因为内存中的数据在服务器重启之后就会丢失,⽽磁盘的数据则不会,因此为了系统的稳定起

SpringBoot+Redis BitMap 实现签到与统计功能

最近项目里需要集成签到和统计功能,连续签到后会给用户发放一些优惠券和奖品,以此来吸引用户持续在该品台进行活跃。下面我们一些来聊一聊目前主流的实现方案。因为签到和统计的功能涉及的数据量比较大,所以在如此大的数据下利用传统的关系型数据库进行计算和统计是非常耗费性能的,所以目前市面上主要依赖于高性能缓存RedisBitMap

STM32 Cubemx 基本定时器Basic Timers

文章目录前言简介Cubemx使用前言持续学习stm32中…简介基本定时器有TIM6和TIM7,是一个16位的向上定时器。基本定时器的用途较少,只能用于纯粹的定时器以及驱动DAC模块。注:基本定时器各自独立,不存在共用的资源。基本定时器TIMxCLK来自于RCC中的APB1。因此在使用基本定时器时需注意时钟树中APB1的

STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI

SPI相关基础知识SPI基本概念请自行百度,参考:百度百科SPI简介.我们讲重点和要注意的地方。master模式下要关注的地方接线一一对应也就是说主控的MISO,MOSI,SCLK,[CSn]分别和设备的MISO,MOSI,SCLK,[CSn]一一对应相连,不交叉,不交叉,不交叉…(重要的事情说三遍)。从设备的时序图这

arcgis js 缓冲区分析(GP服务)

arcgis文档中的有提供缓冲区的接口geometryService,但要4.19后版本才提供案例中使用的版本为4.16,因此这里的缓冲区分析借助gp工具新建服务1、打开arcmap选择工具将要存放的文件夹,右键=>new=>Toolbox对新建好的工具的model(右键工具new=>model)进行编辑,如图2、打开

[当人工智能遇上安全] 9.基于API序列和深度学习的恶意家族分类实例详解

您或许知道,作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个《当人工智能遇上安全》系列博客,详细介绍人工智能与安全相关的论文、实践,并分享各种案例,涉及恶意代码检测、恶意请求识别、入侵检测、对抗样本等等。只想更好地帮助初学者,更加成体系的分享新知识。该系列文

laravel 使用mpdf将html转化成pdf

安装方式composerrequirempdf/mpdf常用配置$defaultConfig=(new\Mpdf\Config\ConfigVariables())->getDefaults();//获取默认的字体包文件路径$fontDirs=$defaultConfig['fontDir'];$defaultFont

基于SpringBoot+Vue的MOBA类游戏攻略分享平台

1简介MOBA类游戏攻略分享平台,为用户随时随地查看游戏攻略信息提供了便捷的方法,更重要的是大大的简化了管理员管理MOBA类游戏攻略信息的方式方法,更提供了其他想要了解MOBA类游戏攻略信息及运作情况以及挑选方便快捷的可靠渠道。相比于传统游戏攻略管理方法,这样的电子信息管理更为简洁方便,在MOBA类游戏攻略维护信息反馈

热文推荐