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 :

comment détecter qu'une image N&B est flou?


Sujet :

Traitement d'images

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut comment détecter qu'une image N&B est flou?
    je cherche a trouver un critère qui me dit si une image noir et blanc est flou.

    ma première approche est qu'une image flou, n'a pas de contour net, donc des gradients de faibles valeurs...
    le resultat n'est pas très bon, donc je pense qu'il faut coupler ce test à autre chose pour avoir des résultat un peu plus concluants?
    si vous avez une idée, je suis preneur


  2. #2
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Typiquement, si une image est flou, la transition d'un pixel a son voisin est lisse. Donc un truc du genre la moyenne du carré des différences doit permettre de fixer un seuil au dela du quel tu considere ton image flou. L'ennui c'est qu'en faisant ainsi tu risque d'etre tres sensible aux longs dégradés...

    Donc il suffit juste de t'assurer que ton image contient localement (soit l'image entiere est floue, soit ce n'est pas du flou) des transitions superieur a un seuil (ce qui te permettra de retenir egalement les photos contenant un flou artistique en arriere plan)

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Une autre solution est d'effectuer la dct 2D sur ton image, tu fixes un seuil en dessous duquel tu considères l'image floue (typiquement, les coefficients d'une image floue sont "réunis" an haut à gauche).

    Après, je n'ai pas de quoi tester, mais je pense que tu dois pouvoir t'en sortir avec ça aussi (en quantifiant, pour mettre à 0 les coefficients trop petits, faire des essais avec des images floues et non floues, puis déterminer un seuil).

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    Merci pour vos réponses,

    Je vais y aller de manière progressive pour tester ce que vous m'avez dit, d'abord Harsh:
    Donc un truc du genre la moyenne du carré des différences doit permettre de fixer un seuil au dela du quel tu considere ton image flou
    Tu parles de différences, que compares tu? tu décris l'image en prenant les valeurs de chaque pixel que tu soustrais à son voisin (une sorte de gradient horizontal) et enfin tu moyenne sur le nombre total de pixels
    ou alors tu effectues une moyenne des gradients spatiaux ?

    Donc il suffit juste de t'assurer que ton image contient localement (soit l'image entiere est floue, soit ce n'est pas du flou) des transitions superieur a un seuil (ce qui te permettra de retenir egalement les photos contenant un flou artistique en arriere plan)
    en quelque sorte tu effectues un choix par hystérésis: si tu as tel proportion de pixels flous (par ex: grad <10 ) et tel proportion de pixel non flou (par ex: grad >100) alors il s'agit d'une image "nette" mais contenant une zone flou.


    progfou:
    Une autre solution est d'effectuer la dct 2D sur ton image, tu fixes un seuil en dessous duquel tu considères l'image floue (typiquement, les coefficients d'une image floue sont "réunis" an haut à gauche)
    j'implémente ça et je te tiens au courant, mais j'ai peur que la quantification ne soit pas aussi facile que ça...

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Tu peux quantifier "basiquement", avec un coefficient constant.
    Tu arrondi, et tu compares à un seuil derrière.
    Si tu utilises matlab, dct2 doit pouvoir t'aider .

  6. #6
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Non, tu ne peux pas calculer un rapport de "pixels flou" sur "pixels non flou" sinon tu risques de ne pas etre robuste suivant que tu passes d'une image nette contenant de grande regions dégradées (une plage avec un ciel clair) à une image legerement flou mais tres découpée.

    Je pense vraiment qu'il ne faut s'occuper que de la recherche de "pixels non flou" (c'est ta seule mesure fiable sur la netteté de ton image). Les "pixles dits flous" peuvent encore une fois aussi bien etre un degradé qu'un flou de fond de scene (donc normal).

    Je preconise donc de recherché un nombre minimal (assez faible) de pixel dont le gradient est fort. Tu devras a mon avis faire un pre traitement sur ton image pour equilibrer son histogramme afin de ne pas looser sur les images peu contrastée

    EDIT: quoiqu'une mesure de l'epaisseur moyen des contours donnés par l'image du gradient (donc utiliser le sens du gradient) doit donner des résultats peut etre un peu plus fiable

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    Bon alors j'ai commencé à implémenter une DCT mais c'est long en calculs, le programme que j'écris doit être embarqué sur un petit DSP donc je vais pas pouvoir utiliser cette méthode.

    Malheureusement je n'utilise pas Matlab, donc dct2 ne va pas pouvoir m'aider...dommage

    Tu peux quantifier "basiquement", avec un coefficient constant.
    Tu arrondi, et tu compares à un seuil derrière.
    Je n'ai pas réussi à trouver le seuil "basique" idéal, effectivement je cherche une image non flou sur laquelle j'applique un seuillage noir et blanc et enfin j'essaye d'extraire les informations de l'image. ces 3 étapes successives ne sont pas parfaites alors la robustesse (en principe fixé par l'étape déterminante de détection de flou) n'est pas vraiement à la hauteur.


    Je preconise donc de recherché un nombre minimal (assez faible) de pixel dont le gradient est fort. Tu devras a mon avis faire un pre traitement sur ton image pour equilibrer son histogramme afin de ne pas looser sur les images peu contrastée
    ce que j'ai fait c'est le calcul de 90% des valeurs de gradients les plus faibles, que j'ai annulé, il ne me restait plus que 10% des gradients les plus forts, et depuis ses 10% je suis allé chercher la moyenne de l'histogramme des VALEURS qui est comparé à une valeur "basique", afin de déterminer si c'est ou pas une image floue.

    la méthode n'est pas efficace du tout pour les mêmes raisons que précédemment l'ensemble de l'algorithme est très sensible...

  8. #8
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Voila des gens qui se sont interessés au probleme:

    http://www-rech.enic.fr/coresa2004/a...76-harasse.pdf

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 277
    Points : 141
    Points
    141
    Par défaut
    Merci harsh c'est sympa.

    ils ont bien fait leur truc, ça à l'air intéressant, mais dans mon cas ce n'est pas applicable :
    on doit determiner si UNE image est floue (sans autre connaissance)
    on a pas de partie "fixe" sur lequel appliquer nos gradients

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Une ou deux petites idées en passant:
    - avec une FFT ou DCT sur l'image (je rejoint une idée précédemment citée), et vérifier s'il y a ou non beaucoup de hautes fréquences. Il faudrait donc faire des tests sur des photo nettes et floues pour déterminer la frontière.
    -La méthode précédente est plutôt lente, donc on pourrait faire les fft/dct (sur des entiers) par blocs (8x8, 16x16) et faire des stats sur l'ensemble des blocs.
    -utiliser des filtres orthogonaux d'ondelettes (basse et haute fréquences, Haar par exemple) afin de vérifier l'énergie dans chaque bande de fréquence. Avec une hiérarchie d'ondelettes, ça permettrait sans doute de donner une échelle au niveau de flou.

  11. #11
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Une autre idée qui me vient, mais à pousser, faire un quadtree, et compter le nombre de blocs de petite taille.
    Un quadtree va diviser l'image en blocs, en mettant des blocs plus petits lorsque l'image a un contour "franc".
    Je n'ai pas testé, mais l'idée m'est venue, en disant que l'image floue a des contours moins visibles que l'image nette (mais sans exemple, difficile de conclure ).

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/10/2007, 13h23
  2. Comment verifier qu'une image a été postée ?
    Par maximenet dans le forum Langage
    Réponses: 1
    Dernier message: 08/01/2006, 20h28
  3. Comment écrire sur une image, dans un cadre ?
    Par Nutrino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 20/05/2005, 01h55
  4. Réponses: 15
    Dernier message: 27/04/2005, 11h41
  5. [Image]comment pre-charger une image
    Par al85 dans le forum 2D
    Réponses: 5
    Dernier message: 28/02/2005, 21h22

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