Ich sehe den HSV-Farbraum, der überall verwendet wird: zum Verfolgen, Erkennen von Personen usw. Ich frage mich, warum? Was macht diesen Farbraum besser als die Verwendung von RGB?
Ich sehe den HSV-Farbraum, der überall verwendet wird: zum Verfolgen, Erkennen von Personen usw. Ich frage mich, warum? Was macht diesen Farbraum besser als die Verwendung von RGB?
Antworten:
Die einfache Antwort ist , dass im Gegensatz zu RGB , HSV trennt Luma , oder die Bildintensität, von Chroma oder der Farbinformation. Dies ist in vielen Anwendungen sehr nützlich. Wenn Sie beispielsweise einen Histogrammausgleich für ein Farbbild durchführen möchten, möchten Sie dies wahrscheinlich nur für die Intensitätskomponente tun und die Farbkomponenten in Ruhe lassen. Andernfalls erhalten Sie sehr merkwürdige Farben.
In der Bildverarbeitung möchten Sie häufig Farbkomponenten aus verschiedenen Gründen von der Intensität trennen, z. B. aus Gründen der Robustheit gegenüber Änderungen der Beleuchtung oder zum Entfernen von Schatten.
Beachten Sie jedoch, dass HSV einer von vielen Farbräumen ist, die Farbe und Intensität trennen (siehe YCbCr, Lab usw.). HSV wird oft nur verwendet, weil der Code für die Konvertierung zwischen RGB und HSV allgemein verfügbar ist und auch leicht implementiert werden kann. Beispielsweise enthält die Image Processing Toolbox für MATLAB die Funktionen rgb2hsv
und hsv2rgb
.
Die Farbinformationen sind in der Regel viel stärker als die HSV-Informationen.
Lassen Sie mich Ihnen ein Beispiel geben: Ich und einige Freunde waren an einem Projekt beteiligt, das sich mit der Erkennung von Verkehrszeichen in realen Szenenvideos befasste (Geräusche, Schatten und manchmal Okklusion vorhanden). Es war Teil eines größeren Projekts, sodass wir Zeit hatten, verschiedene Ansätze für dieses bestimmte Problem auszuprobieren (und ältere Ansätze wiederzuverwenden). Ich habe es selbst nicht mit einem farbbasierten Ansatz versucht, erinnere mich aber an eine interessante Information: _Die dominierende RGB-Komponente in einem STOP-Zeichen war oft nicht rot! (meistens wegen der Schatten)
Normalerweise erhalten Sie bessere Informationen aus einem HSV-Farbraum . Lassen Sie mich noch einmal versuchen, ein persönliches Erlebnisbeispiel zu nennen: Stellen Sie sich vor, Sie hätten ein Bild einer einfarbigen Ebene mit einem Schatten darauf. Im RGB-Farbraum hat der Schattenbereich höchstwahrscheinlich andere Eigenschaften als der Bereich ohne Schatten. Im HSV-Farbraum ist die Farbtonkomponente beider Patches mit größerer Wahrscheinlichkeit ähnlich: Der Schatten beeinflusst in erster Linie den Wert oder möglicherweise die Sättigungskomponente , während der Farbton die primäre "Farbe" angibt (ohne Helligkeit und Verdünnung durch Weiß) / schwarz) sollte sich nicht so sehr ändern.
Wenn diese Erklärungen für Sie nicht intuitiv klingen, schlage ich vor:
Probieren Sie die Gründe aus, warum diese Art der Farbdarstellung entwickelt wurde: Sie basiert immer auf einer bestimmten Sichtweise der menschlichen Farbinterpretation
zB Kinder eigentlich nicht wie stark gefärbt == bewertet Objekte, sie bevorzugen sehr satuated Objekte, Objekte , in denen die Farbe ist intensiv und verwässert
Nachdem Sie dies verstanden und eine gewisse Intuition entwickelt haben, sollten Sie mit Bildern spielen: Versuchen Sie, verschiedene Bilder in ihre RGB- und HSV-Komponenten zu zerlegen
Ihr Ziel wäre es, einen Unterschied in diesen Zerlegungen für Bilder zu erkennen und zu verstehen , die Schatten, starke Beleuchtung und Lichtreflexion enthalten.
Wenn Sie eine bestimmte Art von Bildern haben, mit denen Sie gerne spielen, versuchen Sie, sie zu zerlegen: Wer weiß, vielleicht ist RGB wirklich besser für Ihre Bedürfnisse geeignet als HSV :)
Wenn nur die Farbtonkomponente verwendet wird, reagiert der Algorithmus weniger empfindlich (wenn nicht sogar unveränderlich) auf Beleuchtungsschwankungen.
Eine weitere beliebte Option ist der LAB-Farbraum, bei dem die AB-Kanäle die Farbe darstellen und die euklidischen Abstände im AB-Raum der menschlichen Farbwahrnehmung besser entsprechen. Das Ignorieren des L-Kanals (Luminanz) macht den Algorithmus wieder robuster gegenüber Beleuchtungsunterschieden.
Die beste Antwort, die ich finden kann, ist: RGB hat mit "Implementierungsdetails" zu tun, was die Art und Weise betrifft, in der RGB Farben anzeigt, und HSV hat mit den "tatsächlichen Farbkomponenten" zu tun. Eine andere Möglichkeit, dies als RGB zu bezeichnen, ist die Art und Weise, wie Computer Farben behandeln, und HSV versucht, die Komponenten der Art und Weise zu erfassen, in der wir Menschen Farben wahrnehmen .
Ich werde näher darauf eingehen:
Farbe ist eine Wahrnehmung, die auf elektromagnetischen Wellen basiert. Natürliche Eigenschaften dieser Wellen sind beispielsweise Intensität und Frequenz. Wenn wir die Frequenz einer Lichtwelle von Infrarot bis Ultraviolett abtasten, würden wir eine Farbabweichung entlang der Regenbogenfarben visuell wahrnehmen. Regenbogenfarben können als "reine Farben" betrachtet werden, da sie durch Einfrequenzwellen dargestellt werden.
Jetzt kann das menschliche Auge nur auf drei Hauptlichtfrequenzen, nicht überraschend Rot, Grün und Blau, reagieren oder "mitschwingen". Tatsache ist, dass diese Reaktion nicht linear ist, so dass die Netzhaut eine bestimmte reine Farbe (und implizit ihre "Frequenz") durch die kombinierte Reaktion der drei Farbkomponenten unterscheiden kann .
Der RGB-Farbraum existiert als solcher nur, um die internen Abläufe unserer Netzhaut nachzuahmen, so dass ein Großteil der Farben auf Computerbildschirmen mit einer praktischen (aus Computersicht) 24-Bit-pro-Pixel-Farbe dargestellt werden kann Kodierung. Der RGB-Farbraum steht in keiner Beziehung zu den natürlichen Farbeigenschaften und auch nicht zur menschlichen Farbinterpretation.
Beispielsweise führt jede kanalweise durchgeführte arithmetische Operation im RGB-Raum (zum Beispiel die Erzeugung von Farbverläufen) zu sehr groben oder sogar eindeutig "falschen" Ergebnissen. Aus diesem Grund wird empfohlen, Farbkarten zu erstellen, indem Sie die Farbstopps von RGB in andere Farbräume (HLS, Lab usw.) konvertieren, die Interpolationen durchführen und die interpolierten Werte dann wieder in RGB konvertieren.
Hoffe das hilft!
HSV steht für Hue-Saturation-Value. Es ist eigentlich eine Art Farbebenendarstellung (wie RGB, YCbCr usw.).
Es ist ein geräteunabhängiges Farbdarstellungsformat: Die HSV-Farbdarstellung ist nützlich, um bestimmte Farbtypen zu erkennen, z. B. Hautfarbe, Feuerfarbe usw.
Matlab
Funktion zum Konvertieren eines RGB-Bildes in die HSV-Ebene ist rgb2hsv('/inputimage_name')
.
Ich werde Ihnen ein Beispiel geben, um es zu verstehen. Wie unsere Hand hat viele Teile Handfläche, Handrücken und darunter. In diesen Bereichen treten unterschiedliche Farbabweichungen auf, aber der Farbton in all diesen Regionen variiert nicht stark. Daher kann der Farbtonwert bei der Handsegmentierung hilfreich sein.
Es gibt nichts, von dem ich weiß, dass es mit HSV im Vergleich zu YUV oder LAB besonders besser ist, was es besser für die Merkmalsextraktion und Beleuchtungsinvarianz oder -visualisierung machen würde. Ich denke, HSV wird aufgrund von Konventionen und Kontinuität häufiger verwendet: Es ist einfacher, Ergebnisse zu vergleichen und miteinander zu kommunizieren, wenn Sie beide den gleichen Farbraum verwenden.
Vor diesem Hintergrund wird HSV (im Gegensatz zu RGB) in der Bildverarbeitung aus zwei Gründen verwendet, die ich kenne:
Wie bereits erwähnt, ist es vorteilhaft, die Luma von der Chroma zu trennen. Die Luma variiert stark in der Szene basierend auf der Menge des Lichts, das auf das Objekt fällt. Chroma hingegen korreliert besser mit den inneren Eigenschaften des Objekts und ist für richtig weißabgeglichene Bilder mehr oder weniger unveränderlich.
Ich möchte jedoch hinzufügen, dass HSV, HSL oder tatsächlich jeder Farbraum mit polarer Parametrisierung der Chroma-Ebene für diesen Zweck eine schlechte Wahl sind. Das liegt daran, dass sie eine Singularität in die Graustufen einführen (welcher Farbton ist grau?), Wodurch sie sehr empfindlich gegenüber Rauschen und Weißabgleich sind. Außerdem ist der Vergleich zwischen zwei Farben in einem Polarkoordinatensystem nicht so einfach. Beachten Sie auch, dass weder der Wert in HSV noch die Helligkeit in HSL der vom Menschen wahrgenommenen Helligkeit oder einem anderen physikalischen Energiemaß entsprechen.
Es gibt viele lineare Farbräume, die die gleiche Luma-Chroma-Trennung ergeben, während die Linearität (YCbCr, YUV) oder das menschliche Sehvermögen (LUV, LAB) erhalten bleibt. Mit diesen können Sie zwei Farben unter Verwendung einer euklidischen L2-Norm hinsichtlich ihrer Chromatizität vergleichen, was insgesamt zu einem robusteren Algorithmus führt.
Warum werden HSV / HSL dann so oft eingesetzt? Schwer eine objektive Antwort zu geben. Aus meiner Erfahrung ist dies hauptsächlich auf Unkenntnis und die Verfügbarkeit von RGB-> HSV-Konvertierungsroutinen zurückzuführen. Musste mit Code arbeiten, dessen Autoren die Gammakorrektur nicht verstanden haben, geschweige denn mit verschiedenen Farbräumen. Wenn Sie Code sehen, der RGB in HSV konvertiert hat, haben Sie das Bild basierend auf dem Farbton segmentiert, ohne die Tatsache zu berücksichtigen, dass es sich um eine modulare Größe handelt. Ich denke, wir können zustimmen, dass dies keine bewussten Entscheidungen waren, die aus irgendeinem Grund unterstützt wurden.