Domanda

Ho un incarico su fftw e stavo cercando di scrivere un piccolo programma per creare una FFT di un'immagine. Sto usando CImg a leggere e scrivere le immagini. Ma tutto quello che ottiene è un'immagine scura con un unico punto bianco: (

Sono molto probabilmente a fare questo nel modo sbagliato e sarei grato se qualcuno potesse spiegare come questo dovrebbe essere fatto. Non ho bisogno del codice, ho solo bisogno di sapere qual è il modo giusto per farlo.

Qui è il mio codice:

CImg<double> input("test3.bmp");
CImg<double> image_fft(input, false);

unsigned int nx = input.dimx(), ny = input.dimy();
size_t align = sizeof(Complex);

array2<Complex> in (nx, ny, align);

fft2d Forward(-1, in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        in(i,j) = input(i,j);
    }
}

Forward.fft(in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        image_fft(i,j,0) = image_fft(i,j,1) = image_fft(i,j,2) = std::abs(in(i,j));
    }
}

image_fft.normalize(0, 255);
image_fft.save("test.bmp");
È stato utile?

Soluzione

È necessario prendere il registro della grandezza. Il singolo punto bianco è il valore di base (0 Hz, DC, qualunque cosa si voglia chiamare), in modo che sarà quasi sempre di gran lunga il più grande componente di qualsiasi immagine che si prendere (Dal momento che i valori dei pixel non possono essere negativi, il valore DC sarà essere sempre positivo e di grandi dimensioni).

Quello che dovete fare è calcolare il log (ln, qualunque sia, un certo tipo di calcolo logaritmico) della grandezza (quindi dopo aver convertito dal complesso a forma di ampiezza / fase (fasore notazione IIRC?)) Su ogni punto prima di normalizzare esso.

Si prega di notare che i valori ci sono, sono solo molto piccolo rispetto al valore DC, prendendo il registro (che rende valori più piccoli grandi da un sacco, e valori più grandi solo leggermente più grande) farà le altre frequenze visibili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top