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

Images Discussion :

Correction géometrique d'une image LandSat


Sujet :

Images

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Correction géometrique d'une image LandSat
    Salut à tous;

    j'ai un projet dans le domaine de la télédétection des images satellites. au cours de mes recherches , je me suis confronté à un problème: corriger les images. j'ai rien pu faire. moi je voudrais faire la correction géométrique des images Landsat, voir pièce jointes.

    Pourriez-vous m'aider, merci d'avance
    Images attachées Images attachées  

  2. #2
    Membre régulier Avatar de DocteurV
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Points : 101
    Points
    101
    Par défaut
    Bonjour Nejilover,

    C'est un problème assez classique qui se résout rapidement :
    Tes deux images sont liées par une transformation géométrique appelée "homographie" qui peut être représentée par une matrice 3x3.. appelons cette matrice H.
    Cette matrice permet d'obtenir les coordonnées d'un point dans l'image rectifiée (appelons ce triplet de coordonnées B) à partir des coordonnées de ce point dans l'image d'origine déformée (appelons ce triplet de coordonnées A).

    Ainsi A*H = B
    avec A = [x1,y1,z1 ; x2,y2,z2; ...] les coordonnées des pixels dans l'image d'origine (zi=1)
    H = [h11 h12 h13 ; h21 h22 h23 ; h31 h32 h33] la matrice d'homographie
    et B = [u1 v1 w1 ; u2 v2 w2 ; ... ] les coordonnées des mêmes pixels dans l'image rectifiée (wi=1 aussi).

    Bien que H comprenne 9 éléments, ce système ne comprends que 4 degrés de liberté. Il te suffit donc de 4 équations pour déterminer une solution approchée de l'équation A*H=B.
    On va naturellement s'intéresser aux quatre coins de l'image.

    La première étape consiste donc à repérer les coins dans l'image déformée, par la méthode de ton choix. Je suppose pour la suite qu'on connait les coordonnées des quatre coins. Ces coordonnées sont dans A.
    La matrice B correspond aux coordonnées de ces quatre coins dans l'image rectifiée. Si tu cherches à redresser l'image, ces coordonnées sont les 'vrais' coins de l'image : (1,1,1), (1,nb col,1) , (nb_lig, nb_col,1), (nb_lig,1,1).

    Tu peux maintenant résoudre ton système par la méthode de la pseudo-inverse : H = inv(A'*A)*A'*B.

    C'est presque fini : tu connais H et tu veux reconstruire ton image. Il te faut alors considérer la transformée inverse de H (donnée par inv(H)) et pour chaque pixel de ton image reconstruite, tu vas chercher les coordonnées du pixel correspondant dans l'image originale déformée. Tu n'as plus qu'à affecter la valeur de ce pixel au pixel de ta nouvelle image.

    Et voilà !!

    le code matlab ci-dessous (vite-fait, avec des boucles... je sais c'est pas beau ) réalise ce travail sur l'image que j'ai attachée à ce message.

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    % On ouvre l'image en niveaux de gris
    I = imread('homographie.jpg');
    I = I(:,:,1);
    % On initialise la matrice résultat
    I2 = zeros(size(I));
     
    % Coins de l'image (déterminés à la main) dans l'original
    A = [13 13 1; 19 100 1; 108 88 1; 99 -2 1];
    % Coins de l'image rectifiée
    B = [1 1 1; 1  size(I2,2) 1; size(I2,1), size(I2,2) 1; size(I2,1), 1 1];
     
    % On estime la matrice d'homographie
    H = inv(A'*A)*A'*B;
    % On considère la transformée inverse
    inv_H = inv(H);
     
    % On remplit l'image rectifiée avec les bons pixels de l'image d'origine
    for x = 1: size(I2,1)
        for y = 1:size(I2,2)
            uv = max(round([x,y,1] * inv_H),1); 
            u = uv(1); v=uv(2);
            %le max(...,1) c'est pour éviter les coordonnées nulles.
            I2(x,y) = I(u,v);
        end
    end
     
    %On affiche le résultat
    figure; 
    subplot(1,2,1);
    imshow(I);
    subplot(1,2,2);
    imshow(uint8(I2));
    Images attachées Images attachées  

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut homographie
    Merci docteurV pour votre réponse, mais sa ne marche pas avec l'image que j'ai déjà!
    Je veux savoir lorsque je fais cette opération sur l'image, est ce que les informations restent elles- même ou il y a une probabilité qu'elles sont perdues? Sachant que j'ai grand besoin de ces informations pour les extraire après.

    J’ai des image 8561x7657 de 60 méga de taille.
    Autre chose, comment calculer les coins d'image? J'ai essayer avec impixelinfo

  4. #4
    Membre régulier Avatar de DocteurV
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 85
    Points : 101
    Points
    101
    Par défaut
    La solution que je t'ai fournie embarque "en dur" les coordonnées des coins de l'image déformée que tu nous avait envoyée. Nécessairement, cela fonctionne uniquement avec cette image.
    j'ai mis en PJ le résultat que j'obtiens.

    En revanche, tu dois, pour chaque nouvelle image, déterminer la position des coins de l'image... soit à la main, soit automatiquement en implémentant une méthode de ton choix, soit en dur si les coins sont toujours au même endroit. Là c'est à toi de voir en fonction de tes contraintes et de la variabilité de tes images.
    Images attachées Images attachées  

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut homographie
    Mon problème est résolu
    je vous remerci infiniment chèr DocteurV pour votre aide!!! c très gentil

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

Discussions similaires

  1. Correction de biais d'intensité dans une image
    Par velkouby dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 18/01/2008, 11h46
  2. redimensionnement d'une image, mais pas placée correctement
    Par maxfive7 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 19/08/2007, 23h39
  3. Affichage non correct d'une image
    Par AnonCoder dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2006, 13h51
  4. Réponses: 8
    Dernier message: 30/08/2006, 14h22
  5. Correction de rotation(en Z) dans une image 2D
    Par syn_42 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 05/04/2006, 15h58

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