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 :

Interpolation d'un champ sur image


Sujet :

Images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Par défaut Interpolation d'un champ sur image
    Salut à tous,

    Je vous expose mon soucis.

    En fait, j'ai à ma disposition une image sur laquelle je trace un champ de déplacement (avec scatter ) de taille 3897x5950.

    J'ai une autre image, plus ancienne de moins bonne résolution où je trace un nouveau champ de déplacement de la mm manière.

    Je veux en fait comparer ces deux champs de déplacement, pour cela j'ai penser à interpoler le champ de déplacement de l'image de meilleures résolution à l'image de moins bonne résolution en utilisant interp2, grâce à la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZI = interp2(X,Y,Z,XI,YI).
    Cependant j'ai vraiment du mal à comprendre cette fonction. Si j'ai bien compris la doc on interpole les valeurs de Z de coordonnées X, Y aux coordonnées Xi Yi. De plus, J'ai vraiment du mal à adapter la fonction à mon cas en regardant la doc.

    Dans X et Y en gros je rentre les coordonnées de mon champ de déplacement ?
    et en XI, YI un vecteur tel que : Xi=1:nombre de ligne de l'image de moins bonne qualité, et Yi=1:nombre de colonnes de l'image de moins bonne qualité ?

    A ma disposition j'ai un fichier pour les deux images avec :

    -1ère colonne : position en x
    -2ème colonne : position en y
    -3ème colonne : intensité du déplacement

    Pourriez-vous m'éclairer sur l'utilisation de interp2 ? Est-ce une bonne méthode ?

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    il me semble que tu as compris l'utilisation de interp2, j'ai juste un doute sur un point : les coordonnées x et y de tes champs de déplacement correspondent aux lignes et aux colonnes de tes images? Si c'est le cas, ça devrait marcher, sinon, il faut faire attention à faire correspondre X et Y (qui proviennent d'un champ de déplacement) d'un côté et Xi et Yi de l'autre (qui proviennent d'une image).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Par défaut
    Ok alors j'ai tenté de faire cela mais bon :plantage.

    En fait, je n'ai pas bien précisé mais mes x,y sont les adresses des pixels de mon intensité de champ de déplacement de l'images. Il commence à 64 bit en x et y et finissent à max(x)-64 et max(y)-64.

    J'ai donc tenter la commande suivante :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    %rééchantillonage de l'image aux dimensions du couple précédent
    im=imread('572854_3915509_1.TIF');
    figure
    image(im)
    m1=load('572854_3915509.out');
    x1=m1(:,1);%adresse de mon champ de déplacement en x
    y1=m1(:,2);%adresse de mon champ de déplacement en y
    intens=m1(:,3);%intensité du champ
    for i=1:length(x1)
     
        if intens(i)>=20
            intens(i)=0.001;
        elseif intens(i)==0,
            intens(i)=0.001;
        end
    intens(i)=intens(i)*15;
     
    end
     
    hold on
    c=scatter(x1,y1,60,intens,'filled')%tracé du champ de déplacement sur %l'image
     
    im2=imread('592730_39030387778_1.TIF');%image de moins bonne qualité
    figure
    im2 = ind2rgb(im2,gray(256));
    image(im2)
    m2=load('592730_39030387778.out');%fichier contenant l'info sur le champ %de déplacement de moins bonne qualité
    x2=m2(:,1);%adresse du champ de déplacement de moins bonne qualité en x
    y2=m2(:,2);%adresse du champ de déplacement en y 
    intens2=m2(:,3);%intensité du champ de déplacement de la 2e image, ne sert à rien ici
    for i=1:length(x2)
     
        if intens2(i)>=20
            intens2(i)=0.001;
        elseif intens2(i)==0,
            intens2(i)=0.001;
        end
    intens2(i)=intens2(i)*15;
     
    end
    hold on
    c=scatter(x2,y2,60,intens2,'filled')%c'est juste à titre indicatif
     
    m=interp2(x2,y2,intens,x1,y1)%interpolation de mon champ de bonne qualité aux coordonnées de l'image de moins bonne qualité
    Avec x2 y2 l'adresse du champ de déplacement de mon image de moins qualité, x1 y1 l'adresse du champ de déplacement de meilleure qualité.

    Mais bon évidement ça renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Error using griddedInterpolant
    The grid vectors are not strictly monotonic increasing.
     
    Error in interp2/makegriddedinterp (line 220)
            F = griddedInterpolant(varargin{:});
     
    Error in interp2 (line 125)
           F = makegriddedinterp({X, Y}, V, method);
     
    Error in reech (line 46)
    m=interp2(x2,y2,intens,x1,y1)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Par défaut
    du coup j'ai essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    m=interp2(64:4944,64:5444,intens,64:904,64:1414)
    Et evidement j'ai :

    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
     
     
    52.0016
     
    Error using griddedInterpolant
    The grid vectors do not define a grid of points that match the given values.
     
    Error in interp2/makegriddedinterp (line 220)
            F = griddedInterpolant(varargin{:});
     
    Error in interp2 (line 125)
           F = makegriddedinterp({X, Y}, V, method);
     
    Error in reech (line 46)
    m=interp2(64:4944,64:5444,intens,64:904,64:1414)

    Je pense que du coup c'est parce que mes valeurs de intens ne correspondent pas aux coordonnées non ?

    en fait mon fichier .out est de cette forme :

    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
     
     
    764 4904 3.761000e+01 -4.164400e+01 1.500000e-02
    784 4684 -4.480000e-01 -1.980000e-01 7.347061e+00
    784 4704 -3.900000e-01 -9.520000e-01 1.543181e+01
    784 4784 -1.907600e+01 -7.039000e+00 1.500000e-02
    784 4804 0 0 1.500000e-02
    784 4824 -3.287000e+00 1.048700e+01 1.648510e+02
    784 4884 -3.984100e+01 1.703400e+01 1.500000e-02
    784 4924 3.521100e+01 -4.106000e+01 1.500000e-02
    784 4964 3.347500e+01 -8.385000e+00 1.500000e-02
    784 4984 3.376300e+01 -1.385300e+01 1.500000e-02
    804 4164 -8.780000e-01 -2.003300e+01 1.500000e-02
    804 4184 2.062000e+00 5.440000e-01 3.198829e+01
    804 4704 -1.960000e-01 -1.900000e-01 4.094643e+00
    804 4724 4.670000e-01 1.429000e+00 2.255059e+01
    804 4744 2.790000e-01 1.549000e+00 2.360888e+01
    804 4764 4.180000e-01 6.976000e+00 1.048277e+02
    804 4784 -7.060000e-01 6.310000e-01 1.420332e+01
    804 4824 -9.525000e+00 1.469500e+01 2.626794e+02

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Alors j'ai dis une betise : tu ne peux pas faire ainsi puisque les coordonnées de la première image ne correspondent pas aux coordonnées de la deuxième image. Tu dois connnaitre la relation qui permet de passer de l'une à l'autre, il faut donc convertir les coordonnées de ton premier champs. Par exemple, si je reprends ta ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m=interp2(64:4944,64:5444,intens,64:904,64:1414)
    Est-ce que le x1=64 de la première image correspond au x2=64 de la deuxième et x1=4944 correspond à x2=904?

    Si tes données ne sont pas réparties sur une grille régulière, utilise plutôt la fonction griddata.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 160
    Par défaut
    Oui cela correspond.

    Cependant par exemple la valeur de intens est associ1ée aux valeurs que prennent x1 y1 si j'ai bien compris ?
    Car dans ce cas ce n'est pas bon. Car mon vecteur intens est rangé comme dans le message précédent et les valeurs de y1 viennent dans le désordre. Enfin si je comprend bien...

Discussions similaires

  1. Interpolation bilinéaire sur image
    Par ZouBi dans le forum Général Java
    Réponses: 0
    Dernier message: 17/06/2012, 04h28
  2. gestion image liée avec champ sur fenetre
    Par obelix1951 dans le forum WinDev
    Réponses: 2
    Dernier message: 07/04/2010, 16h53
  3. texte sur image grace a un champ texte
    Par groskanel dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/05/2009, 13h20
  4. on focus sur un champ text+ image
    Par lucky31 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 12/05/2008, 12h23
  5. zoom sur image de formulaire
    Par bourvil dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/10/2003, 09h25

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