Warum verwenden wir den HSV-Farbraum so oft für die Bildverarbeitung?


64

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?


3
Das ist eine sehr gute Frage. Meiner Meinung nach würde es von Vorteil sein, etwas detaillierter zu sein: Was ist HSV, was ist RGB? Da die meisten Antworten HSV mit RGB vergleichen, könnte der Titel umformuliert werden, um diese beiden Farbräume zu vergleichen.
PhilMacKay

2
Eine andere gute Frage könnte lauten: "Warum wird HSV überall anstelle von HSL eingesetzt?"
posfan12

Antworten:


60

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 rgb2hsvund hsv2rgb.


42

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:

  • Versuchen Sie, die Komponenten, die zur Darstellung einer Farbe im HSV-Farbraum verwendet werden, besser zu verstehen, und erneuern Sie Ihre RGB-Kenntnisse
  • 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 :)


1
Wenn es sich um einen Schatten handelt, sollte sich nur die Helligkeit ändern, nicht die Sättigung.
Andrey Rubshtein

@Andrey, wie gesagt, ich habe selbst nicht an dem farbbasierten Ansatz gearbeitet, aber ich kann spekulieren, dass wenn nicht nur ein Schatten wäre - wahrscheinlich spielte auch eine indirekte Beleuchtung aus der Umgebung oder ähnliches eine Rolle.
Penelope

1
Du hast recht. Bei indirekter Beleuchtung kann sich jedoch auch der Farbton ändern.
Andrey Rubshtein

1
@Andrey Daher mein Wortlaut: "wahrscheinlicher", "ähnlich", "hauptsächlich beeinflussen", ... Immerhin habe ich den HSV nicht erklärt, sondern nur einige Beispiele angeführt und erfahrungsbasierte Vermutungen angestellt. Und die beste Möglichkeit, den am besten geeigneten Farbraum für jede Anwendung auszuwählen, besteht darin, mit Ihrer Bilddatenbank und verschiedenen Farbräumen herumzuspielen
penelope

3
Alles im Schatten und daher nicht von der primären Lichtquelle (der Sonne) beleuchtet, wird von der sekundären Lichtquelle beleuchtet - dem Himmel, der ein riesiges, helles und sehr blaues Licht ist. Für menschliche Augen sieht Rot immer noch rot aus, da unsere Augen relative Farbmessungen anstelle von absoluten Farben durchführen. Deshalb sehen Ihre Innenaufnahmen ohne Blitz mehr gelb aus, als Sie denken. Und ich bin absolut einverstanden, mit Ihrer eigentlichen Bilddatenbank herumzuspielen.
John Robertson

8

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.


7

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!


2
Ich würde nicht zustimmen. Es gibt drei Bereiche, nicht zwei: Mensch, Computer und Physik. Das RGB-Modell wird vom menschlichen Auge abgeleitet, das drei Farbrezeptoren hat.
MSalters

@MSalters Ich denke, wir reden über die gleichen Dinge (obwohl ich mich vielleicht nicht ganz klar ausgedrückt habe). Die RGB-Displays sind auf unser Farbwahrnehmungssystem abgestimmt. Sie haben ein Computer-Gegenstück, die (R, G, B) "Koordinaten". Da diese Koordinaten der Implementierung der physikalischen "echten" Farbeigenschaften entsprechen, eignen sie sich nicht für eine mathematische Verarbeitung, z. B. Wahrnehmungslineare Gradienteninterpolation, Farbkorrektur, Helligkeits- und Sättigungsoperationen usw.
heltonbiker

2

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.

MatlabFunktion zum Konvertieren eines RGB-Bildes in die HSV-Ebene ist rgb2hsv('/inputimage_name').


1

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.


1

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:

  1. Visualisierung . Immer wenn Sie direktionale Informationen dicht über einem Bild haben, ist HSV ein guter Farbraum für die Visualisierung. Anstatt kleine Vektoren über ein Bild zu zeichnen (sie werden alles durcheinander bringen), können Sie mit HSV Farben zeichnen, indem Sie den Richtungsvektor auf H (Vektorwinkel) und S (Vektorgröße) abbilden. Dadurch bleibt die Value-Komponente erhalten, die auf verschiedene Arten festgelegt werden kann, je nachdem, was Sie erreichen möchten. Siehe das folgende Beispiel aus dem Datensatz für den optischen Fluss von Middlebury. HSV wird verwendet, um Richtungen dicht anzuzeigen.

Beispiel aus Middlebury DB zum optischen Fluss

  1. Merkmalsextraktion und Beleuchtungsinvarianz , wie in den anderen Antworten erläutert.

0

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.


-1

Das HSV-Farbmodell ist im Vergleich zu RGB, YUV, Lab usw. stärker mit der Wahrnehmung farbiger Objekte durch Menschen korreliert.

Wir sehen, welche Farbe das Objekt hat (Farbton), wie stark es gesättigt ist (Sättigung) und wie stark weißes Licht darauf fällt (Intensität).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.