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

Traitement d'images Discussion :

FFT et la reconnaissance d'empreintes digitales


Sujet :

Traitement d'images

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut FFT et la reconnaissance d'empreintes digitales
    Bonjour,

    J'ai beaucoup lu sur le sujet de l'utilité de l'algorithme de la FFT sur l'amélioration de l'empreinte digitale, mais je comprends toujours pas le principe.

    Quelqu'un pourrait-il me l'expliquer en termes simples ?

    Merci d'avance.

  2. #2
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    En fait, je voulais que quelqu'un m'explique ce bout de code en Matlab... Il applique la FFT sur un bloc de 32x32 de l'image et puis il multiplie la matrice résultante par son amplitude (abs(F)) un certain nombre de fois (f) et prend ensuite la transformée inverse de fourier. Mais j'ai pas compris comment ces opérations pourraient améliorer l'image.

    Voici le code (c'est à l'intérieur de deux boucles for sur la taille de l'image totale et à pas de 32) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    F=fft2( I(i:a,j:b) ); % Applique la FFT sur le bloc 32x32 considéré.
          facteur=abs(F).^f; % Calcul du facteur de l'amélioration.
          bloc = abs(ifft2(F.*facteur)); % Le bloc 32x32 après amélioration et FFT inverse.
     
          maxi=max(bloc(:)); % Prend la valeur maximale des coefficients du bloc.
          if maxi==0
             maxi=1;
          end;
     
          bloc= bloc./maxi; % Divise tous les coefficients par le maximum.
          matrice(i:a,j:b) = bloc; %Remplissage de la matrice par les blocs améliorés.

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    En fait, je voulais que quelqu'un m'explique ce bout de code en Matlab... Il applique la FFT sur un bloc de 32x32 de l'image et puis il multiplie la matrice résultante par son amplitude (abs(F)) un certain nombre de fois (f) et prend ensuite la transformée inverse de fourier. Mais j'ai pas compris comment ces opérations pourraient améliorer l'image.
    C'est un filtrage local du bruit.

    La matrice d'amplitude à des coefficients entre 0 et 1. Lorsqu'on les élève à la puissance "f", les faibles coefficients deviennent très très faibles alors que les forts coefficients ne baissent que légèrement (par rapport aux autres).

    {0.1, 0.2, 0.8, 0.2}^10 = {0.0000..., 0.0000..., 0.1074..., 0.0000...}

    Donc on atténue beaucoup les fréquences de faibles amplitudes (le bruit) et légèrement les fréquences de fortes amplitudes (le signal) => on augmente le ratio Signal/Bruit (SNR)

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    C'est un filtrage local du bruit.

    La matrice d'amplitude à des coefficients entre 0 et 1. Lorsqu'on les élève à la puissance "f", les faibles coefficients deviennent très très faibles alors que les forts coefficients ne baissent que légèrement (par rapport aux autres).

    {0.1, 0.2, 0.8, 0.2}^10 = {0.0000..., 0.0000..., 0.1074..., 0.0000...}

    Donc on atténue beaucoup les fréquences de faibles amplitudes (le bruit) et légèrement les fréquences de fortes amplitudes (le signal) => on augmente le ratio Signal/Bruit (SNR)
    Merci beaucoup pour ta réponse.

    Mais vu que je suis débutant dans le domaine, je ne comprends pas pourquoi la matrice d'amplitude a des coefficients entre 0 et 1. Sinon je comprends le reste.

    Et une autre question svp : Je ne comprends pas beaucoup comment interpréter le spectre d'amplitude que donne la FFT d'une image donnée. J'ai lu que la fréquence c'est le taux de variation des intensités de l'image originale et les amplitudes c'est quoi ?

    Merci d'avance.

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    Mais vu que je suis débutant dans le domaine, je ne comprends pas pourquoi la matrice d'amplitude a des coefficients entre 0 et 1. Sinon je comprends le reste.
    En fait, je ne sais pas si c'est vraiment entre 0 et 1. Mais ca n'a pas d'importance. Le fait d'élever des valeurs pas une puissance plus grande que 1 favorise les "grandes" valeurs par rapport aux petites. Donc ca augmente toujours le SNR

    {1,2,8,2,1}^10 = {1,1024,1073741824,1024,1}

    Il faut juste faire attention a ne pas avoir des valeurs trop grandes, mais ca ne doit pas être un problème pour Matlab.

    Et une autre question svp : Je ne comprends pas beaucoup comment interpréter le spectre d'amplitude que donne la FFT d'une image donnée. J'ai lu que la fréquence c'est le taux de variation des intensités de l'image originale et les amplitudes c'est quoi ?
    La FFT permet de décomposer un signal quelconque (une image) en une somme de signaux simples (des sinusoides). Chacune de ces sinusoides est définie par une frequence et une amplitude.

    Une image entierement blanche (= un signal constant de valeur 255) est en fait une sinusoide de frequence 0 et d'amplitude 255. La FFT décompose donc une image entierement blanche en une somme de sinusoides, dont la premiere (frequence 0) a une amplitude de 255 et toutes les autres (frequence>0) ont une de 0. Le spectre d'amplitude est donc {255, 0, 0, 0, 0, ... }

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    En fait, je ne sais pas si c'est vraiment entre 0 et 1. Mais ca n'a pas d'importance. Le fait d'élever des valeurs par une puissance plus grande que 1 favorise les "grandes" valeurs par rapport aux petites. Donc ca augmente toujours le SNR

    {1,2,8,2,1}^10 = {1,1024,1073741824,1024,1}

    Il faut juste faire attention a ne pas avoir des valeurs trop grandes, mais ca ne doit pas être un problème pour Matlab.
    En fait justement, la valeur expérimentale de f est 0.45 car le rapport dit que bien que le fait d'avoir un f grand améliore l'apparence de l'empreinte en liant les crêtes faussement discontinues, il se peut qu'il lie d'autres crêtes qui sont en réalité non liées. Donc f n'est pas supérieure à 1.

    La FFT permet de décomposer un signal quelconque (une image) en une somme de signaux simples (des sinusoides). Chacune de ces sinusoides est définie par une frequence et une amplitude.

    Une image entierement blanche (= un signal constant de valeur 255) est en fait une sinusoide de frequence 0 et d'amplitude 255. La FFT décompose donc une image entierement blanche en une somme de sinusoides, dont la premiere (frequence 0) a une amplitude de 255 et toutes les autres (frequence>0) ont une de 0. Le spectre d'amplitude est donc {255, 0, 0, 0, 0, ... }
    Et pourquoi le spectre a toujours une tâche lumineuse au centre et un halo autour, comme ceci ?


  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    En fait justement, la valeur expérimentale de f est 0.45 car le rapport dit que bien que le fait d'avoir un f grand améliore l'apparence de l'empreinte en liant les crêtes faussement discontinues, il se peut qu'il lie d'autres crêtes qui sont en réalité non liées. Donc f n'est pas supérieure à 1.
    Ah, c'est le filtre inverse : au lieu d'accentuer les contours il fait un lissage. En prenant une puissance entre 0 et 1, on atténue la différence entre les grandes/petites valeurs.

    Et pourquoi le spectre a toujours une tâche lumineuse au centre et un halo autour, comme ceci ?
    Généralement les images ont beaucoup de zones uniformes (ou variant peu). Essaye d'imaginer une image sans "aucune" zone uniforme... ca ressemblerait a du bruit.

    C'est donc normal d'avoir des coefficients plus grand pour les fréquences basses (proches de 0), ce qui forme un halo près du centre (0,0) et près des axes (0,*) et (*,0).

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ah, c'est le filtre inverse : au lieu d'accentuer les contours il fait un lissage. En prenant une puissance entre 0 et 1, on atténue la différence entre les grandes/petites valeurs.
    Mais le but de cette opération c'est justement de rendre les les crêtes de l'empreinte (donc le contour) plus visible.. Je ne comprends plus là..

    Généralement les images ont beaucoup de zones uniformes (ou variant peu). Essaye d'imaginer une image sans "aucune" zone uniforme... ca ressemblerait a du bruit.

    C'est donc normal d'avoir des coefficients plus grand pour les fréquences basses (proches de 0), ce qui forme un halo près du centre (0,0) et près des axes (0,*) et (*,0).
    Je ne pense avoir compris un peu.. mais c'est quoi svp la définition précise de cette fréquence dans le domaine des images ?

    Merci d'avance.

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    Mais le but de cette opération c'est justement de rendre les les crêtes de l'empreinte (donc le contour) plus visible.. Je ne comprends plus là..
    Le lissage permet d'avoir une meilleure impression de "continuité" car on atténue la différence entre les valeurs. On a ainsi moins l'impression d'avoir un "trou" entre deux fortes valeurs.

    Je ne pense avoir compris un peu.. mais c'est quoi svp la définition précise de cette fréquence dans le domaine des images ?
    Il n'y a pas d'explication "visuelle" simple, si c'est ce que tu veux dire. Les fréquences hautes sont causées par des changements brutaux de valeurs entre 2 pixels voisins : ca peut être du "bruit" sur l'image ou un contraste très fort (le bord d'un objet)

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Le lissage permet d'avoir une meilleure impression de "continuité" car on atténue la différence entre les valeurs. On a ainsi moins l'impression d'avoir un "trou" entre deux fortes valeurs.
    Oui je vois. On ne peut parler d'un filtre ici ? (Si c'est oui, quel sera son type ?)

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    Oui je vois. On ne peut parler d'un filtre ici ? (Si c'est oui, quel sera son type ?)
    Oui c'est clairement un filtre.

    Quand a son "type", qu'est ce que tu veux dire par là ? c'est quoi ta définition de "type" ?

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Oui c'est clairement un filtre.

    Quand a son "type", qu'est ce que tu veux dire par là ? c'est quoi ta définition de "type" ?
    Euh je veux dire.. filtre passe-bas, passe-bande, etc... (cette méthode, ou ce filtre, n'a pas de nom explicite ?)

  13. #13
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    En fait je viens de découvrir ça :

    Google Books

    Page 112.

    C'est une méthode connue apparemment depuis 1994.

  14. #14
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    Euh je veux dire.. filtre passe-bas, passe-bande, etc... (cette méthode, ou ce filtre, n'a pas de nom explicite ?)

    En fait je viens de découvrir ça :

    Google Books

    Page 112.

    C'est une méthode connue apparemment depuis 1994.
    Bah voila. Ca répond a ta question pour le nom du filtre.

    En fait je viens de me rendre compte que la formule c'est F(i.j)*Module^k. Comme F n'est pas normalisée, on prend en compte son module et donc la puissance "finale" n'est jamais inférieure a 1.

    F(i.j)*Module^k = (Fnormalisé(i.j) * Module) * Module^k = Fnormalisé(i.j) * Module^(k+1)

  15. #15
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Bah voila. Ca répond a ta question pour le nom du filtre.

    En fait je viens de me rendre compte que la formule c'est F(i.j)*Module^k. Comme F n'est pas normalisée, on prend en compte son module et donc la puissance "finale" n'est jamais inférieure a 1.

    F(i.j)*Module^k = (Fnormalisé(i.j) * Module) * Module^k = Fnormalisé(i.j) * Module^(k+1)
    Oui.

    C'est à la fin qu'il normalise le résultat final, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bloc= bloc./maxi; % Divise tous les coefficients par le maximum.

  16. #16
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    C'est à la fin qu'il normalise le résultat final, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bloc= bloc./maxi; % Divise tous les coefficients par le maximum.
    Effectivement. Du coup les blocs ont bien des valeurs entre 0 et 1. Je ne sais pas pourquoi mais ca doit être utile dans le reste de l'algorithme.

  17. #17
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Effectivement. Du coup les blocs ont bien des valeurs entre 0 et 1. Je ne sais pas pourquoi mais ca doit être utile dans le reste de l'algorithme.
    En fait après (la ligne que je n'ai pas écrite ), il mutiplie tout le bloc par 255 pour revenir aux niveaux de gris.

  18. #18
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par l0calh0st Voir le message
    En fait après (la ligne que je n'ai pas écrite ), il mutiplie tout le bloc par 255 pour revenir aux niveaux de gris.
    Ah... bah voila. On a fait le tour de cet algo je pense.

  19. #19
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ah... bah voila. On a fait le tour de cet algo je pense.
    Oui! Merci beaucoup pour ton aide

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

Discussions similaires

  1. reconnaissance d'empreinte digitale
    Par simalinux dans le forum Images
    Réponses: 0
    Dernier message: 04/12/2011, 13h51
  2. Conception d'un logiciel de reconnaissance d'empreintes digitales
    Par napster007 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 02/04/2009, 10h54
  3. algorithme de reconnaissance d'empreinte digitale sous matlab
    Par hicham009 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 16/11/2008, 13h55
  4. reconnaissance d'empreinte digitale
    Par malek-k dans le forum Windows
    Réponses: 3
    Dernier message: 30/03/2007, 16h39

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