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

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`,其中包含了信号在频域的表示。

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

    amplitude_spectrum = np.abs(X)

    phase_spectrum = np.angle(X)

  2. 可选:对频域信号做其他处理。例如,可以将某些频率设置为零,然后使用逆傅立叶变换(`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()`函数显示原始图像和频谱图。

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

相关推荐
听忆.8 分钟前
手机屏幕上进行OCR识别方案
笔记
艾派森9 分钟前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
hairenjing112311 分钟前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
小蜗子15 分钟前
Multi‐modal knowledge graph inference via media convergenceand logic rule
人工智能·知识图谱
SpikeKing28 分钟前
LLM - 使用 LLaMA-Factory 微调大模型 环境配置与训练推理 教程 (1)
人工智能·llm·大语言模型·llama·环境配置·llamafactory·训练框架
Selina K1 小时前
shell脚本知识点记录
笔记·shell
黄焖鸡能干四碗1 小时前
信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)
大数据·人工智能·软件需求·设计规范·规格说明书
1 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_1 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
攻城狮_Dream1 小时前
“探索未来医疗:生成式人工智能在医疗领域的革命性应用“
人工智能·设计·医疗·毕业