图像傅里叶变换

  傅里叶变换是一种数学工具,可用于将图像从空间域转换到频域,能够将图像表示为不同频率的正弦和余弦函数的叠加。傅里叶变换通常用于图像处理和分析,可以帮助理解图像中存在的频率信息和模式。

傅里叶变换原理:

  傅里叶变换通过将图像从空间域转换到频率域来描述图像的特征。这种变换将图像视为一系列不同频率的正弦和余弦波的加权组合。在频率域中,低频表示图像中变化缓慢的部分,而高频表示图像中变化剧烈的部分。

傅里叶变换的作用:

  • 频率分析: 傅里叶变换可以帮助分析图像中的频率信息,识别边缘、纹理等特征。
  • 滤波处理: 在频率域中进行滤波操作,例如去除图像中的高频噪声或低频信息。
  • 压缩与编码: 可以利用变换后的频域信息对图像进行压缩和编码。

适用场景:

  • 图像增强与去噪:通过滤波在频域中去除图像中的噪声。
  • 特征提取:识别图像中的纹理、边缘等特征。
  • 图像压缩:利用频域信息对图像进行压缩。
    傅里叶变换的数学表达式如下:
    F ( u , v ) = ∬ f ( x , y ) ⋅ e − 2 π i ( u x + v y )   d x   d y F(u, v) = \iint f(x, y) \cdot e^{-2\pi i (ux + vy)} \, dx \, dy F(u,v)=f(x,y)e2πi(ux+vy)dxdy
    其中, F ( u , v ) F(u, v) F(u,v)是图像在频率域中的表示, f ( x , y ) f(x, y) f(x,y) 是图像在空间域中的表示, u u u v v v 表示频率域中的频率坐标。
      在OpenCV中,可以使用函数 cv2.dft() 来进行傅里叶变换。以下是一个示例代码:
import cv2
import numpy as np

def show_images(image):
    cv2.namedWindow('image',cv2.WINDOW_KEEPRATIO)
    cv2.imshow('image',image)
    cv2.waitKey()
    cv2.destroyAllWindows()

def FT(image):
    # 进行二维傅里叶变换
    f_transform = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
    f_shift = np.fft.fftshift(f_transform)  # 将频率原点移到图像中心

    # 计算幅度谱
    magnitude_spectrum = 20 * np.log(cv2.magnitude(f_shift[:, :, 0], f_shift[:, :, 1]))

    return magnitude_spectrum

if __name__ == '__main__':
    # 读取图像
    img = cv2.imread('cat-dog.png', flags=0)
    re_img=FT(img)
    # # 将四张图像连接成一个大图像
    # top_row = np.hstack((img, re_img[0]))
    # bottom_row = np.hstack((re_img[1], re_img[2]))
    combined_img = np.vstack((img, re_img))

    show_images(combined_img)

你可能感兴趣的:(opencv_python,opencv,python)