傅里叶变换(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;
}