90 votes

Algorithme pour vérifier la similitude des couleurs basées sur les valeurs RVB (ou peut-être HSV)

Je suis à la recherche d'un algorithme qui compare de couleurs RGB et génère une valeur de leur similitude (où similitude signifie "semblable à l'égard de avarage la perception de l'homme").

Des idées?

EDIT:

Depuis je ne peux pas répondre plus j'ai décidé de mettre ma "solution" comme une modification à la question.

J'ai décidé d'aller avec un (très) petit sous-ensemble de la vraie couleur dans mon application, de sorte que je peux gérer la comparaison des couleurs par ma propre. Je travaille avec près de 30 couleurs et l'utilisation codée en dur les distances entre eux.

Depuis qu'il a été d'une application iPhone, j'ai travaillé avec objective-C et de la mise en œuvre est plus ou moins une matrice représentant le tableau ci-dessous, qui montre les distances entre les couleurs.

enter image description here

60voto

Ghassen Hamrouni Points 1062

RVB distance dans l'espace euclidien n'est pas très "semblable à avarage la perception de l'homme"

Vous pouvez utiliser YUV espace de couleur, il tient compte de ce facteur :

enter image description here

Vous pouvez également utiliser la CIE espace de couleurs pour cette fin.

25voto

JHolta Points 555

Je vous conseille d'utiliser CIE94 (DeltaE-1994), il est dit être un décent représentation de la perception humaine de la couleur. Je l'ai utilisé un peu dans mon ordinateur-vision d'applications connexes, et je suis plutôt content du résultat.

Il est cependant plutôt de calcul coûteux d'effectuer une telle comparaison:

  1. RGB to XYZ pour les deux couleurs
  2. XYZ to LAB pour les deux couleurs
  3. Diff = DeltaE94(LABColor1,LABColor2)

Les formules (pseudo-code):

14voto

Stephen Chung Points 9467

La perception humaine est plus faible dans la chrominance de l'intensité.

Par exemple, dans la vidéo commerciale, la YCbCr/YPbPr espaces de couleurs (appelé aussi Y'UV) permet de réduire la résolution de la chrominance info mais préserve la luminance (Y). Dans la compression vidéo numérique 4:2:0 et 4:2:2 réduit le chroma débit en raison de relativement plus faible de la perception.

Je crois que vous pouvez calculer une fonction de distance accorder une plus grande priorité sur la luminance (Y) et moins la priorité sur chroma.

Aussi, en vertu de faible intensité, de la vision humaine est pratiquement en noir et blanc. Par conséquent, la priorité est fonction non-linéaire que pour la basse luminance (Y) vous avez mis moins de et moins de poids sur la chromie.

Plusieurs formules scientifiques: http://en.wikipedia.org/wiki/Color_difference

4voto

xan Points 3597

La perception des couleurs n'est pas Euclidienne. Toute formule de la distance sera assez bonne et terrible à la fois. Toute mesure basée sur la distance Euclidienne (RGB, HSV, Luv, Laboratoire, ...) sera assez bon pour des couleurs similaires, montrant aqua être proche de la sarcelle d'hiver. Mais pour les non-valeurs proches il obtient d'être arbitraire. Par exemple, le rouge est plus proche de vert ou de bleu?

De Charles de Poynton de la Couleur de la FAQ:

Le XYZ et RVB systèmes sont loin d' présentant uniformité perceptuelle. Trouver une transformation de la société XYZ dans un raisonnablement perceptuellement uniforme de l'espace consommé une décennie ou plus à la CIE et en fin de compte, aucun système pourrait être d'accord.

-5voto

Damon Points 26437

La similitude des couleurs RVB cube est mesurée par la distance euclidienne (utilisation de la formule de pythagore).

EDIT: Sur une seconde pensée, cela devrait être vrai pour la plupart des autres espaces de couleurs trop.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X