Bonjour,
j'ai un projet qui porte sur le traitement de l'image.
et j'ai besoins d'implémenter la FFT de l'image et la fft inverse en utilisant la bibliothéque fttw.
je suis débutant avec le c++ (j'utilise le VC++ 6.0)
Merci d"avance pour votre aide.





Bonjour,
j'ai un projet qui porte sur le traitement de l'image.
et j'ai besoins d'implémenter la FFT de l'image et la fft inverse en utilisant la bibliothéque fttw.
je suis débutant avec le c++ (j'utilise le VC++ 6.0)
Merci d"avance pour votre aide.
Salut et bien venu sur le forum.
Quel est ton problème?
en attendant, en faisant une recherche rapide sue le forum
http://www.developpez.net/forums/sho...highlight=fftw
http://www.developpez.net/forums/sho...highlight=fftw





Merci ,a tous pour votre intérêt.En faite Aprés quatre jours de recherche j'ai enfin pu implémenter cette maudite fft .
Merci A tous.





bonsoir tout le monde
comme j'ai enfin pu implémenter le fft
je suis maintenant bloqué au niveau la fft inverse.
remarque je travail avec des images.
J'ai essayer de travailler avec la bibliothèque fttw mais ça n'a pas abouti.
Regarde le lien que je t'ai donné, il y a la FFT inverse.





Bonjour ,
bon mon problem est que:
Quand je le code du lien que vous m'avait fournit.j'ai rencontrer cette erreur.
"error C2440: '=' : cannot convert from 'void *' to 'double (*)[2]'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast"
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 //voila le code /* reIn : partie réel de l'image dans l'espace de Fourier * imIn : partie imaginaire de l'image dans l'espace de Fourier * out : image de sortie * largeur : largeur des images d'entrée et de sortie */ void fourierBackward(const float* reIn, const float* imIn, float* out, unsigned int largeur, unsigned int hauteur) { fftw_complex* spatial_repr; fftw_complex* frequency_repr; unsigned int i; unsigned int j; int x,y; fftw_plan plan; //le faute est a ce niveau: spatial_repr= fftw_malloc(sizeof(fftw_complex)*largeur*hauteur); frequency_repr= fftw_malloc(sizeof(fftw_complex)*largeur*hauteur); for(j=0;j<hauteur;j++) for(i=0;i<largeur;i++) { /*on décentre*/ x=i; y=j; if (i<largeur/2 && j<hauteur/2){ x=i+largeur/2; y=j+hauteur/2; } if (i>=largeur/2 && j<hauteur/2){ x=i-largeur/2; y=j+hauteur/2; } if (i<largeur/2 && j>=hauteur/2){ x=i+largeur/2; y=j-hauteur/2; } if (i>=largeur/2 && j>=hauteur/2){ x=i-largeur/2; y=j-hauteur/2; } frequency_repr[j*largeur+i][0]=reIn[y*largeur+x]; frequency_repr[j*largeur+i][1]=imIn[y*largeur+x]; } plan=fftw_plan_dft_2d(hauteur, largeur, frequency_repr, spatial_repr, FFTW_BACKWARD, FFTW_ESTIMATE); fftw_execute(plan); /*on retranscrit l'image complexe en image réelle, sans oublier de diviser par largeur*hauteur*/ for(i=0;i<largeur*hauteur;i++) { out[i]=spatial_repr[i][0]/(largeur*hauteur); } fftw_destroy_plan(plan); fftw_free(spatial_repr); fftw_free(frequency_repr); }
Merci d'avance pour votre aide![]()
C'est certainement parce que tu compiles ça avec un compilateur C++ alors que le code est écrit pour un compilateur C.
fftw_malloc retourne un void* qui doit être casté en C++ via :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 machin = static_cast<fftw_complex*>(fftw_malloc(sizeof(fftw_complex)*largeur*hauteur));





Merci,
Pour votre aide c a marcher.
Mais, j'ai un autre problème
je veux convertir une image ppm en bmp et vice versa.
Est que quelqu'un peut m'aider ?
Merci d'avance
Il est nécessaire dans ce cas d'utiliser une bibliothèque supplémentaire pour faire ça (à moins de se tapper l'écriture du BMP à la main).
Pour les bibliothèques de traitement d'images, regarde : http://www.developpez.net/forums/sho...d.php?t=327261
openCV est assez simple pour faire ça me semble t il.





Merci infiniment pour votre aide Millie
Mais j'ai utiliser le nconvert de XnView
conversion ppm vers bmp c'est bon
Mais l'inverse non.
J'ai aussi utiliser d'autre produit qui font la conversion mais leur conversion était erronée.
est que vous avez une idée





bonsoir,
Désole de répondre aussi tardivement
Ça marche
je tenait a remercier tous qui m'ont aider (surtout Millie)
pour la conversion du type en utilisant Opencv c'est simple
il suffit d'utiliser la commande cvSaveImageen précisant le format voulut.
Achraf





bonjour,
en effet j'ai cette boucle en matlab
sigma_b = ((mt*w-m).^2)./(w.*(1-w));
je l'ai traduit par cette boucle
for(int i=1;i<=256;i++)
sigma_b[i]=pow(mt*w[i]-m[i],2)/(w[i]*(1-w[i]));
Mais ça ne donne le même résultat.
je ne voit pas ou est la faute![]()
Partager