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

Algorithmes et structures de données Discussion :

Comment ça marche un Photostitch ?


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    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
    Par défaut Comment ça marche un Photostitch ?
    Bonjour,
    Je tiens avant tout à signaler que ce que je recherche n'est pas une version piratée de logiciels tels que Photostitcher, mais je veux juste connaître le principe que les développeurs ont utilisé.

    En fait pour mon stage en Labo, je dois à partir d'images du sol filmées par un drone pour recomposer une carte... Le but est donc de recoller les morceaux d'images entre elles (et au bon endroit, d'où toute la difficulté).
    C'est pour ça que j'ai pensé à ce que l'on faisait en photo numérique avec les logiciels qui créent un panorama avec des images photos séparées...

    Donc ce que je voudrais savoir, c'est comment ce genre de programme est fait, quelle est la technique utilisée (par exemple on correlle les images ensemble : on passe dans Fourier avant de correler : )

    Et si en plus il y a un logiciel de ce genre en Open Source, alors là ce serait vraiment idéal....

    Voilà, donc si quelqu'un connaît la réponse à ce délicat problème, je le remercie d'avance (les autres aussi d'ailleurs).

  2. #2
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Tu cherche une methode pour recaler tes images les unes aux autres je me souviens d'une methode?

    -> (1) tu considere qu'il y a une bande commune entre tes deux images
    -> (2) tu cherche le deplacement entre ces deux bandes (translation(a) = b)* puis tu applique ce deplacement à b

    *il existe une multitude de methode pour trouver le deplacement ici tu peux soit:
    -> chercher à maximiser une fonction de similarité (minimiser une fonction de dissimilarité) tel que la correlation
    ou l'entropie des differences ou encore l'information mutuelle

    -> tu utiliser une methode basé sur la transformée de fourier:
    exemple en 1D:
    Tinv{ T{ f(a+t) } / T{ f(t) } } = dirac(a+t) avec T la transformée de fourier et Tinv la transformée inverse et a le décalage

    -> ou encore les methodes par point d'interet....

    Bonne chance c'est tres vaste comme sujet

  3. #3
    Membre chevronné
    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
    Par défaut
    Tout d'abord merci de m'avoir répondu.

    Pourrais-tu me préciser les méthodes de point par intérêt et la méthode de Fourier ?

    Merci d'avance.

  4. #4
    Membre chevronné
    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
    Par défaut
    Je précise:

    Citation Envoyé par ronan99999

    -> tu utiliser une methode basé sur la transformée de fourier:
    exemple en 1D:
    Tinv{ T{ f(a+t) } / T{ f(t) } } = dirac(a+t) avec T la transformée de fourier et Tinv la transformée inverse et a le décalage
    - f c'est quoi ? C'est la fonction liée à l'image, la fonction de transformation de l'image ...?

    - si j'ai bien compris, on cherche le a tel que Tinv{ T{ f(a+t) } / T{ f(t) } } = dirac(a+t) ?

  5. #5
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Rebonjour:

    pour Fourier (f) represente un signal (a) le décalage
    soit (I) ton image de départ et (I') ( en theorie proche l'image de départ I(x+Vx,y+Vy) = I'(x,y) ) celle déplacée.

    On a l'églité suivante: Tinv{ T{I'} / T{I} } = Dirac(x+vx,y+vy)
    (bon comme y a du bruit additionnel provenat de la capture ton dirac il est pas aussi jolie que prévue donc je pense que trouver son maximum est suffisant )
    ArgMax(Dirac(x+vx,y+vy)) = {(-vx,-vy)}

    ---> avantage methode directe deterministe mais couteuse

    Methode par point d'interet:

    pour caractériser tes points tu peux utiliser soit un detecteur de coint ou un detecteur de contour (canny deriche harris etc..) on va noter l'operateur PI: R² -> R²

    I1 = PI(I)
    I'1 = PI(I')

    tu calcule la carte des distances sur I'1 (par exemple carte de chamfrein) tu reportes les points de I1 dans I'1 tu sais alors la position relative des points d'interet de I'1 par rapport à ceux de I1
    tu appareilles* chaque points de I'1 avec un celui qui est le plus proche provenant de I1 (tu le sais grace a la carte calculée)
    tu obtient autant de couple de point que de vecteur de translation (P de I1 et P' de I'1 tu as V = P - P' ) en suite tu fais une moyenne et tu obtiens un vecteur de translation

    --> Je sais ce n'est pas facile à comprendre enplus je dois contammentr intervertir l'image déplacé de l'image de départ, avec des schémas ce serait plus simple mais j'ai pas beaucoup de temps

  6. #6
    Membre chevronné
    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
    Par défaut
    Non non rassure toi c'est relativement clair....
    Et est-il possible par la méthode que tu proposes (contours + détermination de vecteurs) de l'affiner pour prendre en compte les rotations des images ?
    En effet, si je te suis, par les vecteurs on obtient la translation moyenne qui a été effectuée...
    J'imagine que ça doit être aussi possible de déterminer la rotation.
    Mais si tu n'as pas le temps, ne te fatigue pas, je rechercherai de mon côté, tu m'as déjà bien aidé... :o
    Merci encore !

  7. #7
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Si on revient à l'étape juste avant de faire ta moyenne de vecteur tu obtient n couple de point il alors possible de trouver une transformation entre tes point de I' et de I:
    avec un couple tu peux trouver une translation avec 2 tu peux trouver une rotation plus un translation

    A = [alpha beta Vx]
    -----[beta -alpha Vy]
    -----[0 0 1]

    Matrice de translation plus rotation (changement de repere)

    en coordonnées homogéne P un point de I et P' un point de I' correspondant:
    [P',1] = A*[P,1] -> P' = Rotation(P) + V

    tu as quatre inconnues alpha = cos(angle) et beta = sin(angle) (et ça j'en suis plus sure parceque les matrices rotation c'est loin maintenant) et les coordonnées du vecteur de translation.
    vu le nombre de couple que tu obtiens ton probleme est sousdimensionné tu peux utiliser une (pseudo) inverse pour le resoudre avec 3 couples par exemple (ou plus)


    [P'1,P'2,P'3] = A*[P1,P2,P3]
    ---->[P'1,P'2,P'3]*[P1,P2,P3]^-1 = A
    tu obiens les coefficient de ta matrice

  8. #8
    Membre chevronné
    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
    Par défaut
    Ok merci beaucoup!
    J'essaye ça, le temps d'implémenter tout ça !!!

  9. #9
    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 Recalage image par transformee de Fourier
    Bonjour
    J'ai bien lu vos messages.. et ca m'a l'air tres serieux..
    dans le cadre de mon stage je dois recaler des images en utilisant les transformees de fourier..
    j'aimerais bien comprendre comment ca marche avec cette methode..
    car dans les deux images il y a plusieurs sources (points lumineux "etoiles")..
    Faut-il trouver les trasnformees de fourier de tous ces points.. ou bien juste qlq'uns?

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

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/02/2004, 21h39
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

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