您的位置:

常用傅里叶变换详解

一、傅里叶分析基本概念

傅里叶分析是指用正弦波或余弦波的集合将一个周期信号分解成若干项具有不同振幅、频率和初相位的正弦波或余弦波的加权组合的过程。而傅里叶变换则是将非周期信号也分解成为一系列正弦波或余弦波,它是在傅里叶分析的基础上发展起来的。

傅里叶分析的基本思想是“复杂的波形由简单的波形叠加组成”。傅里叶将任何周期函数都表示成一系列正弦和余弦函数的叠加。也即可理解为将一个存在时间和空间上的信号分解为它的频域或是频谱的集合。这其中就包含了傅里叶变换、傅里叶系数、傅里叶级数、快速傅里叶变换等。

二、傅里叶级数

傅里叶级数是指在周期T的函数f(x)可以表达为如下三角级数:

    f(x) = a0 + Σ(a_n cos(nωx) + b_n sin(nωx))
           n=1

其中,a0、an、bn都是常数,其计算公式如下:

    a0 = (1/T)* ∫(-T/2到T/2)f(x)dx
    an = (2/T)* ∫(-T/2到T/2)f(x)cos(nωx)dx
    bn = (2/T)* ∫(-T/2到T/2)f(x)sin(nωx)dx

可以发现傅里叶级数是傅里叶分析的特殊情况,即函数是周期函数的情况。其实任何正常的函数都可以看成这里的特殊情况,因此傅里叶级数是傅里叶分析的基础。

三、傅里叶变换

如果一个函数是非周期的,那么就无法使用傅里叶级数来表示,这时傅里叶变换就派上用场了。傅里叶变换是将信号从时域(也即时间)转换到频域的过程,即对时域信号进行傅里叶变换之后,可以得到一组频域下的系数,代表了不同频率上的振幅和相角。

傅里叶变换可以用如下公式表示:

    F(ω) = ∫(t从-∞到∞) f(t)e^{-iωt}dt

其中,F(ω)表示傅里叶变换后的频域系数。求解过程比较复杂,需要对复杂积分有一定的了解。为了方便计算,傅里叶变换还有一种被称为傅里叶积分的公式:

    F(ω) = 1/(2π) * ∫(t从-∞到∞) f(t)e^{-iωt}dt
    f(t) = 1/(2π) * ∫(ω从-∞到∞) F(ω)e^{iωt}dω

四、傅里叶逆变换

傅里叶变换可以将时域信号转换到频域上,那么是否可以将频域上的信号还原回时域上呢?回答是可以的,这个就是傅里叶逆变换。

傅里叶逆变换同样有一个公式可以表示:

    f(t) = ∫(ω从-∞到∞) F(ω)e^{iωt}dω

其中,F(ω)表示频域上的系数。

五、傅里叶变换在图像处理中的应用

傅里叶变换在图像处理中有着广泛的应用。在图像处理中,我们需要计算频率分量,如低频、中频、高频等,而这些正是傅里叶变换可以帮助我们计算得到的。另外,图像压缩、滤波器设计、图像增强等都有着广泛的应用。

下面,我们给出一个图像处理中的傅里叶变换代码示例:

import numpy as np
import cv2

# 读取原始图像
img = cv2.imread('lena.jpg', 0)

# 进行傅里叶变换
f = np.fft.fft2(img)

# 将频率为0的直流分量移到频谱中心
fshift = np.fft.fftshift(f)

# 构建振幅谱图
magnitude_spectrum = 20*np.log(np.abs(fshift))

# 可视化振幅谱图
cv2.imshow('magnitude_spectrum', magnitude_spectrum)

# 构建高通滤波器(例如,去除低于阈值的频率分量)
rows, cols = img.shape
crow, ccol = rows//2, cols//2
mask = np.zeros((rows,cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

# 应用高通滤波器,并进行傅里叶逆变换
fshift *= mask
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)

# 可视化处理后的图像
cv2.imshow('img_back', img_back)

cv2.waitKey(0)
cv2.destroyAllWindows()