Question

J'ai une mission à propos fftw et je tentais d'écrire un petit programme pour créer un fft d'une image. J'utilise CImg pour lire et écrire des images. Mais tout ce que je reçois est une image sombre avec un seul point blanc: (

Je suis le plus fait probable que ce dans le mauvais sens et je vous serais reconnaissant si quelqu'un pourrait expliquer comment cela devrait se faire. Je ne ai pas besoin du code, je veux juste savoir quelle est la bonne façon de le faire.

Voici mon code:

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");
Était-ce utile?

La solution

Vous devez prendre le journal de l'ampleur. Le seul point blanc est la valeur de base (0 Hz, DC, tout ce que vous voulez l'appeler), il sera presque toujours de loin la composante la plus importante de toute image que vous prenez (Puisque les valeurs de pixels ne peut pas être négatif, la valeur DC sera toujours positive et grande).

Ce que vous devez faire est de calculer le journal (ln, quelle que soit, un certain type de calcul logarithmique) de l'ampleur (donc une fois que vous avez converti du complexe grandeur / forme de phase (notation phaseur IIRC?)) Sur chaque point avant de normer.

S'il vous plaît noter que les valeurs sont là, ils sont vraiment faibles par rapport à la valeur DC, en prenant le journal (ce qui rend les plus petites valeurs plus grandes par beaucoup, et de plus grandes valeurs que légèrement plus grand) produirons les autres fréquences visibles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top