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 du signal Discussion :

Detecteur de harris


Sujet :

Traitement du signal

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut Detecteur de harris
    Bonjour a tous !
    Je doit implémenter une détectin de coin pour une image, et j'ai lu que c'était un algo trés répandu . J'ai fureté sur le web ; il semble que la premiére étape soit la création d'une matrice d'autocorrelation .
    Mon probléme et que je ne trouve pas d'explication sur comment calculer les 4 petits terme de ma matrice ... si quelqun a un lien détaillé , je suis preneur
    merci

  2. #2
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    + "harris detector" --> le premier lien (un power point) donne des explications...

    Si tu parles du calcul de M (celui qui est appelé M dans le transparent), il faut calculer la dérivée de ton image selon x, y, et la dérivée seconde (Laplacien).
    (Laisse tomber le w qui serra englobé dans les explications que je te donne après)

    Pour ça un moyen simple: tu convolues ton image par la dérivée première d'une gaussienne 1D dans chaque direction x et y : ça te donne les dérivées en x et en y.
    Ensuite tu convolues par exemple la dérivée en x avec une gaussienne 1D dans la direction de y, hop ! ça te donne le Laplacien !

    A+
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Je n'était aps encore tombé sur de pdf , pas vilain mais un peu trop bref pour moi .
    Le probléme concernat ce que tu dit dans ton post précédent :
    - dérivée une image ? gné?
    - laplacien ? ( deja entendu le mot mais ca s'arrete la )
    - convolution ?
    - gausienne 1D ?

    Enfin bref :p je crois qu'il me manque quelques notions lol ; je vais regarder ca de plus prés ...

    Sinon un lien que je trouve sympa :
    http://www.cim.mcgill.ca/~dparks/harris.htm

    enfin merci

  4. #4
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par Clad3
    - dérivée une image ? gné?
    Une image, ça n'est rien d'autre qu'une fonction 2D, un signal 2D.
    Comme tout signal, elle peut donc être dérivée.
    En tant que fonction 2Ddonc à 2 variables, il faut calculer les dérivées dites partielles dI/dx, dI/dy, et la dérivée conjuguée: d²I/dxdy .
    Pour ça plusieurs méthodes:
    - utiliser par exemple les approximations (vraiment très approximatives):
    * dI/dx = I(x+1,y) - I(x-1,y) ,
    * dI/dy = I(x,y+1) - I(x,y-1)

    Ensuite on convolue le signal dI/dx (qui est une image 2D) par une gaussienne 1D de direction y pour lisser l'image, idem pour dI/dy (convolution selon x).

    Enfin le Laplacien (dérivée seconde : d²I/dxdy) est obtenu en convoluant I avec un masque du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    -1 0 -1
     0 4  0
    -1 0 -1
    .

    - utilsier la méthode que j'ai expliqué au dessus : on calcule les dérivées en convoluant l'image par la dérivée d'une gaussienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    G(x,y) = [1/(4*pi*sigma^2)] * (-2x*exp(-x^2/(2.sigma)))*(-2y*exp(-y^2/(2.sigma)))
    C'est ce qui s'appelle le filtrage de Canny-Deriche... Regarde sous google tu trouveras ton bonheur.

    Ah oui ! La convolution, c'est ce qui est similaire au filtrage d'une image:
    on définit un masque (RIF : réponse impulsionnelle finie : c'est la 1ère méthode) ou un signal (RII : réponse impulsionnelle infinie: c'est la 2è méthode), et on applique ce qu'on appelle une convolution pour filtrer le signal image.

    Enfin bon je peux pas trop tout t'expliquer là, ça risque d'être long, le mieux étant que tu regardes un cours bien fait sur le traitement d'images de base...
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    merci, je vais regarder tout ca, mais c'est vrai que je n'ai aucune base en traitement de l'image :/ mais bon en un mois , j'ai pas le temps de tout reprendre a zéro c'est ca le pb :/
    enfin bref, j'y retourne

  6. #6
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Je sais pas exactement ce que tu dois faire, mais je suis quasi sûr que le détecteur de Harris a déjà été implémenté dans pas mal de langages / librairies, comme par exemple en matlab (où je crois que la fonction s'appelle carrément 'harris'), et quasi sûr en C++.

    Sinon il ya aussi un tas de libairies qui font de la convolution, dérivation d'images... Je cois que Magick++ l( c'est du C++) e fait mais je suis plus sûr...

    A+
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Heu merci des incications , mais j'aurais du préciser que je doit implémenter ca seul
    C'est un projet pédagogique . il me manque tellement de notion que je ne peut pas me permetre de tout considéré comme acquis

  8. #8
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Bonjour Dslé de ne pa avoir fait part de mon aide si je peut ten approter j'ai arreter la prog pr redigé un rapprot de stage ... et oué on peu pa tjr samuser*.
    Jai programmer un Detecteur de HARRIS en python je peut ten rappeler l'algo :
    Soit une image I

    Calculer le gradient X de celle ci Noyau de convolution pr le Gradient X

    1 2 1
    0 0 0
    - 1 - 2 -1


    Calculer le gradient Y de celle ci

    Matrice d'un gradient Y

    1 0 -1
    2 0 -2
    1 0 -1


    Créer trois nouvelles images

    A= Gx*Gx
    B=Gy*Gy
    C=Gx*Gy

    Appliquer un gaussien sur les trois image A,B et C

    Aprés tu applique sur ton image originale le calcul suivant

    H= det(M)- 0.04 (trace(m))², ou m est la matrice [[ac][cb]]

    Aprés tu tri tes point selon une valeur de sueil. Si la valeur des points est superieur au seuil alors les points Sont robuste.





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     '''# position des points traites dans l'image
                #       p1   p2   p3   
                #       p4        p6
                #       p7  p8    p9  '''
     
    po1=(x-1 , y-1  )  
                dat1x=A.getpixel((x-1,y-1))
                dat1y=B.getpixel((x-1,y-1))
                dat1xy=C.getpixel((x-1,y-1))
                detM1=dat1x*dat1y-dat1xy*dat1xy
                trM1=dat1x+dat1y
                p1=detM1-0.04*trM1*trM1
    Ici tu a juste le point en haut a droite du point traité

    il faut repeter l'operation sur les 8 point alentour a ton point traiter

    Voila n'esite pas a demander de l'aide si jai pas était suffisament clair
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  9. #9
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Salut !

    Calculer le gradient X de celle ci Noyau de convolution pr le Gradient X

    1 2 1
    0 0 0
    - 1 - 2 -1


    Calculer le gradient Y de celle ci

    Matrice d'un gradient Y

    1 0 -1
    2 0 -2
    1 0 -1


    Créer trois nouvelles images

    A= Gx*Gx
    B=Gy*Gy
    C=Gx*Gy
    La méthode que tu donnes est une dérivation de l'image via les masques classiques puis convolution avec une gaussienne. As-tu essayé avec un filtre récursif sur la première dérivée d'une gaussienne (opérateur de Canny) ?? C'est juste par curiosité pour savoir si ça donnerait pas de meilleurs résultats, mais c'est sûr que le temps de calcul ferait un bon...

    A+
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  10. #10
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    A vrai dire non , je n'est pas essayer, il me fallait juste pour mon prog detecter des points particulier sur une prothese de genoux (Film a RX) afin danimer celle ci en 3D ,nous avons reussi (on été deux sur le projet) a animer juste le plateau tibial, de plus nous faisions le calcul dans des petits cadre puisque lorsque nous apliquions le detecteur nous relevions les coins des agraphe encore presente de l'operation ... chose qui rendait les coordonnée unutilisable car nous n'avions pas encor labelisé nos points ..

    Il me semble de loperateur de CANNY deriche est une detection de contour ... non ?
    Si c'est le cas oui nous en avons fait une aussi afin d'en effet amelioré la qualité des point . " A vrai dire je seche un peu sur

    As-tu essayé avec un filtre récursif sur la première dérivée d'une gaussienne
    Faudrait que je replonge dans mes cours pour te dire ..
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  11. #11
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    merci beaucoup
    je suis actuellement entrain de finir d'implémenter le detecteur de moravec ( + simple a comprendre ) ( j'en suis a la recherche des correspondace entre les point d'intrér^tes trouvé dans les 2 images ) .
    Une fois que j'aurais finit ca, je reviendrais peut-etre vers harris
    merci encore !

  12. #12
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Oki tu en est a la mise en correspondance des points .. trouver qu'utilise tu ... Les Sum of Squared Diferrence ? SSD... cela m'interesse ..

    Tiens je te file un lien sur un prof de vision par ordinateur tout y est exlqué si je ne mabuse ...en plus il met des bout de code en effet c'est a l'origine un TD online et il met quelque indice .... Euh si c'est pas indiscret tu chercher a faire une une mise en 3D a partir de deux vue non ?

    http://devernay.free.fr/cours/vision/iicao/td5.html
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

  13. #13
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Points : 451
    Points
    451
    Par défaut
    Citation:
    As-tu essayé avec un filtre récursif sur la première dérivée d'une gaussienne
    Faudrait que je replonge dans mes cours pour te dire ..
    En fait il ya 2 moyens de dériver : soit avec des filtres de taille finie : ce que tu as utilisé avec
    1 2 1
    0 0 0
    - 1 - 2 -1
    selon les X par exemple,
    ou alors on convolue l'image avec un filtre dit récursif : Canny a montré que la convolution avec la première dérivée d'une gaussienne donne la dérivée de l'image: la fontion est celle que j'avais donné au dessus...

    Le filtrage récursif est plus précis mais bien plus long : on filtre avec une fonction définie sur ]-infini +infini[ au lieu de filtrer avec un masque de support fini.
    "Cultiver les sciences et ne pas aimer les hommes, c'est allumer un flambeau et fermer les yeux." Proverbe chinois

  14. #14
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Oki merci bien j'essaierai plus tard ..
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

Discussions similaires

  1. Detecteur de coins de harris
    Par Nader Jendoubi dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 04/04/2015, 03h15
  2. problème du detecteur de HARRIS
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 15/04/2009, 16h54
  3. detecteur de harris laplacien
    Par hanane78 dans le forum Traitement d'images
    Réponses: 24
    Dernier message: 02/01/2008, 13h40
  4. Programme en C++ pour le detecteur de harris
    Par saredo dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 11/06/2006, 00h24

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