图像的傅里叶变换
#include"bmp.h"
#include<cmath>
#include<cstring>
#include<cstdio>
#define PI 3.1415926
//说明:对输入图像进行快速傅立叶变换,要求输入图像的宽和高必须是2的幂次方
void Bitmap::fourier()
{
int lineByte = (width_p*bitCount / 8 + 3) / 4 * 4;
//申请输出图像缓冲区,并初始化为0
unsigned char* m_pImgDataOut = new unsigned char[lineByte*height_p];
memset(m_pImgDataOut, 0, width_p*height_p);
//申请傅立叶缓冲区,并初始化为0
ComplexNumber* m_pFFTBuf = new ComplexNumber[width_p*height_p];
memset(m_pFFTBuf, 0, sizeof(ComplexNumber)*width_p*height_p);
//输入图像数据进行二维傅立叶变换
ImgFFT2D(dataBuf, m_pImgDataOut, m_pFFTBuf);
delete[] m_pFFTBuf;
delete dataBuf;
dataBuf = m_pImgDataOut;
}
//说明:对复数结构体数组arrayBuf进行一维快速傅立叶变换,变换后的结果仍存回arrayBuf中
void Bitmap::FFT1D(ComplexNumber *arrayBuf, int n)
{
//循环变量
int i, k, r;
//申请临时复数缓冲区buf1,长度为n
ComplexNumber *buf1 = new ComplexNumber[n];
//将arrayBuf拷贝进buf1