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 :

Algorithme SIFT


Sujet :

Traitement d'images

  1. #101
    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 T_Lara Voir le message
    1-qu'est ce que vous appelez adjacent ? j'ai essayée d'analyser votre raisonnement et comment avoir que 4 patch adjacent je n'est trouvee qu'une seule interpretation ..le pixel influence sur les histogrammes des patch dont sa distance horisontal et vertical de leurs centre est inferieure a 4

    cela est il vrai ? dans ce cas est ce que l image illustrative est juste?
    oui.

    2-cette manipulation se fait pour tout les pixel pas seuls dans les patch des frontieres ??
    oui, ca se fait pour tous les pixels de la region 16x16.

    3- ie : exp( -(i * i + j* j) /( 4*4*0.5)) ( ou i et j sont pris par rapport au point d'interet ) ??
    Bah là, ca dépend des interprétations. Moi ce que j'ai compris du papier de Lowe, c'est :

    "A Gaussian weighting function with σ equal to one half the width of the descriptor window is used to assign a weight to the magnitude of each sample point"

    G(i,j,sigma) = 1/(2.pi.sigma²).exp( -(i²+j²) / ( 2*sigma²) )

    avec sigma = 16/2 = 8,
    et -8<= i,j <= +8

    4- Pour la normalisation du vecteur discripteur "to unit length" cela veut dire ca ??:: ( enfin moi j'avais pas compris qu'est ce que ca veut dire unit length mais d'apres le code c'est la racine des somme des carres )
    il faut effectivement diviser chaque composante du vecteur par la norme du vecteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    N2=0
    pour ( i=0 , i< longeur_du_vecteur, i++)
        N2 += v[i]*v[i]
    N = sqrt(N2)
     pour ( i=0 , i< longeur_du_vecteur, i++)
       v[i]= v[i]/N
    PS: je reviens sur un petit point pour l'assurer concernant le calcul de l'orientation du point d’intérêt ..lors de la création de l'histogramme si 0<tetha<10 c'est hist[0] qui reçoit le mag n'est-ce pas
    Non, je m'étais trompé dans ma réponse la dernière fois (je n'avais pas compris de quoi tu parlais ). Il faut distribuer la valeur "mag" sur les 2 bins les plus proches, de la meme manière que dans le dessin.

    pour 0<tetha<10,

    dinf = (theta-0)/10
    dsup = (10-theta)/10

    hist[0] += (1-dinf)*mag
    hist[10] += (1-dsup)*mag

    oui, c'est bien ca.

  2. #102
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Comme suis embêtante lool je reviens poser d'autres questions

    pour la norme et theta de chaque pixel d’après Lowe on les calcule pour chaque pixel de l'image concerné de la pyramide sans aucune rotation

    SQRT ((L(x+1,y)- L(x-1,y ))^2 +( L(x,y+1)-L(x,y-1))^2 ))

    la difficulté est alors dans detecter les bornes des patchs et les pixels de chacun vu que c'est liée a l'orientation du point d'interet ( pour ce faire on va convertir les coordonnée de chaque pixel dans les 16*16 pixels)

    La question qui se pose ..si on procède a une rotation de l image (par matlab) et on définie les nouvelles coordonnées du point d'interet ..la manipulation apres ca se facilite et on aura juste le probleme de redefinir la norme et theta de chaque pixel ..en analysant la formule de la norme on peut la definir a nouveau suivant l'orientation pour qu'elle soit :
    SQRT ((L(x+1,y)- L(x-1,y ))^2 +( L(x,y+1)-L(x,y-1))^2 )) si 0<orientation<22.5 ou 67.5<orientation<112.5 ou 157.5<orientation<202.5 ou 247.5<orientation<292.5 ou 337.5< orientation

    SQRT ((L(x+1,y-1)- L(x-1,y+1 ))^2 +( L(x+1,y+1)-L(x-1,y-1))^2 )) sinon

    Par la même logique on peut calculer theta ( pour y soustraire orientation par la suite )

  3. #103
    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
    Je dois dire que je n'ai pas compris grand chose.

    1. La norme ne dépend pas de l'orientation
    2. On oriente les 16x16 pixels du patch, pas ceux de l'image

    Pour la fin, je suis d'accord. L'orientation relative du gradient dans patch se calcule en prenant l'orientation absolue du gradient de l'image, en y retranchant l'orientation (theta) du patch.

  4. #104
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Si I1 est l'image principale
    suppose avec moi que t'as obtenu une nouvelle image tournée de I1 par 45 degree qui va être I2

    Pour un certain pixel P représenté dans I1(x1,y1) et I2(x2,y2)
    le pixel adjacent I1(X1-1,y1) va être représenté dans I2(x2-1,y2-1)

    C'est pourquoi je parle de changement de la norme

  5. #105
    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 T_Lara Voir le message
    Si I1 est l'image principale
    suppose avec moi que t'as obtenu une nouvelle image tournée de I1 par 45 degree qui va être I2

    Pour un certain pixel P représenté dans I1(x1,y1) et I2(x2,y2)
    le pixel adjacent I1(X1-1,y1) va être représenté dans I2(x2-1,y2-1)

    C'est pourquoi je parle de changement de la norme
    Oui, je vois ce que tu veux dire, mais dans la pratique on ne tourne pas l'image originale. A l'inverse, on cherche quel est le pixel de l'image correspondant aux cases du patch 16x16.

    Dans un patch non orienté, si P(px,py) est le point d'intéret dans l'image, la case en haut à gauche du patch a pour coordonnée (px-8,py-8).

    Mais comme le patch est orienté d'un angle théta=45°, le pixel qui correspond à la case en haut à gauche est en réalité aux coordonnées :

    px + (-8)*cos(45°) - (-8)*sin(45°) = px
    py + (-8)*sin(45°) + (-8)*cos(45°) = py - 8*sqrt(2)



    Il suffit d'aller regarder la norme "N" et l'orientation "T" du pixel a cette position, et de retrancher theta à T pour avoir l'orientation relative.

  6. #106
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Ok Meeeeeeeeeerci ..cela correspond a ce que j'ai dit au départ bien que c'etait mal dit...

    pour la norme et theta de chaque pixel d’après Lowe on les calcule pour chaque pixel de l'image concerné de la pyramide sans aucune rotation

    SQRT ((L(x+1,y)- L(x-1,y ))^2 +( L(x,y+1)-L(x,y-1))^2 ))

    la difficulté est alors dans detecter les bornes des patchs et les pixels de chacun vu que c'est liée a l'orientation du point d'interet ( pour ce faire on va convertir les coordonnée de chaque pixel dans les 16*16 pixels)

    Ce que j'ai dit apres c'etait une question pour dire si la 2 iem proposition peut faire l'affaire ..et a ce qu'il parait la reponse est NON

  7. #107
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    Ces composantes représentent le voisinage du point d'intérêt. Plus precisemment c'est l'ensemble des histogrammes d'orientation du voisinage de ton point d'intérêt. Chaque histogramme étant sur 8 composants, et puisque le voisinage est divise en 4x4 régions, ça te donne 8x4x4 = 128 composantes.


    Citation Envoyé par paradize3 Voir le message

    Citation Envoyé par MohEllayali

    Tout à fait , mais ce qui me parrait bizzare , c'est la dimension paire de la fenêtre :
    http://pegasus.cc.ucf.edu/~ja709267/...,19,Descriptor

    le plus logique , pour que la fenêtre soit symétrique c'est qu'il soit impaires, autant de pixel à droite qu'à gauche
    Premièrement, n'oublie pas qu'un point d'intérêt a une précision plus précise qu'un pixel. Théoriquement je ne pense pas qu'il y ait a pas de raison pour que ta fenêtre soit alignée sur un pixel, on pourrait s'en sortir avec des interpolations. Dans la pratique je pense que la fenêtre est suffisamment grande pour que ça ne cause pas de problème de l'aligner sur le pixel le plus proche du point d'intérêt (la description du point d'intérêt ne sera peut-être 'exacte', mais la localisation calculée précédemment l'est, c'est l'important).

    Salutations,

    Greg

    Salut,

    ce que j'ai pas bien compris pourquoi l'histogramme étant sur 8 composants, et je ne comprend pas encore pourquoi la taille de la fenêtre 4*4 un nombre paire car comme ça le point d'intérêt ne soit pas centré ??!!

  8. #108
    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 azertyuio Voir le message
    Salut,

    ce que j'ai pas bien compris pourquoi l'histogramme étant sur 8 composants, et je ne comprend pas encore pourquoi la taille de la fenêtre 4*4 un nombre paire car comme ça le point d'intérêt ne soit pas centré ??!!
    Aucune idée pour les 2 questions.

    Je suppose que Lowe a fait des tests pour aboutir à choisir une quantification sur un histogramme de 8 bins. Et c'est vrai qu'utiliser un nombre impair de cases aurait simplifié la sélection des pixels. D'un autre coté, un nombre pair permet de découper la zone en 4. Bref, je ne sais pas.

  9. #109
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Aucune idée pour les 2 questions.

    Je suppose que Lowe a fait des tests pour aboutir à choisir une quantification sur un histogramme de 8 bins. Et c'est vrai qu'utiliser un nombre impair de cases aurait simplifié la sélection des pixels. D'un autre coté, un nombre pair permet de découper la zone en 4. Bref, je ne sais pas.

    au moins tu m as répondu merci
    si jai bien compris les 8 bins signifie qu'un histogramme de 8 dimension ?
    jai voulu juste comprendre le fonctionnement du SIFT car j'ai lu l article du D.Lowe mais j'ai eu quelques obscurités !!


    réellement je pense pas que je vais l'utiliser ce SIFT car je travaille sur des images médicales symétriques
    et je fais juste une comparaison entre la partie gauche et la partie droite de la même image pour retrouver l'anomalie !!

    et j'ai voulu utiliser différentes méthodes d'extraction des points d intérêt et différents descripteurs
    et comparer les résultats.

  10. #110
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par azertyuio Voir le message
    si jai bien compris les 8 bins signifie qu'un histogramme de 8 dimension ?
    alors là je dis du n importe quoi
    8 represente les 8 directions !!

  11. #111
    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 azertyuio Voir le message
    alors là je dis du n importe quoi
    8 represente les 8 directions !!
    Oui. Ca veut juste dire que l'histogramme est un tableau avec 8 cases.

  12. #112
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut descripteur SIFT
    salut,

    après avoir lu l'article de Lowe
    j'ai pas bien compris comment je peux créer le descripteur SIFT
    je part d'une zone 16*16 où le point d'intérêt est centré
    ensuite je calcule la gradient dI/dx et dI/dy pour chaque pixel
    ensuite je calcule la somme des gradients des pixels horizontaux, verticaux et diagonaux chacun à part .. j’obtiendrai 8 valeurs qui représente les 8 bins ??
    c juste ?

  13. #113
    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 azertyuio Voir le message
    salut,

    après avoir lu l'article de Lowe
    j'ai pas bien compris comment je peux créer le descripteur SIFT
    je part d'une zone 16*16 où le point d'intérêt est centré
    ensuite je calcule la gradient dI/dx et dI/dy pour chaque pixel
    ensuite je calcule la somme des gradients des pixels horizontaux, verticaux et diagonaux chacun à part .. j’obtiendrai 8 valeurs qui représente les 8 bins ??
    c juste ?
    heu... non.

    Pour chaque pixel :
    1. On calcule le vecteur gradient (dI/dx,dI/dy)
    2. On convertit le vecteur en cordonnées polaires (rho,theta)
    3. On calcule l'index correspondant à "theta" dans l'histogramme : idx = theta*8/360
    4. On répartit la valeur "rho" dans les 2 bins les plus proches

  14. #114
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    heu... non.

    Pour chaque pixel :
    1. On calcule le vecteur gradient (dI/dx,dI/dy)
    2. On convertit le vecteur en cordonnées polaires (rho,theta)
    3. On calcule l'index correspondant à "theta" dans l'histogramme : idx = theta*8/360
    4. On répartit la valeur "rho" dans les 2 bins les plus proches
    merci mais je suis désolée pour le dérangement j'ai compris uniquement la première étape

  15. #115
    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 azertyuio Voir le message
    merci mais je suis désolée pour le dérangement j'ai compris uniquement la première étape
    Ah, c'est pas gagné alors. C'est un traitement assez basique.

    En pseudo java ca ferait quelque chose comme cela

    Code java : 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
    int HSIZE = 8;
    double HSCALE = HSIZE/(2*PI);
    double histo[] = new float[HSIZE];
     
    for(Pixel p : listofpixels) {
     
      // etape 1
      Vector g = gradient(p);
     
      // etape 2
      double rho = racine( g.x*g.x + g.y*g.y);
      double theta = atan2(g.y, g.x);
     
      // etape 3
      double tq = theta*HSCALE;
      int idx = (int) tq;
     
      // etape 4
      dsup = (tq-idx);
      dinf = 1-dsup;
      histo[idx] = dinf * rho;
      histo[(idx+1) modulo HSIZE] = dsup * rho;
     
    }

  16. #116
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par pseudocode
    Ah, c'est pas gagné alors.
    maintenant c'est gagné
    merci pseudocode j'ai compris le principe

  17. #117
    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 azertyuio Voir le message
    maintenant c'est gagné
    merci pseudocode j'ai compris le principe
    Comme quoi, mon code est plus clair que mes explications.

  18. #118
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Comme quoi, mon code est plus clair que mes explications.
    lol
    euuh...enfait ton code et tes explications sont plutôt complémentaires.

  19. #119
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 151
    Points : 92
    Points
    92
    Par défaut
    bonjour,


    est ce que je peut utiliser le detecteur SIFT pour des images n'ayant pas de changement d'échelle??

    et je veux savoir est ce que je peut utiliser le descripteur SIFT avec des points détectés par Harris?

  20. #120
    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 azertyuio Voir le message
    est ce que je peut utiliser le detecteur SIFT pour des images n'ayant pas de changement d'échelle??

    et je veux savoir est ce que je peut utiliser le descripteur SIFT avec des points détectés par Harris?
    On peut toujours calculer le descripteur SIFT autour de n'importe quel pixel, à n'importe quel échelle. Ca nous donnera toujours un vecteur de 128 valeurs.

    Maintenant, il faut bien voir que l'intérêt de calculer ce descripteur c'est de pourvoir le comparer à d'autres descripteurs dans le but de trouver des correspondances. Et pour cela, il y a intérêt à ce que les deux descripteurs soient calculés sur le même pixel à la même échelle.

+ Répondre à la discussion
Cette discussion est résolue.
Page 6 sur 8 PremièrePremière ... 2345678 DernièreDernière

Discussions similaires

  1. Comprendre les étapes de l'algorithme SIFT
    Par looclooc dans le forum Traitement d'images
    Réponses: 6
    Dernier message: 08/12/2011, 15h54
  2. Algorithme SIFT
    Par QuestionSolution dans le forum OpenCV
    Réponses: 3
    Dernier message: 08/10/2009, 18h00
  3. Réponses: 3
    Dernier message: 12/06/2009, 14h10
  4. Algorithme SIFT et tracking en temps réel
    Par looclooc dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 19/05/2009, 09h20
  5. Algorithme SIFT
    Par speedo2008 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 01/04/2009, 09h49

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