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 :

comparaison deux images


Sujet :

Images

  1. #21
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    c'est bon j'ai trouvé !!!!
    La première fois que je trouve un truc lol
    Mais j'aurai très certainement besoin de votre aide très prochainement !!!!

  2. #22
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Me revoila
    Alors voila j'arrive à faire une régression linéaire en utilisant dans tools basic fitting
    mais j'aimerai pouvoir le coder comme ça en lançant mon programme ça se ferait directement
    j'essaie d'utiliser la fonction polyfit mais je n'arrive pas à avoir le même résultat qu'avec l'autre façon
    Sachant que ma fonction pour avoir une arete du billet s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    arete[];
    for l=1:haut_gauche(:,1)
       for c=1:haut_droit(:,2)
          if noirblanc(l,c)~=0
             arete=[arete;l c];
             break
          end
       end
    end
    je n'arrive pas à voir ce que je dois mettre comme arguments dans la fonction polyfit pour obtenir au final la pente de l'arete en question?
    vous auriez une idée?
    merci d'avance

  3. #23
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    j'ai trouvé merci, désolé de vous avoir dérangé

  4. #24
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    (Je crois que c'est ici que je dois m'adresser pour cette question)
    Alors voila j'essaie de superposer 2 billets presque identiques.
    J'avais une idée mais j'ai un petit problème de code (comme toujours )
    En prennant une partie de l'image commune aux deux billets (le cinq en haut à gauche) je pratique la méthode d'autocorrelation et j'obtiens les coordonnées des points ou se trouve le 5 en haut à gauche.
    Je fais ça pour les deux billets
    genre xbegin1= , xend1= ,ybegin1= yend =
    xbegin2= xend2= ybegin2= yend2=... et donc j'aimerai pour les superposer faire coïncider les coordonnées de la deuxième image avec celles de la première
    mais j'ai un problème de syntaxe comment je pourrais écrire ça( que le point qui a pour coordonnée xbegin2 doit en fait se trouver sur x begin1)?

  5. #25
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    C'est donc une translation que tu veux faire?

    Si oui, tu peux soit utiliser imtranslate de la boite à outils traitement image.

    ou faire toi-même la translation :
    Avec deux boucles imbriquées (si je me souviens bien tu préférais faire des boucles, mais sache que des solutions sans boucle sont possibles), tu devrais y arriver si tu connais le vecteur de translation (il suffit de décaler les affectations sur une nouvelle matrice image).

  6. #26
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    voila, pour soustraire mes deux billets avec précision on me conseille de faire une interpolation bilinéaire
    Citation Envoyé par ale2000 Voir le message
    voici la formule de l'interpolation bilinéaire :

    double dDifCol = Col - (int)Col;
    double dDifLin = Lin - (int)Lin;

    // 4 voisins
    int I00 = Image.getValue( (int)Col , (int)Lin );
    int I10 = Image.getValue( (int)Col+1 , (int)Lin );
    int I01 = Image.getValue( (int)Col , (int)Lin+1 );
    int I11 = Image.getValue( (int)Col+1 , (int)Lin+1 );

    // interpolation bilinéaire
    double value = (1-dDifCol)*(1-dDifLin)*I00 + dDifCol*(1-dDifLin)*I10 + (1-dDifCol)*dDifLin*I01 + dDifCol*dDifLin*I11;

    où :
    - Col correspond à la valeur (avec décimale) de la colonne de ton point recherché
    - Lin correspond à la valeur (avec décimale) de la ligne de ton point recherché
    Mais quand j'essaie de faire ça sur matlab on me dit pour la troisième ligne : is not a valid symbolic expression
    alors comment faire ???
    merci d'avance

  7. #27
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 896
    Points
    52 896
    Par défaut
    Faire de la programmation, ce n'est pas simplement mettre bout à bout des codes que l'on récupère sur des forums...

    Ce morceau de code qu'on t'a soumis dans le forum Algorihtme est écrit en C++... donc peu de chose à voir avec la syntaxe MATLAB

    Le plus important est de comprendre ce qu'est une interpolation bilinéaire... rien à voir avec la programmation, mais plutôt avec les mathématiques

  8. #28
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Alors en fait j'ai mal posé la question lol
    J'ai fait un peu de C++ à la fac donc je sais que int permet de prendre la partie entière, nous permet d'avoir un entier mais je ne sais pas comment prendre la partie entière en matlab
    je pense que la question a déjà été posée mais je trouve pas, je vais continuer à chercher dans le forum

  9. #29
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 896
    Points
    52 896

  10. #30
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    merci

  11. #31
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    bonjour, je dois soustraire mes deux images pour cela je fais:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    %comparer en niveaux de gris
    biller=imread('Billet.tif');
    >> billet=rgb2gray(biller);
    >> %binariser l'image
    m=size(billet,1);
    n=size(billet,2);
    for i=1:m
    for j=1:n
    if billet(i,j)>180
    noirblanc(i,j)=256;
    else
    noirblanc(i,j)=0;
    end
    end
    end
    >> figure;imshow(noirblanc)
    %trouver les pixels blancs
    [e,d]=find(noirblanc>180);
    hold on
     
    idx = d==min(d);
    sommet1 = [e(idx) d(idx)];
    haut_gauche = sommet1(sommet1(:,1)==min(sommet1(:,1)),:);
    plot(haut_gauche(:,2),haut_gauche(:,1),'g>')
     
    idx=d==max(d);
    sommet2 = [e(idx) d(idx)];
    bas_droit = sommet2(sommet2(:,1)==max(sommet2(:,1)),:);
    plot(bas_droit(:,2),bas_droit(:,1),'y>');
     
    billet([1:(haut_gauche(1)-1) (bas_droit(1)+1):end],:)=[];
    >> billet(:,[1:(haut_gauche(2)-1) (bas_droit(2)+1):end])=[];
    >> figure,imshow(billet)
     
    %image tordue
    billet2=imread('billet2.tif');
    >> billet2=rgb2gray(billet2);
    >> %Binariser l'image
    m=size(billet2,1);
    n=size(billet2,2);
    for i=1:m
    for j=1:n
    if billet2(i,j)>180
    noirblanc2(i,j)=256;
    else
    noirblanc2(i,j)=0;
    end
    end
    end
    >> %trouver les pixels blancs
    [e,d]=find(noirblanc2>180);
    bord_haut2=[];for c =1:size(noirblanc2,2)
    for r=1:size(noirblanc2,1)
    if noirblanc2(r,c)~=0
    bord_haut2=[bord_haut2;r c];
    break
    end
    end
    end
    figure;imshow(noirblanc2)
    hold on
    plot(bord_haut2(:,2),bord_haut2(:,1),'r*')
    idx = e==min(e);
    sommet2 = [e(idx) d(idx)];
     
    haut_droit2 = sommet2(sommet2(:,2)==max(sommet2(:,2)),:);
    plot(haut_droit2(:,2),haut_droit2(:,1),'b>')
    idx = d==min(d);
    sommet1 = [e(idx) d(idx)];
    haut_gauche2 = sommet1(sommet1(:,1)==min(sommet1(:,1)),:);
    plot(haut_gauche2(:,2),haut_gauche2(:,1),'g>')
     
    arete2=[];for l=1:haut_gauche2(:,1)
    for c=1:haut_droit2(:,2)
    if noirblanc2(l,c)~=0
    arete2=[arete2;l c];
    break
    end
    end
    end
    plot(arete2(:,2),arete2(:,1),'g+')
     
    hold off
    plot(arete2(:,2),arete2(:,1),'g+')
    p=polyfit(arete2(:,2),arete2(:,1),1);
     
    %intersection avec l'axe des abscisses
    %quand y=0
    equation=p(1)*arete2(:,2)+p(2);
     
    alpha=atan(p(2)/(-p(2)/p(1)))*180/pi
    image=imrotate(billet2,-alpha);
    >> figure;imshow(image)
    %définir le sommet en haut à gauche et le sommet en bas à droite
    [e,d]=find(image>180);
    idx = d==min(d);
    sommet1 = [e(idx) d(idx)];
    haut_gauche2 = sommet1(sommet1(:,1)==min(sommet1(:,1)),:);
    idx=d==max(d);
    sommet3 = [e(idx) d(idx)];
    bas_droit2 = sommet3(sommet3(:,1)==max(sommet3(:,1)),:);
    figure;imshow(image)
    hold on
    plot(bas_droit2(:,2),bas_droit2(:,1),'y>');
    plot(haut_gauche2(:,2),haut_gauche2(:,1),'g>');
     
    image([1:(haut_gauche2(1)-1) (bas_droit2(1)+1):end],:)=[];
    image(:,[1:(haut_gauche2(2)-1) (bas_droit2(2)+1):end])=[];
    >> figure;imshow(image)
     
    un=[size(billet,1) size(billet,2)]
     
     
     
    >> for i=1:size(billet,1)
    for j=1:size(billet,2)
    if i<size(image,1)
    un(i,j)=image(i,j);
    else
    un(i,j)=256;
    end
    end
    end
     
    g=imsubtract(billet,uint8(un));
    >> figure;imshow(g);
    Je voulais poster le résultat mais l'image est trop grande
    Le problème c'est qu'il s'agit du même billet donc quand je soustrais je devrais avoir une image complètement noire ou presque mais ce n'est pas le cas
    Vous auriez une idée pour avoir un meilleur résultat?

  12. #32
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 4
    Points
    4
    Par défaut
    Bonjour,en fait j'essaie toujours d'améliorer mon programme.
    Donc pour ça je prends mon billet d'origine, je le fais tourner de 30° avec la fonction imrotate et après de -30° pour qu'il retrouve sa position initiale.
    Après je soustrais le billet du départ avec celui qui a subit une double rotation et je devrais avoir une image complètement noire, néanmoins ce n'est pas le cas on voit qu'il y a un léger décalage.
    Auriez vous une idée? utiliser autre chose que imrotate (mais quoi) ou améliorer le résultat pour que j'ai vraiment un fond noir???

  13. #33
    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
    Points : 7 614
    Points
    7 614
    Par défaut
    imrotate effectue une interpolation de l'image, ce qui est normale, si tu tournes une images, tu te rends bien comptes que certains pixels doivent être interpolés...

    Mais si tu as bien recadré ton image, l'erreur entre l'image reconstruite et l'image originale ne devrait pas être très grande... peux-tu mettre ton code?

  14. #34
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 896
    Points
    52 896
    Par défaut
    D'où peut être l'intérêt de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    abs(image1-image2)<seuil)==0
    plutôt que

    Mais encore une fois je le répète, le problème n'est pas simple car les données de départ ne me semble guères reproductibles...

    A la rigueur si les deux billets à comparer sont neufs ou si le second est une image test obtenue en "déformant" l'image du premier billet.

    Donc les opération de soustractions ne me semblent pas très robustes ici...

Discussions similaires

  1. Matrice de cooccurrences pour la comparaison de deux images
    Par bilzzbenzbilz dans le forum Traitement d'images
    Réponses: 28
    Dernier message: 01/07/2017, 16h12
  2. comparaison entre deux images
    Par gash59 dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/03/2008, 20h05
  3. comparaison deux images
    Par nicolovitch dans le forum Windows
    Réponses: 3
    Dernier message: 27/04/2007, 17h25
  4. [GD] Comparaison de deux images
    Par jack_1981 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/04/2007, 16h03
  5. Réponses: 10
    Dernier message: 30/06/2005, 12h20

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