Использование KissFFT для получения изображения в частотной области и обратно - PullRequest
0 голосов
/ 21 января 2019

мы скомпилировали библиотеку KissFFT, и она, кажется, работает нормально, но мы не уверены, как мы используем ее для получения частотной области 2-мерного изображения.Любая помощь будет фантастической.

PS.Мы запускаем его в SDK After Effects.

1 Ответ

0 голосов
/ 21 января 2019

Я не использовал KissFFT с изображениями (только со звуком), но вот моя попытка, основанная на том, что я прочитал в документации.Вы должны создать 3 массива для отдельных компонентов цвета (т.е. создать img1 / img2 / img3).

 //(I can't test this code now because I don't have kiss_fft)

 kiss_fft_scalar img1[M][N]; //array containing red pixels 
 kiss_fft_scalar img2[M][N]; //array containing green pixels
 kiss_fft_scalar img3[M][N];//array containing blue pixels


int mDim[2] = { N, M }; 
const int numDim = 2; //number of dimensions

kiss_fft_cpx *cinRed =  new kiss_fft_cpx[N * M]; 
kiss_fft_cpx *coutRed = new kiss_fft_cpx[N * M];
kiss_fft_cpx *cinGreen =  new kiss_fft_cpx[N * M]; 
kiss_fft_cpx *coutGreen = new kiss_fft_cpx[N * M];
kiss_fft_cpx *cinBlue =  new kiss_fft_cpx[N * M]; 
kiss_fft_cpx *coutBlue = new kiss_fft_cpx[N * M];

kiss_fftnd_cfg state = kiss_fftnd_alloc (mDim, numDim, 0, 0, 0);

int k=0;
for (int i=0;i<M;++i) {
    for(int j=0;j<N;j++){
        cinRed[k].r = img1[i][j];
        cinRed[k].i = 0; 
        cinGreen[k].r = img2[i][j];
        cinGreen[k].i = 0; 
        cinBlue[k].r = img3[i][j];
        cinBlue[k].i = 0; 

        k++;
    }
}

kiss_fftnd(state,cinRed,coutRed);//coutRed contains 2D fft results for img1 (red channel)
kiss_fftnd(state,cinGreen,coutGreen);
kiss_fftnd(state,cinBlue,coutBlue);

//for inverse 2D FFT just use
state = kiss_fftnd_alloc (mDim, numDim, 1, 0, 0);//1 sets inverse to true

kiss_fftnd(state,coutRed,cinRed); //note that cin and cout have switched positions
kiss_fftnd(state,coutGreen,cinGreen);
kiss_fftnd(state,coutRed,cinGreen);

Спасибо, Крис, что сообщили мне, что я должен использовать kiss_fftnd (я удалил старый код и процедуру)

...