IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

implementation de la transformé de Fourrier !


Sujet :

Traitement d'images

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut implementation de la transformé de Fourrier !
    Salut .
    Je cherche à implémenter la transformé de Fourrier (en C) .
    J'ai préparé tout ce que je dois préparer ( les Structures , les variables ....tout est bien ) sauf que lors de la compilation le PC se bloque ! donc j'ai fais quelques modifications dans le code afin de localiser le problème . et j'ai trouver que mon compilateur se bloque lors du calcule de la transformé !!
    Il prend énormément de temps pour calculer la transformer !et ceci est plus ou moins normale ! Car en fait pour calculer la transformé , j'ai fais 4 boucles POUR !

    en fait pour une image 600*400 : j'ai fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(i=0;i<hauteur;i++)
          for(j=0;j<largeur;j++)
     
    F[i][j]=0;// F est la transformé et Image est l'image initial 
    for(x1=0;x1<hauteur;x1++)
          for(y1=0;y1<largeur;y1++)
     
    F[i][j]= F[i][j] + Image [x1][y1]* cos(....)................;
    donc la boucle contient 600*400*600*400 traitement

    Ma question : Est ce qu'il y a autre méthode pour implémenter la transformé de Fourrier ou existe-il un outil pour accélérer le calcul ???


    Merci d'avance

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par The-msx Voir le message
    Ma question : Est ce qu'il y a autre méthode pour implémenter la transformé de Fourrier ou existe-il un outil pour accélérer le calcul ???
    Il ne vaut pas utiliser le calcul simple de la transformée de Fourier, sinon le temps de calcul va exploser. Il faut passer par une transformée de Fourier rapide (FFT). Si tu veux vraiment avoir les meilleurs performances, regarde du côté de la bibliothèque FFTW en C : http://humbert-florent.developpez.co...aitement/fftw/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par millie Voir le message
    Il ne vaut pas utiliser le calcul simple de la transformée de Fourier, sinon le temps de calcul va exploser. Il faut passer par une transformée de Fourier rapide (FFT). Si tu veux vraiment avoir les meilleurs performances, regarde du côté de la bibliothèque FFTW en C : http://humbert-florent.developpez.co...aitement/fftw/
    Salut
    Merci bien millie pour votre réponse !


    Je sais bien qu'il existe la FFTW , mais moi je dois écrire moi même la transformé !
    Est ce que quelqu'un a une idée par exemple comment ils ont implémenter la FFTW ou comme j'ai dis une méthode pour l'implémentation?

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par The-msx Voir le message
    Salut
    Merci bien millie pour votre réponse !


    Je sais bien qu'il existe la FFTW , mais moi je dois écrire moi même la transformé !
    Est ce que quelqu'un a une idée par exemple comment ils ont implémenter la FFTW ou comme j'ai dis une méthode pour l'implémentation?
    Regarde sur le site de fftw, notamment : http://www.fftw.org/links.html

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Salut ,

    J'ai utilisé la fftw (en C ) et j'ai obtenu la photo suivante ( à gauche l'image initial et à droite la nouvelle image après avoir appliquer la transformer de fourrier à la 1ére image :





    Je veux vérifier si c'est bien déroulé ou pas?


    PS : dans la lecture de l'image j'ai utiliser le format .bmp avec 24/bits (RVB), donc j'ai fais la transformé pour chaque canal de couleur .

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    C'est quoi l'image de droite exactement ?

    C'est le module de la transformée de Fourier ? (car ce sont des éléments complexes donc on ne peut pas a priori afficher directement l'image complexe)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Salut !

    desolé pour mon message precedent !
    en fait il y avait une faute .
    mais maintenant j'ai corriger , mais il reste autre chose.
    J'ai utiliser la fftw comme j'ai dis mais j'ai remarquer que pour un codage d'une couleur de 0 à 255 (8 bits) , les valeurs du module du transformé de fourrier sont très très grande (des milles) ( j'ai enregistré les valeurs dans un fichier.txt pour les voir) .


    Enfin je voudrais savoir comment rendre ces valeurs comprise entre 0 et 255 ??



    PS : comme une petite solution personnelle j'ai diviser tous les valeurs du module par 100 et voici le résultat :



    image initial :










    module de la transformé de Fourrier :




  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Le résultat semble OK.

    Pour visualiser le module, tu peux lire sur le cours ici : http://humbert-florent.developpez.co...aitement/fftw/ au paragraphe III-B. Ajustement du module qu'il faut chercher le maximum des modules dans tout l'image (en excluant le centre) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     float facteur = 1.0f;
     
     float pourcentImage = 0.01 * (largeur()); /*on exclue un pourcentage du cercle du milieu*/
     
     
     
     for(j = 1; j<hauteur; j++)
       for(i = 1; i<largeur; i++)
         if(max<module[i] && (carre((i-largeur/2))+carre((j-hauteur/2)) ) > carre(pourcentImage))
            max = module[i];
    Puis, on multiplie chaque pixel du module par 255/max






    Le résultat peut changer suivant la résolution et la qualité de l'image => j'ai dû travailler avec des images plus grosses et de meilleure qualité que j'ai ensuite réduit pour le tutoriel, ce qui peut expliquer que le résultat ne soit pas tout à fait identique à toi.

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par millie Voir le message
    Pour visualiser le module, tu peux lire sur le cours ici : http://humbert-florent.developpez.co...aitement/fftw/ au paragraphe III-B. Ajustement du module qu'il faut chercher le maximum des modules dans tout l'image (en excluant le centre)
    Ou alors utiliser une echelle Logarithmique (facon imageJ) :

    min = safeLog(minimum de l'image)
    max = safeLog(maximum de l'image)
    X = ( safeLog(x) - min ) * 255 / (max-min)

    avec safeLog(a) = (a==0)?0:Log(a)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Transformée de fourrier
    Par latsou dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 21/04/2009, 10h06
  2. Calculer une transformer de fourrier un peu spéciale
    Par 2click dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/01/2008, 17h28
  3. Detection Audio - Transformée de Fourrier
    Par Black-Ghost dans le forum C#
    Réponses: 8
    Dernier message: 03/12/2007, 08h34
  4. [Signal] Transformé de Fourrier
    Par kurul1 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/12/2006, 08h30
  5. Transformé de Fourrier
    Par kurul1 dans le forum C++Builder
    Réponses: 15
    Dernier message: 06/12/2006, 08h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo