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 :

Analyse d'empreinte digitale


Sujet :

Images

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut Analyse d'empreinte digitale
    Bonjour
    Alors, avant d'exposer mon problème, je vous explique un peu le but de la manip. En effet, mon projet consiste à analyser et comparer des empreintes digitales en utilisant les minuties et en se basant sur une base de données, l'empreinte étant acquise par le capteur. Mon programe doit alors comparer l'empreinte du capteur à ma base de données.
    Maintenant les détails :

    Procédure : image de début qu'on va appeller IM.
    - application du filtre de gabor pour ameliorer l'empreinte et supprimer le bruit.
    Fonctionnement du filtre : le filtre procède par rotation sur l'image à travers ce bout de code :
    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
    N = 3;
    for k = 0:N
        phi_k=k*pi/4;
        R1=X.*cos(phi_k)+Y.*sin(phi_k);  
        R2=-X.*sin(phi_k)+Y.*cos(phi_k);    
        switch k
            case 0, Zx=exp(-0.5.*(((R1.^2)./(sx.^2))+((R2.^2)./(sy.^2)))).*cos(2.*pi.*u.*R1);    %permet de tourner
                    res1 = real(filter2(Zx,imah,'same'));
            case 1, Zx=exp(-0.5.*(((R1.^2)./(sx.^2))+((R2.^2)./(sy.^2)))).*cos(2.*pi.*u.*R1);    %en ayant quatre matrice
                    res2 = real(filter2(Zx,imah,'same'));            
            case 2, Zx=exp(-0.5.*(((R1.^2)./(sx.^2))+((R2.^2)./(sy.^2)))).*cos(2.*pi.*u.*R1);    %distinctes pour les sauver
                    res3 = real(filter2(Zx,imah,'same'));
            case 3, Zx=exp(-0.5.*(((R1.^2)./(sx.^2))+((R2.^2)./(sy.^2)))).*cos(2.*pi.*u.*R1);   
                    res4 = real(filter2(Zx,imah,'same'));
        end    
     
    end
    J'obtient alors 4 images :



    En effet, ces images ont été binarisées en appellant une fonction binarisation et en exécutant le code qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a=binarisation(res1),
    b=binarisation(res2),
    c=binarisation(res3),
    d=binarisation(res4),
    Alors moyennant tout ceci, ce que je désire avoir c'est superposer ces 4 images pour n'en avoir qu'une seule parfaite en agissant au niveaux des matrices a, b, c, d. J'ai essayé les fonctions logiques OR et | mais ça donne des petits points.
    Ma question est : comment faire pour avoir cette belle image ???

  2. #2
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut images BW
    Bonjours,

    D'aprés de ce que j'ai compris, tu veux superposer les 4 images qui sont de type BW (logique) malgrés qu'elles sont en rotation l'une par rapport à l'autre.
    les empreintes sont en noire (0 logique) donc je pense que pour les superposer, tu doit utiliser l'opération logique AND.

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut reponse
    non j'ai essayé ca donne une image blanche ...

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Ce que tu peux essaye de faire c'est prendre le problème a l'envers.
    Si j'ai bien compris tu veux supperposer toutes les aires noires dans une seule image.

    ca veut dire que pour 2 images si tu as:
    Black='1', White='0'
    (C'est peut etre l'inverse pour le blanc et le noir, a confirmer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Im1  Im2  Resultat
    0      0         0
    0      1         1
    1      0         1
    1      1         1
    ce qu'il faut que tu code c'est le fait que lorsque sur les 2 images tu as du blanc ('0') ton image résultante sera recevra '0'.

    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for x=1:AbscisseMax
       for y=1:OrdonnéeMax
          if ((Im1(y,x)==0) && (Im2(y,x)==0))
              Reslutat(y,x)=0;
          else
              Resultat(y,x)=1;
          end
       end
    end
    Je pense que ceci doit fonctionner.
    Tu n'as plus qu'a l'étendre a tes 4 images dans une double boucle for qui va balayer tous tes pixels.

    Mais ca m'étonne qu'avec le ou || ca n'ai pas fonctionné. Tu as peut etre fait une erreur dans ton code.

    J'espère avoir pu t'aider.

    Bye
    Thomas

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut reponse
    j'ai essayé aussi la boucle imbriqué mais matlab se lance dans des calculs jusqu'a ce qu'il plante

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    c'est a dire?
    Peux-tu mettre le message d'erreur?
    C'est peut etre tout simplement un problème d'indice de x et y.
    Essaye de faire un size de ton image et de définir les valeur en x et en y comme valeur max d'incrémentation de tes boucles.

    [OrdonnéeMax,AbscisseMax]=size(mon image);

    bye

  7. #7
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    et si tu essaie un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = ~(~a || ~b || ~c || ~d)
    C'est a dire que tu commences par inverser tes images pour avoir la structure qui vaut 1, tu prends l'union de tous les vrais, et tu inverses.
    C'est ce que voulais faire totoc1001 avec le code, mais je pense qu'on peut y arriver directement.

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Oui, je pense que ca revient au même, mais si tu ne passe pas par la boucle for, tu dois même pouvoir simplifier ton équation qui est: (' représente le complément est équivalent à ~; + ==> Or; . ==> And)

    res=(a' + b' + c' + d')' ==> res = a . b . c . d (théorème de De Morgan )

    J'aurais une question, est ce que cette technique pourrait fonctionner avec des matrices de tailles différentes? (j'ai pas trop l'habitude de pas passer par les boucles , mais ta méthode est beaucoup plus rapide )

    THomas

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut reponse
    j'ai essayé le
    res=(a' + b' + c' + d')' mais ca donne le meme resultat que si je met le or c'est à dire les petits points ce qui est tout a fait normal puisqu'il ajoute les mauvaises parties de l'image au bon donc en fin de compte on aura que du bruit alors moi j'ai pensé à la correlation mais comment on peut est ce qu'on peut creer une matrice qui verifie chaque bout de l'image en effet mon but en ce moment c'est de mettre les parties "bruitée" de l'image a 0 de facon a avoir que du blanc sur ces parties et aprés ajouter l'autre image avec un simple OR mais comment realiser ceci

  10. #10
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Bonjour,

    Seulement je veux d'abord savoir si tes images sont de types BW.
    si c'est le cas je ne comprends pas pourquoi tu as utiliser " res=(a'+b'+c'+d')' "
    et aussi il faut mettre en tête que pour une image BW, le noir =0 et le blanc=1, donc je pense que le bruit que tu veux éliminer est noire (donc 0), et donc tu doit le mettre à 1 (blanc).
    Une autre chose que je n'ai pas compris, est ce que tu vas superposer les 4 images telles quelles, ou bien tu les remettra en même orientation?
    Je te demande si tu peux poster les matrice a,b,c et d, tu peux les sauvgarder dans un fichier (.mat) et le poster en piece jointe afin d'essayer une solution

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut reponse
    alors oui mes images sont binarisés chaque matrice représente une figure(ceux que j'ai donné au début) pour ce qui est de la superposition oui je regarde mes images telle que au niveau de la rotation mais je dois mettre le bruit a 1 (blanc) et superposer a travers un or(ci joint : les 4 matrices formant les figures que j'ai donné precedement)
    Fichiers attachés Fichiers attachés

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    J'ai pas du bien comprendre, ton image est binaire ou pas (car j'ai utilisé les formules données précedemment et ca a l'air de fonctionner)?
    Si elle n'est pas binaire voici la méthode que tu peux appliquer.
    Il te suffit d'appliquer un threshold sur ton image, cad, une limite.
    Par exemple, si ton intensité dans ton image est supérieure a ton threshold (125 par exemple), alors tu mets 1 dans ta nouvelle image identité, sinon tu mets 0.
    Et tu fais ca pour tes 4 images.

    (Attention aux dimensions de mes matrices j'ai du utiliser photoshop pour les récupérer, donc ca ne fonctionnera pas comme ca, tu dois mettre les bonnes dimensions.)

    Voici mon code, il n'est pas très optimisé, mais il fonctionne (enfin j'espère)
    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
     
    function Emp
    %Lecture des 4 images
        a=imread('D:\Cours\Ecosse5th\5thYear\Projet\Software\Matlab\Empreintes\Emp1.jpg');
        b=imread('D:\Cours\Ecosse5th\5thYear\Projet\Software\Matlab\Empreintes\Emp2.jpg');
        c=imread('D:\Cours\Ecosse5th\5thYear\Projet\Software\Matlab\Empreintes\Emp3.jpg');
        d=imread('D:\Cours\Ecosse5th\5thYear\Projet\Software\Matlab\Empreintes\Emp4.jpg');
     
        %préallocation de l'espace mémoire des nouvelles images
         NewA=zeros(194,193);
         NewB=zeros(194,193);
         NewC=zeros(194,193);
         NewD=zeros(194,193);
     
        %Threshold et création des nouvelles images binaires
        for y=1:194
            for x=1:193
                if(a(y,x)>125)
                    NewA(y,x)=1;
                else
                    NewA(y,x)=0;
                end
                if(b(y,x)>125)
                    NewB(y,x)=1;
                else
                    NewB(y,x)=0;
                end
                if(c(y,x)>125)
                    NewC(y,x)=1;
                else
                    NewC(y,x)=0;
                end
                if(d(y,x)>125)
                    NewD(y,x)=1;
                else
                    NewD(y,x)=0;
                end
            end
        end
     
        figure(2)
        colormap('gray');
        subplot(4,2,1);
        imshow(a);
        subplot(4,2,2);
        imshow(NewA);
        subplot(4,2,3);
        imshow(b);
        subplot(4,2,4);
        imshow(NewB);
        subplot(4,2,5);
        imshow(c);
        subplot(4,2,6);
        imshow(NewC);
        subplot(4,2,7);
        imshow(d);
        subplot(4,2,8);
        imshow(NewD);
     
        %Superposer les 4 images
        res = NewA & NewB & NewC & NewD;
     
        figure(3)
        colormap('gray');
        imshow(res);
    end
    Et voici les images obtenues:
    Les images avant et apres le threshold (avant a gauche)


    le résultat obtenu après la fusion des 4 images binaires


    Tu peux moduler ton image en modifiant la valeur du threshold, si tu mets 10 au lieu de 120, ton image sera beaucoup plus blanche, si tu mets 250, celle-ci sera plus noire
    J'espère avoir pu aider.
    Bye
    Thomas

    PS: Si quelqu'un connait une méthode pour ne pas passer par les boucles for dans ce cas là, je suis très intéressé.

    Merci beaucoup
    Thomas

  13. #13
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut
    ca a l'air de bien marché ce que tu as fait alors je vais essayer ca mettre ton code dans une fonction et l'apeller depuis mon prog principale

    Voilà mon code de binarisation à moi
    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
    %demo
    % function demo
    %charge l'image
    function newim = binarisation(x)
    %figure(1),colormap(gray(256)),image(x)
     
    %filtrage et resultat (sobel filter)
    b=[1 2 1;0 0 0;-1 -2 -1]
    y=filter2(b,x);
    %figure(2),colormap(gray(256)),image(y)
     
     
    %filtrage ftrans2
    c=[1 1 1;0 0 0;-1 -1 -1]
    y1=filter2(c,x);
    %figure(3),colormap(gray(256)),image(y1)
     
    %histogramme
    %I= imread('C:\Trfinger\imagesempreintes\2.tif');
    imhist(x)
    %seuillage
    %F= imread('C:\Trfinger\imagesempreintes\2.tif');
    seuil=(x>125)
    newim=seuil
     
    %use meshgrid

  14. #14
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Heureux que ca fonctionne
    J'ai un peu du mal a voir pourquoi tu utilisais un filtre de sobel?

    A bientot
    Thomas
    PS: Si tu veux insérer du code, utilise les balises code, c'est plus simple ;-)

  15. #15
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut merci
    merci beaucoup ca marche comme sur des roulettes grace a vous je vais avancer ds mon projet je vous tiendrai au courant merci encore

  16. #16
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Ya pas de soucis

    Tu peux mettre le sujet en résolu
    Bye
    Thomas

  17. #17
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut re
    est ce que je peux avoir l'image sans discontinuité pour pouvoir bien distinguer les minuties ?? ou c'est le maximum qu'on peut faire ?

  18. #18
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 99
    Points : 77
    Points
    77
    Par défaut
    Faisable, je pense que c'est faisable, mais ca risque d'être compliqué.
    Enfin je ne connais pas de méthode simple pour le faire (si qq1 en connait une je suis preneur).
    Ce que tu peux essayer de faire c'est:
    tu peux remarque que dans ton image, tu as une épaisseur de blanc et une épaisseur de noir plus ou moins constante.
    Tu peux essayer de t'en servir pour effectuer ta correction.
    Par exemple si tu vois que 2 blancs sont séparés par un espace noir, compte le nombre de pixels noir qu'il y a entre les 2 blancs.
    Si ce nombre est inférieur a ton épaisseur noire moyenne (ou un peu plus petit), alors tu vas faire une interpolation en les 2 points blancs (les relier en blanc).
    Tu fais pareil avec les noirs.
    Ton image devrait devenir plus uniforme. Mais je ne l'ai pas testé, donc ce n'est que "ma" théorie lol.
    Avant de faire ça, il faut que tu relèves toutes les "épaisseurs" noires et blanche pour pouvoir définir une épaisseur moyenne.
    (quand tu trouve un blanc tu compte jusqu'a ce que tu trouve un noir, tu peux utiliser les flags pour faire ça et pareil pour les noirs. Tu stock chacune des épaisseures trouvées dans une tableau, puis tu fais la moyenne de chacun des éléments blancs, et des éléments noirs".

    Voila, j'espère que ca t'aura mis sur la voie... désolé de ne pas pouvoir de donner le code tout fait.

    Bye
    Thomas

  19. #19
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut Binarisation
    Bonjour,

    Il existe déjà des fonctions en Matlab pour rendre n'importe quelle image à une image BW :
    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
     
     
        a=imread('Emp1.jpg');
        b=imread('Emp2.jpg');
        c=imread('Emp3.jpg');
        d=imread('Emp4.jpg');
     
      level=graythresh(a);
      newa=im2bw(a,level);
     
      level=graythresh(b);
      newb=im2bw(b,level);
     
      level=graythresh(c);
      newc=im2bw(c,level);
     
      level=graythresh(d);
      newd=im2bw(d,level);
    Gouba, est ce que tu peux poster l'image originale ( avant tout traitement) afin de la comparer avec l'image finale obtenue ( aprés la superposition )
    merci

  20. #20
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 30
    Points : 3
    Points
    3
    Par défaut
    euh moi j'ai pensé a deux boucles imbriqué qui font un balayage de l'image par pas de 8 on aura alors plusierus matrice 8*8 et puis faire une dilatation et une erosion de chaque matrice puis rassembler le tout aprés est ce que c'est faisable ?

    oui alors voila mon image de debut : 2.rar
    Fichiers attachés Fichiers attachés
    • Type de fichier : rar 2.rar (23,6 Ko, 171 affichages)

Discussions similaires

  1. demande conseil lecteur d'empreinte digitale
    Par crjo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/03/2013, 20h13
  2. reconnaissance d'empreinte digitale
    Par malek-k dans le forum Windows
    Réponses: 3
    Dernier message: 30/03/2007, 15h39
  3. Empreintes digitales ?
    Par demande001 dans le forum Windows
    Réponses: 2
    Dernier message: 05/12/2006, 09h02
  4. Gerer les empreintes digitales dans un SGBDR.
    Par WOLO Laurent dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 31/12/2004, 12h26

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