c ++中的快速傅里叶变换开放代码

时间:2015-11-06 19:34:52

标签: c++ image fft

我一直在查找关于FFT的开放式c ++代码。我想用FFT处理一个图像,我写了一个代码但是我的代码速度不是很快。 我用四个for循环写它,这样做效率不高。关键是,是否有人可以帮助我。我完全搜索了互联网,但我在c ++中找不到任何文件或代码文件。我不希望任何lib都有预先编写的代码。那是请给我看一个网站,我可以写我的代码。 我的代码在这里;

void NaiveDFT::Apply( Image & img )
{

     complex<double> dft[512][512];    

    for(unsigned u = 0; u < img.rows; ++u)
    {
        for(unsigned v = 0; v < img.cols; ++v)
        {
            std::complex<double> sum = 0;
            for(unsigned x = 0; x < img.rows; ++x)
            {
                for(unsigned y = 0; y < img.cols; ++y)
                {
                    std::complex<double> i = sqrt(std::complex<double>(-1));
                    std::complex<double> theta = 2 * M_PI * (((u * x) / img.GetWidth()) + ((v * y) / img.cols));
                    sum += std::complex<double>(img.at<uchar>(i, j)[0]) * cos(theta) + (-i * sin(theta));
                    //sum += std::complex<double>(std::complex<double>(imgData[x][y]._red) * pow(EULER, -i * theta));

                }
            }
            dftData[u][v] = (sum.imag() / (img.GetWidth() * img.GetHeight()));
        }
    }
}

1 个答案:

答案 0 :(得分:1)

KISSFFT获得BSD许可:

http://kissfft.sourceforge.net

FFTW获得GPL许可:

http://www.fftw.org