CImg - 获取图像的反向 FFT

CImg - Get inverse FFT of an image

本文关键字:FFT 图像 获取 CImg      更新时间:2023-10-16

我正在尝试实现光谱方法来计算图像的显著性图,但我似乎无法让反向FFT工作。

int main(int argc, char * argv[]) {
    const char * input_file = "img/pic.png";
    CImg<unsigned char> * input = new CImg<unsigned char>(input_file);
    resize_fft(*input); //Resize the image for the FFT
    CImg<unsigned char> gray = any2gray(*input); //to single-channel grayscale image
    free(input);
    CImgList<unsigned char> fft = gray.get_FFT();
    CImg<unsigned char>::FFT(fft[0], fft[1], true);
    fft[0].save("img/fft.png");
    return 1;
}

最后,fft.png只是一个黑色图像文件。我找不到任何人使用 CImg 计算反向 fft 的任何示例......有人有任何线索吗?

多谢!知更鸟

对于

广泛的图像,可能会出现一个常见问题是,在有限的unsigned char范围内无法表示图像的FFT(或丢失太多信息而无法实际使用)。您可以通过使用中间float映像执行 FFT 计算来避免这种情况:

// convert from unsigned char to float to support larger range of values
CImg<float> fft_in = gray;
// Forward transform
CImgList<float> fft = fft_in .get_FFT();
// Inverse transform
CImg<float>::FFT(fft[0], fft[1], true);
// Normalize back to unsigned char range (0,255) and save
fft[0].normalize(0,255).save("img/fft.png");