Je vois l’espace colorimétrique HSV utilisé partout: pour le suivi, la détection humaine, etc. Je me demande pourquoi. En quoi cet espace colorimétrique est-il meilleur que l'utilisation de RVB?
Je vois l’espace colorimétrique HSV utilisé partout: pour le suivi, la détection humaine, etc. Je me demande pourquoi. En quoi cet espace colorimétrique est-il meilleur que l'utilisation de RVB?
Réponses:
La réponse simple est que, contrairement au RVB , le HSV sépare la luma , ou l’intensité de l’image, de la chrominance ou des informations de couleur. Ceci est très utile dans de nombreuses applications. Par exemple, si vous souhaitez effectuer une égalisation d'histogramme d'une image couleur, vous souhaiterez probablement le faire uniquement sur la composante d'intensité et laisser les composantes de couleur seules. Sinon, vous obtiendrez des couleurs très étranges.
En vision par ordinateur, vous souhaitez souvent séparer les composants couleur de l'intensité pour différentes raisons, telles que la robustesse aux changements d'éclairage ou la suppression des ombres.
Notez cependant que le HSV est l’un des nombreux espaces colorimétriques qui séparent la couleur de l’intensité (voir YCbCr, Lab, etc.). HSV est souvent utilisé simplement parce que le code permettant la conversion entre RVB et HSV est largement disponible et peut également être facilement implémenté. Par exemple, la boîte à outils de traitement d'images pour MATLAB comprend des fonctions rgb2hsv
et hsv2rgb
.
Les informations de couleur sont généralement beaucoup plus bruyantes que les informations HSV.
Laissez-moi vous donner un exemple: moi-même et des amis avons participé à un projet traitant de la reconnaissance des panneaux de signalisation dans des vidéos de scènes réelles (bruit, ombres et parfois occlusion). Cela faisait partie d'un projet plus vaste, ce qui nous a permis de mettre à l'essai différentes approches de ce problème particulier (et de réutiliser des approches plus anciennes). Je n'ai pas essayé moi-même l'approche basée sur les couleurs, mais je me souviens d'une information intéressante: _La composante RVB dominante d'un panneau STOP n'était souvent pas rouge! (principalement à cause des ombres)
Vous pouvez généralement obtenir de meilleures informations d'un espace de couleurs HSV . Laissez-moi essayer à nouveau de donner un exemple d'expérience personnelle: essayez d'imaginer que vous avez l'image d'un avion monochrome avec une ombre. Dans l'espace colorimétrique RVB, la partie ombre aura probablement des caractéristiques très différentes de celle de la partie sans ombre. Dans l’espace colorimétrique HSV, la composante de teinte des deux patchs a plus de chances d’être similaire: l’ombre influence principalement la valeur , ou peut-être la composante de saturation , tandis que la teinte indique la "couleur" principale (sans sa luminosité et son effet dilué par le blanc). / black) ne devrait pas changer autant.
Si ces explications ne vous semblent pas intuitives, je suggère:
essayez de voir les raisons pour lesquelles ce type de représentation des couleurs a été développé: il s’agit toujours d’une manière ou d’une autre, basée sur une vision de l’interprétation humaine de la couleur
par exemple les enfants ne sont pas vraiment comme très colorés == valeur des objets, ils préfèrent très satuated objets, des objets dont la couleur est intense et non dilué
Après avoir compris cela et développé une certaine intuition, vous devriez jouer avec les images: essayez de décomposer diverses images dans leurs composants RVB et HSV.
Votre objectif serait de voir et de comprendre une différence entre ces décompositions pour les images contenant des ombres, une forte illumination, une réflexion de la lumière.
Si vous aimez jouer avec un type particulier d'images, essayez de les décomposer: qui sait, peut-être que le RVB est vraiment plus adapté à vos besoins que le HSV :)
Utiliser uniquement le composant Teinte rend l'algorithme moins sensible (sinon invariant) aux variations d'éclairage.
Une autre option populaire est l'espace colorimétrique LAB, où les canaux AB représentent la couleur et les distances euclidiennes de l'espace AB correspondent mieux à la perception humaine de la couleur. Là encore, ignorer le canal L (Luminance) rend l’algorithme plus robuste face aux différences d’éclairage.
La meilleure réponse que je puisse comprendre est la suivante: le RVB concerne les "détails de mise en œuvre" concernant la façon dont le RVB affiche la couleur, et le HSV, les composants "de couleur réelle". Une autre façon de dire que ce serait RVB est la façon dont les ordinateurs traitent la couleur, et HSV essaye de capturer les composants de la façon dont nous percevons la couleur.
Je vais élaborer:
La couleur est une perception basée sur les ondes électromagnétiques. Les propriétés naturelles de ces ondes sont, par exemple, l'intensité et la fréquence. Si nous balayions la fréquence d'une onde lumineuse de l'infrarouge à l'ultra-violet, nous percevrions visuellement une variation de couleur le long des couleurs de l'arc-en-ciel. Les couleurs arc-en-ciel peuvent être considérées comme des "couleurs pures" car elles sont représentées par des ondes monofréquences.
Maintenant, l'œil humain ne peut que réagir ou "résonner" à trois fréquences lumineuses principales, à savoir le rouge, le vert et le bleu. Le fait est que cette réponse est non linéaire, de sorte que la rétine peut distinguer une couleur pure donnée (et implicitement sa "fréquence") par la réponse combinée des trois composantes de couleur .
L’espace colorimétrique RVB n’existe en tant que tel que pour imiter le fonctionnement interne de notre rétine, de sorte qu’une vaste majorité de couleurs puissent être représentées sur des écrans d’ordinateur au moyen d’une couleur commode (d’un point de vue informatique) à 24 bits par pixel. codage. L'espace colorimétrique RVB n'a pas de relation intrinsèque avec les propriétés naturelles de la couleur, ni avec l'interprétation humaine de la couleur.
Par exemple, toute opération arithmétique exécutée canal par canal dans un espace RVB (par exemple, la génération de dégradés de couleurs) donne des résultats très bruts, voire carrément "erronés". C'est pourquoi il est conseillé de créer des tables de couleurs en convertissant les arrêts de couleur RVB en d'autres espaces colorimétriques (HLS, Lab, etc.), en effectuant les interpolations, puis en reconvertissant les valeurs interpolées en RVB.
J'espère que cela t'aides!
HSV signifie Hue-Saturation-Value. Il s’agit en fait d’un type de représentation du plan couleur (type RVB, YCbCr, etc.).
Il s’agit d’un format de représentation des couleurs indépendant du périphérique: la représentation des couleurs HSV est utile pour détecter des types de couleurs spécifiques, par exemple: couleur de peau, couleur de feu, etc.
Matlab
fonction pour convertir une image RVB en plan HSV est rgb2hsv('/inputimage_name')
.
Je vais vous donner un exemple pour comprendre. Comme notre main a de nombreuses parties paume, dos, et au-dessous. Nous pouvons voir des variations de couleur différentes dans ces zones, mais la teinte de toutes ces régions ne varie pas beaucoup. La valeur de teinte peut donc être utile pour la segmentation manuelle.
Je ne connais rien qui soit spécialement meilleur avec HSV que YUV ou LAB qui le rendrait meilleur pour l'extraction de caractéristiques et l'invariance ou la visualisation de l'éclairage. Je suppose que HSV est le plus couramment utilisé en raison de sa convention et de sa continuité: il est plus facile de comparer les résultats et de communiquer les uns avec les autres si vous utilisez le même espace colorimétrique.
Cela dit, le HSV (par opposition au RVB) est utilisé en vision par ordinateur pour deux raisons que je connais:
Comme d'autres l'ont mentionné, il est avantageux de séparer la luma de la chrominance. La luma varie beaucoup dans la scène en fonction de la quantité de lumière qui tombe sur l'objet. La chrominance, en revanche, est plus corrélée aux propriétés intrinsèques de l'objet et, pour des images correctement équilibrées en blanc, elle est plus ou moins invariante.
Cependant, je voudrais ajouter que HSV, HSL, ou en fait tout espace colorimétrique avec paramétrisation polaire du plan chromatique, sont de mauvais choix à cet égard. En effet, ils introduisent une singularité dans la ligne de gris (quelle nuance est grise?), Ce qui les rend très sensibles au bruit et à la balance des blancs. De plus, comparer entre deux couleurs dans un système de coordonnées polaires n'est pas aussi simple. Notez également que ni la valeur dans HSV ni la luminosité dans HSL ne correspondent à la luminosité perçue par l'homme ni à aucune autre mesure physique de l'énergie.
Il existe de nombreux espaces colorimétriques linéaires qui procurent la même séparation luma-chroma tout en préservant la linéarité (YCbCr, YUV) ou en modélisant correctement la vision humaine (LUV, LAB). Avec ceux-ci, vous pouvez comparer deux couleurs en utilisant une norme Euclidienne L2 sur leurs chromaticités, ce qui donne un algorithme plus robuste.
Pourquoi HSV / HSL sont-ils utilisés si souvent? Difficile de donner une réponse objective. D'après mon expérience, c'est principalement dû à l'ignorance et à la disponibilité des routines de conversion RVB-> HSV. Dû travailler avec du code dont les auteurs ne comprenaient pas la correction gamma, sans parler des différents espaces colorimétriques. Vu le code qui convertissait RVB en HSV puis segmentait l'image en fonction de la teinte, sans tenir compte du fait qu'il s'agissait d'une quantité modulaire. Je pense que nous pouvons convenir que ces décisions ne sont pas conscientes et qu’elles soient fondées sur une raison quelconque.
Le modèle de couleur HSV est plus corrélé à la façon dont les humains perçoivent les objets colorés, par rapport à RVB, YUV, Lab, etc.
Nous voyons quelle est la couleur de l'objet (teinte), à quel point est-il saturé (saturation) et quelle quantité de lumière blanche lui tombe dessus (intesity).