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 :

Detection d iris


Sujet :

Images

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 44
    Points : 22
    Points
    22
    Par défaut Detection d iris
    Bonjour,
    je travaille actuellement sur la detection d'iris, j'ai implementer differents algorithmes sans succes, la j'ai reussi a recuperer les centres de mon iris avec une transformer de hough, cependant je n'arrive pas a obtenir le rayon de l'iris, sur certains cas c'est ceux de la pupille, je vous joints mon code, je pensais a parcourir mon image apartir du centre et de relever les points ou j'ai une difference de niveaux de gris.... Quelqu'un aurait t'il une idee pour recuperer le rayon?
    desole pour les accents j'utilise un clavier qerty donc pas d'accent...
    Merci d'avance


    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
    clear all
    close all
    clc
     
    %%image transformer en binaire%%
    Iris=imread('IrisSeekk.bmp');
    I=rgb2gray(Iris);
     
    if nargin == 1
        t = t_autoset(I);
    end
     
    sz=size(I);
     
    BW=repmat(logical(uint8(0)),sz(1),sz(2));
     
    for r = 3 : sz(1)-2
        for c = 3 : sz(2)-2
            if I(r,c)<t
                if (I(r-1,c-1)<t)&(I(r-1,c)<t)&(I(r-1,c+1)<t)&(I(r,c-1)<t)&(I(r,c+1)<t)&(I(r+1,c-1)<t)&(I(r+1,c)<t)&(I(r+1,c+1)<t)
                    BW(r,c) = 0;
                else
                    BW(r,c) = 1;
                end
            else
                BW(r,c) = 0;
            end
        end
    end
     
     
    for r = 1 : sz(1)
        BW(r,1:2) = 0;
        BW(r,(size(BW,2)-1):size(BW,2)) = 0;
    end
    for c = 1 : sz(2)
        BW(1:2,c) = 0;
        BW((size(BW,1)-1):size(BW,1),c) = 0;
    end
    figure,imshow(I)
    figure,imshow(BW)
     
    %%Transformer de hough%%
       Ibinary = BW;
     
    Rp=[10,200];
    [sy,sx]=size(Ibinary);
     
    [y,x]=find(Ibinary);
     
    totalpix = length(x);
     
    HM_tmp = zeros(sy*sx,1);
     
    b = 1:sy;
    a = zeros(sy,totalpix);
     
    if nargin == 1
        R_min = 1;
        R_max = max(max(x),max(y));
    else
        R_min = Rp(1);
        R_max = Rp(2);
    end
     
    y = repmat(y',[sy,1]);
    x = repmat(x',[sy,1]);
     
    HPN = 0;
     
    for R = R_min : R_max
     
        R2 = R^2;
        b1 = repmat(b',[1,totalpix]);
        b2 = b1;
     
        a1 = (round(x - sqrt(R2 - (y - b1).^2)));
        a2 = (round(x + sqrt(R2 - (y - b2).^2)));
     
        b1 = b1(imag(a1)==0 & a1>0 & a1<sx);
        a1 = a1(imag(a1)==0 & a1>0 & a1<sx);
        b2 = b2(imag(a2)==0 & a2>0 & a2<sx);
        a2 = a2(imag(a2)==0 & a2>0 & a2<sx);
     
        ind1 = sub2ind([sy,sx],b1,a1);
        ind2 = sub2ind([sy,sx],b2,a2);
     
        ind = [ind1; ind2];
     
        val = ones(length(ind),1);
        data=accumarray(ind,val);
        HM_tmp(1:length(data)) = data;
        HM2_tmp = reshape(HM_tmp,[sy,sx]);
     
        maxval = max(max(HM2_tmp));
     
        if maxval>HPN
            HPN = maxval;
            HM = HM2_tmp;
            Rc = R;
        end
    end
     
    [B,A] = find(HM==HPN);
     
    C = [mean(A),mean(B),Rc];
    xc=C(1);
    yc=C(2);
    radius=C(3);
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 880
    Points
    52 880
    Par défaut
    Comme on te l'a déjà conseillé je crois, une solution consiste à passer dans l'espace HSV.
    En jouant sur les valeurs de la dernière composante, tu devrais pouvoir faire un masque efficace

    Par exemple :
    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
     
    Irgb = imread('IrisSeekk.JPG','jpg');
     
    Ihsv = rgb2hsv(Irgb);
     
    figure
     
    subplot(321)
    image(Irgb)
    axis image off
    title('Image initiale')
     
    subplot(322)
    imagesc(Ihsv(:,:,1))
    axis image off
    title('Teinte')
     
    subplot(324)
    imagesc(Ihsv(:,:,2))
    axis image off
    title('Saturation')
     
    subplot(326)
    imagesc(Ihsv(:,:,3))
    axis image off
    title('Valeur')
     
    mask = Ihsv(:,:,3)<.75;
    subplot(323)
    imagesc(mask)
    axis image off
    title('Masque')
     
    mask = uint8(mask);
    Ifilt = cat(3,Irgb(:,:,1).*mask,Irgb(:,:,2).*mask,Irgb(:,:,3).*mask);
     
    subplot(3,2,5)
    image(Ifilt)
    axis image off
    title('Image initiale + Masque')
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 44
    Points : 22
    Points
    22
    Par défaut re
    Merci DUT, mais le pb est que j'ai plusieurs image d'Iris, donc la valeur subie des changements (quelques fois elles me permet de recuperer le rayon), mais la plupart du temps cela ne fonctionne pas...
    je pourrais pas recuperer le rayon a partir de mon image en niveaux de gris en parcourant mon image a partir de mon centres?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 44
    Points : 22
    Points
    22
    Par défaut re
    Je joints une autre image si tu veux regarder la difference.
    Images attachées Images attachées  

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    juste une petite précision sur la détection elle-même de l'iris... car j'ai déjà travaillé sur ce problème.
    Qu'elle transformée de Hough utilises tu? Parce que si c'est celle avec des cercles, tu vas avoir un problème dès que l'oeil va tourner légèrement. L'iris va devenir une ellipse.

    Ensuite, lorsque tu as trouvé l'iris, tu as eu un cercle, donc une méthode triviale et approximativement juste pour avoir le barycentre, c'est de prendre le centre du cercle donné par Hough.
    Mais tu as dû t'apercevoir que dans certains cas ton cercle solution ne colle pas exactement avec le contour. Auquel cas il suffit de faire une petite propagation (étiquetage) des pixels noit à partir du centre du cercle puis de boucher les trous en cas de reflet. Ensuite il te suffira de calculer le barycentre.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. [Débutant] Detection d'iris segmentation
    Par nana56 dans le forum Images
    Réponses: 2
    Dernier message: 16/06/2014, 23h19
  2. Virus detecté au demarrage
    Par Nasky dans le forum Sécurité
    Réponses: 7
    Dernier message: 26/11/2002, 23h07
  3. [VB6] [Lecteur] Détection de disquette
    Par oazar dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/10/2002, 12h37
  4. detection de lignes
    Par the.cable.guy dans le forum Algorithmes et structures de données
    Réponses: 29
    Dernier message: 10/10/2002, 11h15
  5. Detection arret de windows
    Par philippe30 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 21/09/2002, 18h41

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