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 :

Trouver des correspondances de couleurs


Sujet :

Traitement d'images

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Trouver des correspondances de couleurs
    Bonjour à tous,

    Je souhaite effectuer la comparaison suivante :

    d'un côté, j'ai une image simple (image A) qui contient certaines couleurs dans une gamme proche. Exemple : Nom : image.png
Affichages : 276
Taille : 3,8 Ko

    d'un autre côté, j'ai une palette de couleur (image B) : Nom : palette.jpg
Affichages : 276
Taille : 1,8 Ko (png transparent normalement)

    je souhaite savoir si la ou les couleur dominantes de l'image A sont contenue dans l'image B

    l'objectif est de déterminer des images/couleurs : positives si elles sont dans la gamme de couleur de la palette / négatives dans le cas contraire.

    j'avais déjà essayé (avec imagemagick) d'extraire les couleurs de la palette B, de les insérer dans une base de données, puis d'extraire les couleurs de l'image A et comparer avec la base de données. Mais ça ne fonctionne pas car je pense que je n'extrait pas assez de couleurs de la palette B.

    comment puis-je procéder d'après vous ?

    merci d'avance pour vos idées !

  2. #2
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 700
    Points
    8 700
    Billets dans le blog
    43
    Par défaut
    Je ne suis pas un expert en traitement de l'image, mais j'aurais tendance à dire que tu peux comparer l'histogramme des couleurs de chaque image pour savoir si ça match.
    Tutoriels et FAQ TypeScript

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse.

    En gros, c'est ce que je fais déjà. Sauf que ça ne matche pas.

    Alors du coup je me demande si j'arrive bien à obtenir les bonnes valeurs de référence (la palette B).

    La personne qui m'a demandé ça découpe une zone dans une image de "palette" (http://urlnextdoor.com/content-inclu...r_wheel_lg.jpg) et me dit "voilà, tout ce qui est dans cette gamme de couleur est positif".

    Sauf qu'au final, les couleurs que j’extraie d'un autre côté (image A) ne sont jamais exactement dans la gamme.

    Il faudrait peut-être que je "convertisse" les couleurs de l'image A dans la gamme de couleur de la palette "B".

    Bref, je bloque et je suis preneur d'autres idées et remarques

  4. #4
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 700
    Points
    8 700
    Billets dans le blog
    43
    Par défaut
    Considérons le cas monochrome (une seule dimension) et prenons la couleur primaire rouge.

    La première étape consiste donc à se donner un modèle d'histogramme, c'est à dire à définir des intervalles, disons quatre pour faire simple, partitionnant ainsi la plage des valeurs possibles, ici entre 0 et 255.
    • Intervalle 1 : [0 ; 63]
    • Intervalle 2 : [64 ; 127]
    • Intervalle 3 : [128 ; 191]
    • Intervalle 4 : [192 ; 255]


    La seconde étape consiste à calculer l'histogramme pour chacune des images où l'idéal est après avoir compté les pixels pour chaque intervalle, de diviser la valeur de chaque intervalle par le nombre de pixels total de l'image concernée afin d'avoir deux distributions normalisées.
    De cette façon, on a un histogramme Ha pour l'image A, et un histogramme Hb pour l'image B.
    Comme tu le mentionnais, dans ton cas où il s'agit de savoir si l'image A est incluse dans l'image B, on peut en effet découper l'image B en plusieurs morceaux, mais le principe reste le même.

    La troisième étape consiste à comparer les deux histogrammes Ha et Hb.
    Cela revient à calculer une distance (selon un procédé ou un autre) et suivant que cette distance est supérieure ou inférieure à un seuil qu'on aura fixé au préalable, dire que Ha ressemble à Hb.
    Pour calculer la distance entre deux histogrammes, on peut naïvement faire la somme les différences || Ha[i] - Hb[i] ||.
    Mails il existe d'autres façons de faire comme le test du Khi-deux (ou Khi-carré).
    Tutoriels et FAQ TypeScript

  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
    Si ton image A provient d'une palette de couleur, alors une simple distance euclidienne entre n'importe quel pixel de A et au moins un des pixels de B devrait être nulle.
    Maintenant en fonction des conditions d'acquisition, il y a toujours du bruit, donc cela pourrait être vrai pour une erreur donnée (à quantifier).
    Par ailleurs, l'espace de couleur RGB est souvent mauvais pour l'étude des couleurs. HLS et HSV sont souvent préférés, mais je sais que dans un grand nombre d'entreprises l'espace Lab est utilisé.
    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.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci pour vos réponses. A la lecture, je pense bien que mon souci vient de la définition des "palettes" et de l'espace de couleur. Je suis assez novice dans ce qui touche aux couleurs. J'essaye de comprendre comment tout ça fonctionne mais ce n'est pas simple

    D'un côté les photos sont prises par une tablette tactile et d'une autre cette "palette" est définie un peu à l'arrache par une autre personne.

    Il faut donc, avant d'envisager les calculs de distance, que j'harmonise les différents espace de couleur ?

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Si je puis ajouter mon grain de sel :

    D'abord, il faudrait que les 2 mesures soient dans le même système : RGB, YUV, ou ..

    Ensuite, les distances euclidiennes, pour des couleurs, dovent se faire sur chacune des composantes séparément :

    si par exemple on prend un système RGB

    une couleur qui serait (12, 12, 0) serait à la même distance que (12, 0, 12) ou que (12, 12, 0) de la couleur (0, 0, 50), si on prend la distance comme étant la somme des 3 composantes..

    Il faut donc faire une distance pour chaque composante, et minimiser l'écart de chacune de ces distances afin d'obtenir la meilleure correspondance... (dans l'exemple ci-dessus, la seule correspondante serait (12, 0, 12))
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci à tous pour vos réponses.

    Effectivement, je pense qu'il faut que je calcule les distances entre chaque couleurs pour obtenir une information. Et non pas chercher à comparer couleur par couleur.

    Pour expliciter le projet :

    - on prend en photo un liquide qui doit "virer" comme expliqué ici : http://www.poolplaza.com/pool-school/pH_testing.shtml
    Il doit virer dans des couleurs proches de la gamme de couleur "rouge de phenol"

    - c'est cette photo que je dois analyser pour trouver à quelle étape de la réaction chimique on se trouve (négatif, non déterminé, positif).

    Donc, plus généralement, que pensez-vous de ma méthode pour réaliser ça ?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Bon, prenons l'exemple RGB...

    Soit ton échelle de pH.. N couleurs, N triplets (r1, g1, b1)

    Soit ta mesure sur ton échantillon, r, g, b

    pour déterminer quelle est la couleur la plus proche :

    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
    distmin = MAX
    imin = 0
     
    pour i = 0 jusqu'à i < N
     
    	  distr = abs(r1[i] - r) 
    	  distb = abs(b1[i] - b) 
    	  distg = abs(g1[i] - g) 
     
              dist = distr + distb + distg
     
              si dist < distmin
                   distmin = dist
                   imin = i 
              fin si
     
    fin pour
    Et maintenant, tout ce que tu as à faire c'est, une fois pour toute sur ton échelle, déterminer l'intervalle que tu acceptes comme OK...

    Tu testeras alors si ton indice imin se trouve dans cet intervalle...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Bonjour à tous

    Mes excuses pour le délai de réponse. J'ai finalement pu obtenir une bonne piste de travaille en calculant la distance Delta E (http://fr.wikipedia.org/wiki/Delta_E) entre chaque élément.

    Merci à tous pour vos idées

  11. #11
    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
    C'est juste une distance euclidienne dans l'espace Lab.
    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.

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

Discussions similaires

  1. Trouver des non correspondances
    Par Akazed dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/04/2011, 09h14
  2. [RegEx] Trouver des chaines ne correspondant pas à un critère
    Par Muetdhiver dans le forum Langage
    Réponses: 2
    Dernier message: 05/11/2007, 23h26
  3. [Kylix] Trouver des composants pour Kylix 3
    Par busy999 dans le forum EDI
    Réponses: 2
    Dernier message: 17/02/2003, 14h01
  4. [SWT] Un bon coin ou trouver des infos pratik
    Par yolepro dans le forum SWT/JFace
    Réponses: 8
    Dernier message: 04/12/2002, 14h08
  5. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28

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