CV:傅里叶变换

图像中的傅里叶变换主要指将图像从空间域转换到频域的过程。通过傅里叶变换,我们可以将图像看作是不同频率正弦波的叠加,这有助于分析图像的周期性特征、纹理和噪声等信息。


主要概念

  1. 频域表示

    • 幅值谱(Magnitude Spectrum):反映了各个频率成分的能量或强度。低频部分一般对应图像中的整体轮廓和大致结构,高频部分则反映图像的边缘、细节和噪声。
    • 相位谱(Phase Spectrum):包含了图像的空间位置信息,对于图像重构和结构保留至关重要。
  2. 二维离散傅里叶变换 (DFT)
    对于一幅 M × N M \times N M×N 的灰度图像,二维傅里叶变换的公式为:

F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y )   e − j 2 π ( u x M + v y N ) F(u, v) = \sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x, y) \, e^{-j2\pi\left(\frac{ux}{M}+\frac{vy}{N}\right)} F(u,v)=x=0M1y=0N1f(x,y)ej2π(Mux+Nvy)

其中, f ( x , y ) f(x,y) f(x,y) 为图像像素值, F ( u , v ) F(u,v) F(u,v) 为频域表示。

  1. 频谱中心化
    原始傅里叶变换得到的低频成分通常位于数组的四个角上。为了便于观察,我们常常使用傅里叶变换的移位(shift)操作,将低频成分移动到频谱图的中心。

应用

  • 滤波
    在频域可以更方便地设计低通滤波器、高通滤波器、带通滤波器等,进行图像去噪、平滑或边缘增强。

  • 图像压缩
    通过分析图像在频域中的能量分布,可以去除那些能量较低且对重构影响不大的频率成分,实现图像压缩。

  • 特征提取与分析
    一些图像的纹理和周期性特征在频域中更易于提取,用于图像识别和分类等任务。


示例代码

下面是一个使用 OpenCV 进行二维傅里叶变换,并显示频谱图的简单示例:

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

# 读取图像,并转换为灰度图
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)

# 将图像转换为浮点型,以便进行傅里叶变换
img_float = np.float32(img)

# 计算二维傅里叶变换(结果为复数)
dft = cv2.dft(img_float, flags=cv2.DFT_COMPLEX_OUTPUT)

# 将低频部分移到中心
dft_shift = np.fft.fftshift(dft)

# 计算幅值谱,并取对数(为了便于显示较小的值)
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]) + 1)

# 显示原图与幅值谱
plt.figure(figsize=(10, 5))

plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.axis('off')

plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.axis('off')

plt.show()

在这段代码中:

  • cv2.dft():计算二维离散傅里叶变换。
  • np.fft.fftshift():将低频成分移到频谱中心。
  • cv2.magnitude():计算复数结果的幅值,再通过取对数将幅值谱映射到较宽的灰度范围,以便于观察细节。

总结

图像的傅里叶变换将图像的空间信息转换为频域信息,使我们可以:

  • 分析图像中的不同频率成分,
  • 设计频域滤波器,
  • 实现图像压缩和特征提取等任务。

你可能感兴趣的:(CV,人工智能,计算机视觉,python)