recherche valeur la plus proche dans un tableau

Bonjour,
voici pour essai , un tableau 2 dimensions de 8 lignes er 3 colonnes ;

pour identifier des couleurs ,les codes sont compris entre 0 et 255.

int Couleur[8][3]={{230,126,48}, //0 abricot cette liste vient de Wikipedia"liste des noms de couleur"
{136,66,29}, //1 acajou
{121,248,248},//2 aigue-marine
{167,103,38}, //3 alezan
{130,196,108},//4 amande
{145,40,59}, //5 amarante
{240, 195 0}, //6 ambre
{136,77,167}}; //7 améthyste

j'ai fait une sonde de mesure trouvé dans "électronique en amateur"
elle me renvoie un triplet de valeur entre 0 et 255 mais ne n'est pas forcement exactement celui
d'une couleur par exemple
145,100,40
je voudrais que ce soit identifié comme "alezan"

je cherche vainement à trouver comment faire cette détection de valeur la plus proche

merci d'avance pour votre aide.

Bonjour,
pas si simple : si par exemple ta sonde renvoie les valeurs {230,66,248}, laquelle de tes couleurs en serait le plus proche ?

Bonjour,

Effectivement ce n'est pas simple, d'autant plus que l'appréciation de la couleur la plus proche risque d'être différente pour chaque individu.

trimarco232:
Bonjour,
pas si simple : si par exemple ta sonde renvoie les valeurs {230,66,248}, laquelle de tes couleurs en serait le plus proche ?

Il me semble qu'on pourrait prendre l'écart en valeur absolue entre la mesure et la valeur R puis V puis B
faire pour chaque ligne la somme de ces écarts
la couleur la plus proche devrait être celle ou la ligne a cette somme la plus faible.

C'est aussi à ça que je pensais en premier voir fichier tableur joint pour tester cette méthode sommaire et voire si elle répond aux attentes. Pas si évident que ça. Certains se sont sans doute penchés sur la problématique et ont pondu des méthodes et algorithmes plus performants.

ce ci dit les définitions de 'couleur proche', 'couleur suffisamment proche' ne sont pas évidentes !!proximité.PNG

proximité.PNG

proximite-couleur-xls.zip (2.14 KB)

Hello,

Le problème avec RVB, c'est que une valeur de R seule, par exemple, ne suffit pas à déterminer la teinte.
Il faut tenir compte des autres valeurs
Par exemple pour R=128,G=0, B=0, on obtient du rouge.
Mais R=128, G=128, B=128 on obtient ...du gris !

Pour ce genre de problème, je me pencherais sur le système HSV (Hue, Saturation, Value).
Dans ce système, Hue représente la teinte de base.
Deux couleurs avec des valeurs de H proches, sont proches aussi d'un point de vue couleur.

Il existe des algorithmes pour passer de RGB à HSV et réciproquement...

C'est peut-être une piste de réflexion...

Coyotte

Pour mesurer l'écart entre deux couleurs caractérisées par leurs composantes RVB (ou autres), il faut mesurer l'écart sur chacune des composantes et faire une moyenne [pondérée ](http://pondération colorimétrique)par la sensibilité sur chacune de ces composantes.

Cordialement.

Pierre

al1fch:
C'est aussi à ça que je pensais en premier voir fichier tableur joint pour tester cette méthode sommaire et voire si elle répond aux attentes. Pas si évident que ça. Certains se sont sans doute penchés sur la problématique et ont pondu des méthodes et algorithmes plus performants.

ce ci dit les définitions de 'couleur proche', 'couleur suffisamment proche' ne sont pas évidentes !!proximité.PNG

al1fch:
C'est aussi à ça que je pensais en premier voir fichier tableur joint pour tester cette méthode sommaire et voire si elle répond aux attentes. Pas si évident que ça. Certains se sont sans doute penchés sur la problématique et ont pondu des méthodes et algorithmes plus performants.

ce ci dit les définitions de 'couleur proche', 'couleur suffisamment proche' ne sont pas évidentes !!proximité.PNG

il me semble que le tableau proximité-couleur.xls est erroné il doit manquer des $ pour la ligne 11

Tu as raison , tableau fait trop vite !!!

Je le joins corrigé mais sans les coefficients de pondération ds composantes R, V et B mentionnés par ChPr, je ne les ai pas encore trouvés.
Capture.PNG

proximite-couleur-corrigé.zip (2.16 KB)

Il n'est pas facile de raisonner en RVB un écart sur l'une des composantes pouvant entraîner une erreur assez notable sur la couleur. En plus on est tributaire de la luminosité.

Il est préférable de passer en HSV où H code directement la couleur indépendamment de la luminosité. Voir ici pour les conversions :Math | EasyRGB

Quelques détails:
Les valeurs de H,S et V sont comprises entre 0 et 1
H code la couleur
S code la saturation. C'est la proportion de gris dans la couleur finale. Pour une même valeur de H on peut avoir une couleur plus ou moins "pure".
V code la luminosité globale de la couleur

V ne codant que la luminosité globale, l'identification de la couleur est indépendante de la luminosité de celle-ci (pour autant que la température de couleur de la source d'éclairage soit constante dans le cas d'une analyse de couleur utilisant une source "blanche" externe)