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 :

Pic d'une Transformée de Fourier Inverse en C++


Sujet :

Traitement d'images

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut Pic d'une Transformée de Fourier Inverse en C++
    Bonjour
    Je suis entrain de faire un programme pour la registration des images astronomiques à l'aide de la Transformée de Fourier.
    J'ai réussis à trouver la matrice de corrélation ainsi que sa transformée de Fourier inverse.
    Maintenant, j'aimerais déterminer la position du pic dans cette transformée inverse en C++.
    Avez-vous des pistes à me suggérer?
    Merci d'avance

  2. #2
    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 : 53
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Juste pour voir si j'ai bien compris...

    1. 2 signaux 2D (des images ?) dans le domaine spatial
    2. Passage dans le domaine fréquentiel (FFT)
    3. Calcul de la corrélation dans le domaine fréquentiel
    4. Passage de la corrélation dans le domaine spatial (FFT-1)

    Et maintenant tu cherches un pic (le maximum de corrélation) dans une surface 2D discrétisée.

    J'ai bon ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Exactement..
    Est ce qu'il suffit de chercher le point max dans mon tableau qui represente l'image dans le domaine spatial?

  4. #4
    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 : 53
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Programmeur_Aladdin Voir le message
    Exactement..
    Est ce qu'il suffit de chercher le point max dans mon tableau qui represente l'image dans le domaine spatial?
    A priori: oui. Il faudra juste gérer le cas ou le "pic" est en fait un "plateau" => plusieurs occurrences de la valeur max.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Très bien.. Merci beaucoup pseudocode..
    Maintenant, pour trouver bêtement mon pic (avant la gestion des cas d'exceptions), je fais tout simplement:

    for(i=0; i<largeur*hauteur; i++)
    {
    if(InverseMatriceCorrelation[i+1]>InverseMatriceCorrelation[i])
    {
    *xPic = i+1;
    *yPic = i/largeur;
    }
    }

    Puisque l'image est compsée d'un tableau unidimensionnel, je divise par la largeur (x) pour que j'obtienne le (y) correspondant..

    Qu'en pensez-vous? c'est correcte ou bien il existe une méthode plus facile?

  6. #6
    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 : 53
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Programmeur_Aladdin Voir le message
    Maintenant, pour trouver bêtement mon pic (avant la gestion des cas d'exceptions), je fais tout simplement:

    for(i=0; i<largeur*hauteur; i++)
    {
    if(InverseMatriceCorrelation[i+1]>InverseMatriceCorrelation[i])
    {
    *xPic = i+1;
    *yPic = i/largeur;
    }
    }
    En quoi comparer systematiquement un element avec son suivant permet de trouver le maximum du tableau ?

    Moi je verrai plutot quelquechose comme cela:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int xPic, yPic, vPic=0;
     
    for(i=0; i<largeur*hauteur; i++)
    {
    	if(InverseMatriceCorrelation[i]>vPic)
    	{
    		xPic = i%largeur;
    		yPic = i/largeur;						
    		vPic = InverseMatriceCorrelation[i];
    	}
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Oui.. vous avez raison c'était faux comme raisonnement..
    le votre est convaincant..
    Merci !!

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Cette fonction trouve la position du pic, en parcourant le tableau pixel par pixel..
    Donc, si j'ai bien compris.. j'ai une precision de 1 pixel.
    Par contre je vois mal comment je peux augmenter la precision (1/100 pixels par exemple).. cette fonction n'est plus valable je crois
    Merci

  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 : 53
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Programmeur_Aladdin Voir le message
    Par contre je vois mal comment je peux augmenter la precision (1/100 pixels par exemple).. cette fonction n'est plus valable je crois
    Merci
    Lors de la FFT-1 il faut prendre un espace d'arrivé plus grand.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Merci pseudocode..
    Je suis débutant en traitement d'images alors excuse moin ignorance
    Par prendre un espace d'arrivé plus grand, tu veux dire que j'alloue à mon tableau de sortie (qui va contenir la TF-1) une mémoire plus grande?

  11. #11
    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 : 53
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par Programmeur_Aladdin Voir le message
    Merci pseudocode..
    Je suis débutant en traitement d'images alors excuse moin ignorance
    Oups. Dans ce cas excuse ma réponse un peu lacunaire.

    La FFT nous donne des informations dans le domaine fréquentiel: c'est a dire des informations sur les variations de valeurs entre les pixels, indépendemment de la taille de l'image. Enfin, pas tout a fait "indépendant" car le théorème de Nyquist-Shannon nous limite un peu: il faut au moins 2 pixels pour avoir une information de variation.

    Donc la "taille" des données calculées par la FFT dans le domaine fréquentiel dépend de la taille de l'image de départ. Par contre, pour la reconstruction (FFT-1) nous ne sommes pas limité techniquement. On peut reconstruire l'image avec une taille quelconque.

    La seule chose c'est que si on reconstruit une image plus grande que l'originale, la finesse des variations ne sera pas la même:

    - taille originale: finesse des variations = 1 information de variation pour 2 pixels voisins => la meilleure finesse possible

    - 2xtaille originale: finesse des variations = 1 information de variation pour 4 pixels voisins => effet de flou

    Par prendre un espace d'arrivé plus grand, tu veux dire que j'alloue à mon tableau de sortie (qui va contenir la TF-1) une mémoire plus grande?
    En pratique: oui. Une fois que tu as fait ta FFT "normale", tu allonges la taille du tableau en le remplissant de zéro (tu indiques ainsi que tu n'a pas d'information sur les variations pour les hautes fréquences).

    Une fois que tu as "allongé" ton tableau de coefficients fréquentiels, tu fait une FFT inverse "normale"
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut !

    Chercher un extrémum, c'est-à-dire un zéro de la dérivée d'une fonction est souvent un exercice risqué lorsqu'on ne connait que des valeurs échantillonnées de cette fonction. Si on sait a priori que la fonction est assez régulière, une bonne solution est de l'interpoler par un spline que l'on dérive ensuite. Mais si on n'est pas certain de la régularité, on ne peut pas exclure la présence d'un extrémum indétectable entre deux valeurs données, ou, dans ton cas, entre deux pixels.

    Jean-Marc Blanc

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Bonjour
    Merci pour vos réponses. Je suis entrain de regarder vos suggestions.. je vais les tester et vous tenir au courant si ca fonctionne bien..
    A bientot

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Bonjour
    Après l'augmentation de la précision J'ai décidé de regarder les résultats du programme avec une précision d'un pixel d'abord.. et là je me retrouve avec quelques quéstionnements..
    Tout d'abord, je vous explique brièvement ce que je fais :
    1- Je calcule les transformées de Fourier des image 1 et 2.
    2- Je calcule la matrice de corrélation normalisée en multipliant le TF de l'image 1 par le complexe conjugué de la TF de l'image 2 et je divise par leurs normes.
    3- Je calcule la TF inverse de la matrice de corrélation et je cherche les coordonées du pic (qui correspond à DeltaX et DeltaY)

    Ma question est à propos des dimensions de l'image..
    - Si les deux images ont la même dimension : Dois-je travailler avec ces même dimension ou les rendre une puissance de 2. (Car j'ai lu que la TF est effectuée plus rapidement si les dimensions sont puissances de 2)

    J'ai essayé les deux choix:
    avec le premier choix (dimension 1051x1028) j'obtiens un DeltaX=1 pixel et un DeltaY=916 pixels (ce qui bcp)
    avec le deuxieme choix (dimension 2048 x 2048) j'obtiens un DeltaX =1106 (ce qui est bcp) et DetaY=2 pixels

    What's happen ?

    Merci

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 164
    Par défaut
    salut, il y a une méthode plus imple pour obtenir une précision subpixelique :
    considérer le voisinage du pic (par exemple un V8) et calculer le barycentre pondéré par les niveaux de gris de chaque pixel du V8. Il est également possible de "modéliser" le pic en faisant une interpolation par une fonction de Gauss par exemple

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 23
    Par défaut
    Cher atomicJo
    Merci pour ta réponse..
    je n'ai pas compris qcq tu veux dire par V8 et barycentre (excuse le débutant que je suis)
    Peux tu m'expliquer un peu plus stp?

Discussions similaires

  1. Transformée de fourier inverse
    Par Moisenberg dans le forum Signal
    Réponses: 0
    Dernier message: 11/05/2014, 15h30
  2. Transformée de Fourier et son inverse
    Par altaruk dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/04/2014, 11h45
  3. Réponses: 1
    Dernier message: 20/04/2011, 22h10
  4. [Débutant] Transformée de Fourier Inverse - symétrie
    Par Tibtib dans le forum Signal
    Réponses: 6
    Dernier message: 28/02/2011, 11h36
  5. Réponses: 10
    Dernier message: 26/06/2007, 15h14

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