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 :

Appliquer la FFT sur un vecteur


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Appliquer la FFT sur un vecteur
    Bonjour,
    j'aimerais appliquer la transformée de Fourier par rapport à la coordonnée de temps, c'est a dire le vecteur remplit par (pixel1.1 de im1;pixel1.1 de im2, pixel1.1 de im3,..., pixel1.1 de im N)
    puis calculer la phase et l'afficher dans une courbe.
    Code qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void forwardDFT(QVector<double> s, const int N, QVector<double> a, QVector<double> b)
    {
     
        for (int k = 0; k <= N-1; ++k) {
            a[k] = b[k] = 0;
            for (int x = 0; x < N; ++x) {
                a[k] += s[x] * cos(2 * M_PI / N * k * x);
                b[k] += s[x] * sin(2 * M_PI / N * k * x);
            }
            // normalization
            a[k] *= (k == 0 || k == N/2) ? 1. / N : 2. / N;
            b[k] *= 2. / N;
        }
    }
    Code qt : 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
    void PFE::fftMag(){
       QVector<double> xf(widget.imagelistWidget->count());
        QVector<double> sainef(widget.imagelistWidget->count());
       QVector<double> sig_in(widget.imagelistWidget->count());
       QVector<double> a(widget.imagelistWidget->count());
       QVector<double> b(widget.imagelistWidget->count());
        for(int k=0;k<liste.size();k++){
     
          img->load(liste[k]);
         *img = img->scaled(widget.imageLabel->width(), widget.imageLabel->height(),Qt::IgnoreAspectRatio,Qt::FastTransformation);
          QPixmap pixmap=QPixmap(QPixmap::fromImage(*img));
        QImage imagefft=pixmap.toImage();
     
     
    QRgb pixelfft=imagefft.pixel(100,100);
     
              double  moyp= qGray(pixelfft);
            sig_in[k] = moyp;
        forwardDFT(sig_in, widget.imagelistWidget->count(), a, b);
    for(int l=0;l<liste.size();++l)
             { 
         resfft=atan2(b[l],a[l]);
    sainef[l]=resfft;
           xf[l]=(double)l;
     
       }
    //creer la courbe
    myCurve->setSamples(xf.data(),sainef.data(),xf.size());
    myPlot->replot();
        }
    la courbe qui s'affiche est nulle tous les points sont des zeros comment resoudre ce problème SVP.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut

    Tu appliques la FFT sur un tableau 1D. Donc tu mets ce que tu souhaites dans ton tableau avant traitement. Si tu souhaites mettre tes valeurs temporelles, rempli donc le tableau comme tu le souhaites, puis tu applique la FFT.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    C'est ce que j'ai fait mais le tableau se remplit par des valeurs nulles je ne sais pas pourquoi peut être il manque des pointeurs?la déclaration est elle juste?

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    As tu essayé d'appliquer une librairie qui calcule la FFT, il y en a plein en C++ ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Non j'ai essayé de m'en sortir avec opencv mais ça s'applique sur toute l'image alors qu'en réalité je veux comme entrée de fft un vecteur de pixels en temps c'est à dire appliquer la fft sur une séquence d'images suivant z puis à la fin récupérer les images de phase et les stocker.est ce que c'est clair? Avec le code ci dessus j'ai appliqué la fft sur un seul vecteur puis je veux parcourir sur tous les pixels suivant z ?aidez moi svp

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    j'ai reussi a remplir un vecteur et afficher ses valeurs jusqu'a maintenant tout va bien mais lorsque j'ai essayé de generaliser et parcourir tous les pixels ça influe sur la performance du programme et comme si il entre dans une boucle infinie svp aider moi a optimiser mon code.
    Code qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void forwardDFT(QVector<double> &s, const int N, QVector<double> &a, QVector<double> &b)
    {
     
        for (int k = 0; k <= N-1; ++k) {
            a[k] = b[k] = 0;
            for (int x = 0; x < N; ++x) {
                a[k] += s[x] * cos(2 * M_PI / N * k * x);
                b[k] += s[x] * sin(2 * M_PI / N * k * x);
            }
            // normalization
            a[k] *= (k == 0 || k == N/2) ? 1. / N : 2. / N;
            b[k] *= 2. / N;
        }
    }
    Code qt : 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
     double resfft=0;
         img->load(liste[0]);
         *img = img->scaled(widget.imageLabel->width(), widget.imageLabel->height(),Qt::IgnoreAspectRatio,Qt::FastTransformation);
          QPixmap pixmapone=QPixmap(QPixmap::fromImage(*img));
        QImage one=pixmapone.toImage();
       int  larg=one.width();
         int haut=one.height();
         for(int i=0;i<haut;i++)
        {
     
             for(int j=0;j<larg;j++)
             {
     
         for(int k=0;k<liste.size();k++){
     
          img->load(liste[k]);
         *img = img->scaled(widget.imageLabel->width(), widget.imageLabel->height(),Qt::IgnoreAspectRatio,Qt::FastTransformation);
          QPixmap pixmap=QPixmap(QPixmap::fromImage(*img));
        QImage imagefft=pixmap.toImage();
     
     
    QRgb pixelfft=imagefft.pixel(i,j);
     
              double  moyp= qGray(pixelfft);
            sig_in[k] = moyp;
     
        } 
     
     
        forwardDFT(sig_in, widget.imagelistWidget->count(), a, b);  // forward DFT sur un vecteur des pixels en temps
     
     
     
           for(int l=0;l<liste.size();++l)//recuperer les valeurs de phase et remplacer les pixels correspondants par ces valeurs
             { 
               img->load(liste[l]);
             *img = img->scaled(widget.imageLabel->width(), widget.imageLabel->height(),Qt::IgnoreAspectRatio,Qt::FastTransformation);
           pixmapfin=QPixmap(QPixmap::fromImage(*img));
        QImage imgfinal=pixmapfin.toImage();
         resfft=atan2(b[l],a[l]);
           imgfinal.setPixel(i,j,qRgb(resfft, resfft, resfft));
    }
    }
    }
    //enregistrer la nouvelle liste d'images dans un dossier"pas encore fait"

Discussions similaires

  1. [CSS] applique un style sur un liste deroulante sous Firefox
    Par dark_vidor dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/02/2006, 09h56
  2. [Etat] appliquer une condition sur une somme
    Par Oluha dans le forum IHM
    Réponses: 5
    Dernier message: 13/02/2006, 13h34
  3. [VB-VS2005]Appliquer une requete sur un datset deja rempli
    Par Pasiphae dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/01/2006, 15h01
  4. [icone]Comment appliquer une icone sur le.exe
    Par JavaLeDirePartout dans le forum JBuilder
    Réponses: 7
    Dernier message: 24/07/2003, 17h28
  5. Zoom sur des vecteurs ou lignes
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 25/11/2002, 10h40

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