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 :

Invariants différentiels pour caractériser les points d'intérêt


Sujet :

Traitement d'images

  1. #61
    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 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    Bonjour pseudocode,
    Est ce que le SIFT permet pas de faire ces rotations (25°,35°,....) ?
    Non. Il n'y a pas moyen de faire réapparaitre les informations qui ont été perdues lors de la rotation.

    La seule chose, c'est que le descripteur de SIFT fait des moyennes sur un grand nombre de pixels autour du point considéré, donc l'erreur due a la rotation est amoindrie.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  2. #62
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Salut, j'ai un code sous matlab qui marche partiellement pour le changement d'échelle (20% en matching), mais aucune correspondance dès que je passe à la rotation ....
    Quelqu'un peut-il m'aider ?

    Je pense que le probleme vient de mon calcul des gradients (?), mais j'ai beau essayer toute les formules possibles, j'y arrive pas...
    J'utilise la fonction "gradient(image_lissée)" qui me fournit 2 matrices image_dx et image_dy. Ensuite, pour chaque pixel de coordonnées (i,j) :
    - Amplitude(i,j) = sqrt(image_dx^2 + image_dy^2)
    - Orientation(i,j) = (180/pi)*atan(image_dy/image_dx)

    Pour finaliser la phase de "détection", je procède de la façon suivante (pour chaque octave ) : pour un pixel keypoint(i,j,sigma,octave)
    1) Je sélectionne une zone 'RegionDétectée' de rayon r=4*sigma
    2) Je détermine les différentes orientations possibles pour le keypoint, et les amplitudes associées

    Pour la phase de "description", je procède comme ça :
    1) Je redimensionne 'RegionDétectée' à la taille 41*41 pixels (après lissage si nécessaire). On appelle 'Region' cette zone de travail.
    1) Pour chaque orientation theta du keypoint :
    1.a) Je tourne la 'Region' d'un angle "-theta" pour l'aligner sur l'orientation
    actuelle
    2.b) Je calcule le vecteur descripteur, et le normalise à la fin

    Pour la phase de matching, j'ai repris le code de Lowe.

    ...
    Merci

  3. #63
    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 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Morpheus42000 Voir le message
    Pour la phase de "description", je procède comme ça :
    1) Je redimensionne 'RegionDétectée' à la taille 41*41 pixels (après lissage si nécessaire). On appelle 'Region' cette zone de travail.
    1) Pour chaque orientation theta du keypoint :
    1.a) Je tourne la 'Region' d'un angle "-theta" pour l'aligner sur l'orientation
    actuelle
    2.b) Je calcule le vecteur descripteur, et le normalise à la fin
    Moi je parcours les pixels de la région tournée d'un angle "+Theta". Pour chaque pixel, je calcule le gradient dans l'image originale (non tournée) et je retranche "Theta" a la valeur de l'angle du gradient.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #64
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Sift, gradient
    Moi je parcours les pixels de la région tournée d'un angle "+Theta". Pour chaque pixel, je calcule le gradient dans l'image originale (non tournée) et je retranche "Theta" a la valeur de l'angle du gradient.
    Oui, il me semble que ta méthode soit la plus logique (c'est d'ailleur ce que propose Lowe). Mon problème vient surement du calcul des gradients, et j'ai malheuresement pu constater que les vecteurs calculés aux points d'intérêt ne "tournent" pas lorsque j'effectue une rotation de l'image....

    J'utilise la fonction "gradient(image_lissée)" qui me fournit 2 matrices image_dx et image_dy. Ensuite, pour chaque pixel de coordonnées (i,j) :
    - Amplitude(i,j) = sqrt(image_dx^2 + image_dy^2)
    - Orientation(i,j) = (180/pi)*atan(image_dy/image_dx)
    Matlab propose la fonction "quiver" pour visualiser les gradients ; dans ce cas, on constate bien que les vecteurs "tournent" avec l'image. Mais lorsque j'essaie de reproduire cette invariance avec les dérivées partielles fournies par la fonction "gradient", ça marche plus .... Quézako ?.... Je creuse toujours ^^. C'est pour ça que j'ai essayé de calculer les descripteurs SIFT sur des portions "tournées" d'un angle theta...

  5. #65
    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 081
    Points
    16 081
    Par défaut
    Juste une remarque en passant, regarde s'il n'y a pas une fonction "atan2(y,x)" dans Matlab.

    Les fonctions "atan2" sont plus robustes pour le calcul (surtout pour x proche de zéro).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #66
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Juste une remarque en passant, regarde s'il n'y a pas une fonction "atan2(y,x)" dans Matlab.

    Les fonctions "atan2" sont plus robustes pour le calcul (surtout pour x proche de zéro).
    Il y a bien une fonction "atan2" dans Matlab. Mais le résultat est le meme

  7. #67
    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 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Morpheus42000 Voir le message
    Il y a bien une fonction "atan2" dans Matlab. Mais le résultat est le meme
    Effectivement, c'est curieux.

    Et pourquoi tu n'utilises pas la méthode de Lowe (retrancher "theta" a l'angle du gradient d'origine) au lieu de "tourner" l'image ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #68
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Effectivement, c'est curieux.

    Et pourquoi tu n'utilises pas la méthode de Lowe (retrancher "theta" a l'angle du gradient d'origine) au lieu de "tourner" l'image ?
    La réponse est toute simple : gain sur le temps de calcul . Retrancher "theta" sur le voisinage du keypoint m'oblige à utiliser une nouvelle boucle "for" pour ramener les valeurs des angles entre 0 et 350° (pour le tracé des histogrammes par la suite). Faire tourner l'image l'image d'un angle "theta" m'évite cette boucle...
    Je "grignote" les secondes par-ci par là ^^, vu que pour l'instant il me faut au moins 8 secondes pour décrire une ptite image jpg de 12ko...

  9. #69
    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 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Morpheus42000 Voir le message
    La réponse est toute simple : gain sur le temps de calcul . Retrancher "theta" sur le voisinage du keypoint m'oblige à utiliser une nouvelle boucle "for" pour ramener les valeurs des angles entre 0 et 350°
    C'est une simple soustraction (module 360°) sur l'angle du gradient, angle qui a été pré-calculé sur l'image d'origine (non tournée). Je ne vois pas en quoi cela fait perdre du temps de calcul.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #70
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Oui, effectivement, chui passé à côté ^^ En plus, y'a la fonction "rem" sous Matlab qui donne le reste d'une division entiere.... Mille excuses !

Discussions similaires

  1. Matrice hessienne pour déterminer les points d'intérêts
    Par highlight dans le forum Mathématiques
    Réponses: 7
    Dernier message: 14/10/2011, 19h52
  2. Requête pour Oter les points dans les Num de tel
    Par isabelle b dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/07/2008, 01h27
  3. update pour resserrer les points
    Par pipoket dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 02/05/2008, 13h13
  4. Encore une histoire pour remplacer les points
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/08/2007, 11h41
  5. Requete pour compter les points dans un championnat
    Par IG2da dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2006, 17h58

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