傅里叶变换C++实现方式

时间:2025-03-31 09:36:43

        傅里叶变换(Fourier Transform)是一种将信号从时域转换到频域的数学工具,广泛应用于信号处理、图像处理、通信等领域。

      傅里叶变换应用场景:

  • 频域滤波(如低通/高通滤波)

  • 边缘检测(频域分析)

  • 图像压缩(JPEG 使用 DCT,类似 DFT)

  • 纹理分析

        在 C++ 中实现傅里叶变换(Fourier Transform),可以使用 FFT(快速傅里叶变换) 算法来提高计算效率。

1、使用 OpenCV(推荐)

OpenCV 提供了高效的 cv::dft() 函数来计算离散傅里叶变换(DFT)。

    示例代码1:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 输入信号(可以是实数或复数)
    cv::Mat input = (cv::Mat_<float>(1, 8) << 1, 2, 3, 4, 5, 6, 7, 8);

    // 扩展为复数矩阵(DFT需要复数输入)
    cv::Mat complexInput;
    cv::Mat planes[] = {input, cv::Mat::zeros(input.size(), CV_32F)};
    cv::merge(planes, 2, complexInput);

    // 计算DFT
    cv::Mat dftOutput;
    cv::dft(complexInput, dftOutput, cv::DFT_COMPLEX_OUTPUT);

    // 分离实部和虚部
    cv::Mat dftPlanes[2];
    cv::split(dftOutput, dftPlanes);

    // 计算幅度谱(可选)
    cv::Mat magnitude;
    cv::magnitude(dftPlanes[0], dftPlanes[1], magnitude);

    // 输出结果
    std::cout << "DFT Output (Complex):\n" << dftOutput << std::endl;
    std::cout << "Magnitude Spectrum:\n" << magnitude << std::endl;

    return 0;
}