Я пытаюсь создать программу, которая будет рисовать двухмерный спектр оттенков серого данного изображения. Я использую библиотеки OpenCV и FFTW. Используя советы и коды из Интернета и изменяя их, мне удалось загрузить изображение, рассчитать fft этого изображения и воссоздать изображение из fft (это то же самое). Чего я не могу сделать, так это нарисовать сам спектр Фурье. Не могли бы вы мне помочь? Вот код (менее важные строки удалены):
/* Copy input image */
/* Create output image */
/* Allocate input data for FFTW */
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
dft = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
/* Create plans */
plan_f = fftw_plan_dft_2d(w, h, in, dft, FFTW_FORWARD, FFTW_ESTIMATE);
/* Populate input data in row-major order */
for (i = 0, k = 0; i < h; i++)
{
for (j = 0; j < w; j++, k++)
{
in[k][0] = ((uchar*)(img1->imageData + i * img1->widthStep))[j];
in[k][1] = 0.;
}
}
/* forward DFT */
fftw_execute(plan_f);
/* spectrum */
for (i = 0, k = 0; i < h; i++)
{
for (j = 0; j < w; j++, k++)
((uchar*)(img2->imageData + i * img2->widthStep))[j] = sqrt(pow(dft[k][0],2) + pow(dft[k][1],2));
}
cvShowImage("iplimage_dft(): original", img1);
cvShowImage("iplimage_dft(): result", img2);
cvWaitKey(0);
/* Free memory */
}
Проблема в разделе "Спектр". Вместо спектра я получаю шум. Что я делаю не так? Буду признателен за вашу помощь.