CImg - 获取图像的逆 FFT
CImg - Get inverse FFT of an image
我正在尝试实施光谱方法来计算图像的显着图,但我似乎无法使用逆 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 的例子...有人知道吗?
非常感谢!
罗宾
对于范围广泛的图像可能出现的一个常见问题是图像的 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");
我正在尝试实施光谱方法来计算图像的显着图,但我似乎无法使用逆 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 的例子...有人知道吗?
非常感谢! 罗宾
对于范围广泛的图像可能出现的一个常见问题是图像的 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");