Я пытаюсь реализовать спектральный подход, чтобы получить заметность изображения с помощью CImg, но у меня проблемы с этим. Это может показаться репостом этого вопроса (обнаружение спектральной остаточной значимости в C++ с CImg), но я думаю, что правильно понял две ошибки из этого вопроса (аргументы atan2 и FFT).
Вот мой код:
int main(int argc, char * argv[]) {
const char * input_file = "img/pic.png";
CImg<float> input = CImg<float>(input_file);
const CImg<float> mask(3,3,1,1,1.0f/9.0f);
resize_fft(input); // Resize for fft
CImg<float> gray = any2gray(input); // to single channel grayscale
CImgList<float> fft = gray.get_FFT();
CImg<float> amp = (fft[0].get_pow(2) + fft[1].get_pow(2)).get_sqrt();
CImg<float> amp_log = (amp + 1.0f).get_log().get_normalize(0, 255);
CImg<float> phase = fft[1].get_atan2(fft[0]);
CImg<float> residual = amp_log - amp_log.get_convolve(mask);
CImg<float> real = residual.get_exp();
CImg<float>::FFT(real, phase, true);
real.save("img/001.png");
real.normalize(0, 255).save("img/002.png");
return 1;
}
Оба сохраненных изображения 001 и 002 в конечном итоге представляют собой шумоподобное изображение, как бы неподвижное в частотном пространстве. Я не понимаю, что не так с тем, что я делаю, если вы, ребята, можете мне помочь?
Спасибо.