Flouter une image a l'aide de FFT (Cooley-Tukey-Gauss)
biloy
Messages postés23Date d'inscriptionlundi 15 décembre 2008StatutMembreDernière intervention 7 avril 2010
-
27 oct. 2009 à 16:27
biloy
Messages postés23Date d'inscriptionlundi 15 décembre 2008StatutMembreDernière intervention 7 avril 2010
-
31 oct. 2009 à 11:50
Bonjour,
Avec un collègue, nous voudrions créer un programme pour flouter une image. On sait qu'il faut utiliser les transformations de Fourrier (selon Cooley-Tukey). Mais voilà, tout ça est un peu flou , et je voudrais savoir si on est sur la bon piste. On a télécharger le code ( http://en.literateprograms.org/Special:Downloadcode/Cooley-Tukey_FFT_algorithm_(C) ). A partir de ça, pourra-t-on arriver a flouter une image?
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 27 oct. 2009 à 16:59
Salut
Flouter une image n'est vraiment pas compliqué et utiliser une fft pour faire ca c'est un peu l'usine à gaz.
Il suffit de faire une convolution avec un masque gaussien ou autre (Voir ici
Si vous voulez vraiment utiliser une fft, il faut effectivement utilisé une transition douce, gaussien ou tukey à la fréquence de coupure. Pour flouter l'image, il faut conserver le centre de l'image...
A+
biloy
Messages postés23Date d'inscriptionlundi 15 décembre 2008StatutMembreDernière intervention 7 avril 2010 27 oct. 2009 à 17:17
En fait on doit trouver le code de la TFD sur le net et l'implémenter dans notre code source pour obtenir une image flou. On arrive a changer les couleurs de chaque pixel pour modifier l'image. Mais là on coince, on voit pas comment utiliser la fonction qu'on a trouvé, sachant qu'elle prend comme argument un complexe et on sait pas d'où il viendrait. De plus, je ne vois pas ce que N représente. Je suis sûr c'est tout con et que c'est sous notre nez...
Et la j'ai mal au crâne, depuis 13h qu'on est dessus.
Merci d'avance.
complex* FFT_simple(complex* x, int N /* must be a power of 2 */) {
complex* X = (complex*) malloc(sizeof(struct complex_t) * N);
complex * d, * e, * D, * E;
int k;
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 27 oct. 2009 à 17:24
N correspond au nombre de donnée que tu lui donnes.
Les données d'entrées sont des complexes: bien sur la fft travaille avec des complexe! T'as juste à mettre la partie réel à tes données et la partie imaginaire à 0.
Attention, il faut faire une fft 2D pour les images...
biloy
Messages postés23Date d'inscriptionlundi 15 décembre 2008StatutMembreDernière intervention 7 avril 2010 30 oct. 2009 à 01:05
AAH je galère.
Pour modifier l'intensité d'une couleur d'un pixel, le principe veut qu'on fasse la moyenne par convolution, de l'intensité de la couleur des 8 pixel qui entoure le voulu. C'est bien ça le principe? On fait la même chose avec la FFT? Je dois donc faire un tableau en 2D pour chaque couleur?
Je vois pas trop comment utiliser le complexe que me retourne la FFT, ni même celui qu'il faut entrer.
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 30 oct. 2009 à 20:11
Oui, la convolution revient à faire cela. Il y a bcp de filtres qui sont basé sur ce principe.
Faire un filtrage passe bas par fft, il faut que tu conserves le centre de l'image dans le domaine fréquentielle. (Mettre à 0, l'extérieur de l'image). Il suffit alors de faire une fft inverse.
Il y a pas mal d'autres subtilités mais avec ca vous devriez avoir de premier résultats.
A+
biloy
Messages postés23Date d'inscriptionlundi 15 décembre 2008StatutMembreDernière intervention 7 avril 2010 31 oct. 2009 à 11:50
Merci. J'avais lu aussi qu'il fallait faire une fft inverse.
Normalement ça devrait marcher mais j'ai un problème avec des variables, et a la fin, j'obtiens un carré noir. Mais je sais d'où ça provient ça va aller vite.