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 :

Calcul du jacobian et de la matrice hessienne


Sujet :

Traitement d'images

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut Calcul du jacobian et de la matrice hessienne
    Bonsoir,

    D'abord il faut signaler que je suis novice dans le domaine de traitement d'image donc ça se peut que mes questions seront banales

    En fait, je suis entraine d'implémenter un algorithme d'alignement dont le principe est :

    on a deux images T et I . et une transformation W(p1,...pn) de n paramètres. tel que I=W(T) . (par exemple W peut être une translation)

    L'algorithme prend T et I comme entré et donne W comme résultat.

    Pour faire ça il faut à une certaine étape calculer le jacobien de W noté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    dW     |dWx/dp1   dWx/dp2.... dWx/dpn|
    ----=  |
    dp     |dWy/dp1   dWy/dp2.... dWy/dpn|

    et calculer la matrice hessienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        |d²I/dx²   dI/dx dI/dy|
    H =|
        |dI/dx dI/dy   d²I/d²y|
    j'ai compris comment calculer ça mathématiquement mais j'arrive pas à comprendre comment le faire sur les image ou la transformation que j'ai !!!

    Merci d'avance de me faire comprendre

  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 : 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
    Il faut utiliser les formules de dérivations discrètes.

    1er ordre

    dI/dx = ( I(x+1,y) - I(x-1,y) ) / 2
    dI/dy = ( I(x,y+1) - I(x,y-1) ) / 2


    2nd ordre

    d²I/dx² = ( I(x+1,y) - 2*I(x,y) + I(x-1,y) ) / 4
    d²I/dy² = ( I(x,y+1) - 2*I(x,y) + I(x,y-1) ) / 4
    d²I/dxy = ( I(x+1,y+1) - I(x-1,y+1) - I(x+1,y-1) + I(x-1,y-1) ) / 4


    Et de même pour W

    dWx/dp1 = ( Wx(p1+epsilon,...) - Wx(p1-epsilon, ...) ) / 2*epsilon
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut
    Bonjour, merci pour ta réponse

    concernant la matrice hessienne . est ce que je peux utiliser directement les valeur de gradient de l'image? parce que j'ai calculer le gradient de l'image I par le filtre "Sobel". et je posède deux matrices : une pour le gradient en x et l'autre pour le gradient en y.
    Donc est ce que je peux remplir la matrice hessienne comme cela ?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    float t[2];
    t[0]= grad_en_x[x,y]; //valeur du gradient en x dans le point (x,y)
    t[1]= grad_en_x[x,y];//valeur du gradient en y dans le point (x,y)
    for ( int i=0;i<2;i++)
    {
       for ( int j=0;j<2;j++)
         H[i,j]=t[i]*t[j];
    }

    et concernant le jacobien !! je n'ai pas compris ce que tu m'as dis
    W est une matrice de transformation , comment j'applique ce que tu m'as écris ?

    J'espère que j'ai bien exprimé mon problème

  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 : 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 info_amel Voir le message
    Donc est ce que je peux remplir la matrice hessienne comme cela ?:
    Non. La dérivée seconde ce n'est pas le carré de la dérivée première.

    et concernant le jacobien !! je n'ai pas compris ce que tu m'as dis
    W est une matrice de transformation , comment j'applique ce que tu m'as écris ?
    Bah, tu appliques la formule de dérivation pour chaque paramètre.

    Si tu nous donnais un exemple de matrice W, et de la formule utilisée pour calculer W(T) ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut
    Non. La dérivée seconde ce n'est pas le carré de la dérivée première.
    D'accord , alors j'applique le filtre sobel 2 fois en x pour obtenir d²I/dx²?
    c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    grade_en_x = sobel_en_x(I);
    grade_en_x2=sobel_en_x(grade_en_x)
    et je l'applique une fois en x et autre en y pour obtenir dI/dx dI/dy ?
    c'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    grade_en_x = sobel_en_x(I);
    grade_en_xy=sobel_en_y(grade_en_x)
    Si tu nous donnais un exemple de matrice W, et de la formule utilisée pour calculer W(T) ?
    W peut avoir plusieurs forme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Translation :
         |1  0  xt |
    w= |0  1  yt |    (xy,yt) le pas de translation en x et y
         |0  0  1  |
    Donc chaque pixel p(x,y) de T est multiplié par W pour trouver ces nouvelles coordonnées dans l'image W(T).

    donc si (xt,yt)=(2,30) alors après la multiplication de chaque pixel de T par W en trouve une image (T1=W(T)) qui est la similaire à T mais dont les pixels sont décalés de 2 en x et de 30 en y.

    noter que W peut être une rotation, changement d'échelle....

    En tous les cas l'algorithme s'appelle "Lucas et Kanade" il est utilisé pour l'alignement des image et aussi pour le suivi et autres... (En sait jamais tu as une idée sur ça)

  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 : 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 info_amel Voir le message
    D'accord , alors j'applique le filtre sobel 2 fois en x pour obtenir d²I/dx²?
    et je l'applique une fois en x et autre en y pour obtenir dI/dx dI/dy ?
    Oui, comme ça cela marche. D'ailleurs on obtient au final les memes formules que j'ai donnée.

    W peut avoir plusieurs forme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Translation :
         |1  0  xt |
    w= |0  1  yt |    (xy,yt) le pas de translation en x et y
         |0  0  1  |
    Donc chaque pixel p(x,y) de T est multiplié par W pour trouver ces nouvelles coordonnées dans l'image W(T).
    Ok. C'est donc une matrice de transformation 2D en coordonnées homogènes (x,y,s).

    Wx = 1*x + 0*y + xt = x + xt
    Wy = 0*x + 1*y + yt = y + yt
    Ws = 0*x + 0*y + 1 = 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                |dWx/dxt   dWx/dyt|
       dW       |                 |
    -------  =  |dWy/dxt   dWy/dyt|
    d(xt,yt)    |                 |
                |dWs/dxt   dWs/dyt|
    on calcule (ou on approxime) les termes de la matrice.

    Ici, c'est facile

    dWx/dxt = d(x + xt) / dxt = 1
    dWy/dxt = d(y + yt) / dxt = 0
    ...

    Ce qui nous donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                |1  0|
       dW       |    |
    -------  =  |0  1|
    d(xt,yt)    |    |
                |0  0|
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut
    Merci beaucoup pour ta réponse j'ai bien compris le jacobien

    Concernant la matrice hessienne maintenant le document que je lis donne une autre définition de la matrice hessienne (c'est pour cela que j'ai pensé à la première solution qui consiste à faire le carré de la dérivée) .

    Bref :
    dans Wikipedia : j'ai ça :
    En mathématiques, la matrice hessienne d'une fonction numérique f est la matrice carrée, notée H(f), de ses dérivées partielles secondes.
    Donc le calcul doit être comme tu m'as dis.

    Alors que dans le document que j'ai , la matrice hessienne est plutôt définie comme il est montré dans l'image attachée.
    et dans ce cas elle doit être (à mon avis) calculé par produit !!!

    Merci de voir l'image et me dis est ce que c'est la même définition de la matrice ou quoi exactement ?!

    je te remercie pour ton aide précieuse
    Images attachées Images attachées  

  8. #8
    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 info_amel Voir le message
    Alors que dans le document que j'ai , la matrice hessienne est plutôt définie comme il est montré dans l'image attachée.
    et dans ce cas elle doit être (à mon avis) calculé par produit !!!

    Merci de voir l'image et me dis est ce que c'est la même définition de la matrice ou quoi exactement ?!

    Hum... Ce qui est sûr c'est que la définition de wikipedia est bonne.

    Pour ta formule, je ne sais pas si elle donne, au final, le meme résultat que celle de wikipedia. Dans le doute, je prendrai les formules que je t'ai donné.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut
    peut tu s'il te plait jeter un coup d'œil sur l'image attachée ici :

    http://www.developpez.net/forums/d91...e-luca-tomasi/

    elle contient les étapes que j'ai entraine de suivre... Pour être sur si se qui est demandé de calculé est vraiment la matrice hessienne !!!

  10. #10
    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 info_amel Voir le message
    peut tu s'il te plait jeter un coup d'œil sur l'image attachée ici :

    http://www.developpez.net/forums/d91...e-luca-tomasi/

    elle contient les étapes que j'ai entraine de suivre... Pour être sur si se qui est demandé de calculé est vraiment la matrice hessienne !!!
    Dans le papier original, ce n'est pas la Hessienne mais le carré de la dérivée (et donc ta formule est bonne).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut
    mmm merci pour cette information. Mais le document que j'ai :
    http://grvc.us.es/staff/ferruz/maste...cas_kanade.pdf

    et même dans les site je trouve toujours que son nom est la matrice hessienne !!!!

    en tous les cas en rédigeant le rapport donc est ce que je note H comme matrice hessienne?!!! (juste ton avis)

  12. #12
    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 info_amel Voir le message
    mmm merci pour cette information. Mais le document que j'ai :
    http://grvc.us.es/staff/ferruz/maste...cas_kanade.pdf

    et même dans les site je trouve toujours que son nom est la matrice hessienne !!!!

    en tous les cas en rédigeant le rapport donc est ce que je note H comme matrice hessienne?!!! (juste ton avis)
    Tu peux la noter comme matrice hessienne "de Lucas Kanade". Parce que ce n'est ni la hessienne de l'image, ni celle de la transformation, mais d'un mélange des deux.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  13. #13
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Points : 82
    Points
    82
    Par défaut
    Merciiii bien pour tes réponses

    c'est résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] calculer nombre des 1 dans une matrice
    Par angel_tn dans le forum Images
    Réponses: 3
    Dernier message: 02/05/2010, 07h33
  2. Algorithme de calcul de l'inverse d'une matrice carrée (nxn)
    Par mobi_bil dans le forum Mathématiques
    Réponses: 5
    Dernier message: 19/03/2009, 23h53
  3. Calcul de différences locales dans une matrice
    Par S4sha dans le forum MATLAB
    Réponses: 8
    Dernier message: 25/09/2008, 15h39
  4. Calcul de la multiplication de deux matrices
    Par al_alias dans le forum Pascal
    Réponses: 2
    Dernier message: 30/05/2007, 22h37
  5. Calcul de la matrice Hessienne
    Par pseudocode dans le forum Traitement d'images
    Réponses: 15
    Dernier message: 02/05/2007, 18h18

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