Опитвам се да създам програма, която ще начертае двумерен спектър в сивата скала на дадено изображение. Използвам 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 */
}
Проблемът е в секцията "Спектър". Вместо спектър получавам някакъв шум. какво правя грешно Ще бъда благодарен за вашата помощ.