【问题标题】:CImg - Get inverse FFT of an imageCImg - 获取图像的逆 FFT
【发布时间】:2016-05-03 08:38:24
【问题描述】:

我正在尝试实施光谱方法来计算图像的显着性图,但我似乎无法让逆 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 的示例......有人有任何线索吗?

非常感谢! 罗宾

【问题讨论】:

  • 您是否尝试过标准化或对比拉伸结果 - 它们通常很暗...

标签: c++ image-processing fft cimg


【解决方案1】:

对于范围广泛的图像可能出现的一个常见问题是图像的 FFT 无法用有限的unsigned char 范围表示(或丢失太多信息而无法实际使用)。您可以通过使用中间 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");

【讨论】:

  • 是的,就是这样。现在我想它似乎合乎逻辑......非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
相关资源
最近更新 更多