Perché utilizziamo lo spazio colore HSV così spesso nella visione e nell'elaborazione delle immagini?


64

Vedo lo spazio colore HSV utilizzato ovunque: per tracciamento, rilevamento umano, ecc ... Mi chiedo, perché? Che cos'è questo spazio colore che lo rende migliore dell'utilizzo di RGB?


3
Questa è un'ottima domanda A mio avviso, trarrebbe beneficio dall'essere un po 'più dettagliato: cos'è l'HSV, cos'è l'RGB. Poiché la maggior parte delle risposte confronta HSV con RGB, il titolo potrebbe essere riformulato per confrontare questi due spazi colore.
PhilMacKay,

2
Un'altra buona domanda potrebbe essere: "Perché viene utilizzato HSV ovunque anziché HSL?"
posfan12,

Risposte:


60

La semplice risposta è che a differenza di RGB , HSV separa la luminanza , o l'intensità dell'immagine, dal croma o dalle informazioni sul colore. Questo è molto utile in molte applicazioni. Ad esempio, se si desidera eseguire l'equalizzazione dell'istogramma di un'immagine a colori, probabilmente si desidera farlo solo sulla componente di intensità e lasciare da sole le componenti a colori. Altrimenti otterrai colori molto strani.

Nella visione artificiale spesso si desidera separare i componenti di colore dall'intensità per vari motivi, come la robustezza ai cambiamenti di illuminazione o la rimozione delle ombre.

Si noti, tuttavia, che HSV è uno dei tanti spazi colore che separano il colore dall'intensità (vedere YCbCr, Lab, ecc.). L'HSV viene spesso utilizzato semplicemente perché il codice per la conversione tra RGB e HSV è ampiamente disponibile e può anche essere facilmente implementato. Ad esempio, la casella degli strumenti di elaborazione delle immagini per MATLAB include funzioni rgb2hsve hsv2rgb.


42

Le informazioni sul colore sono generalmente molto più rumorose rispetto alle informazioni HSV.

Lasciate che vi faccia un esempio: io e alcuni amici siamo stati coinvolti in un progetto relativo al riconoscimento dei segnali stradali nei video di scene reali (rumore, ombre e talvolta occlusione presente). Faceva parte di un progetto più ampio, quindi ci ha concesso il tempo di provare diversi approcci a questo particolare problema (e riutilizzare approcci più vecchi). Non ho provato da solo l'approccio basato sul colore, ma ricordo un'informazione interessante: _Il componente RGB dominante in un segnale di STOP spesso non era rosso! (principalmente a causa delle ombre)

Di solito è possibile ottenere informazioni migliori da uno spazio colore HSV . Vorrei provare di nuovo a dare un esempio di esperienza personale: prova a immaginare di avere un'immagine di un piano monocromatico con un'ombra su di esso. Nello spazio colore RGB, la parte ombra avrà probabilmente caratteristiche molto diverse rispetto alla parte senza ombre. Nello spazio dei colori HSV, è più probabile che la componente di tonalità di entrambe le patch sia simile: l'ombra influenzerà principalmente il valore , o forse il componente di satuazione , mentre la tonalità , indicando il "colore" primario (senza la sua luminosità e diluizione dal bianco / nero) non dovrebbe cambiare molto.

Se questa spiegazione non ti sembra intuitiva, ti suggerisco:

  • prova a comprendere meglio i componenti utilizzati per rappresentare un colore nello spazio dei colori HSV e rinnova la tua conoscenza di RGB
  • prova a vedere i motivi per cui sono stati sviluppati questi tipi di rappresentazione del colore: è sempre in qualche modo, basato su una visione dell'interpretazione umana del colore

    ad esempio, ai bambini in realtà non piacciono gli oggetti altamente colorati == apprezzati , preferiscono oggetti altamente satuati , oggetti in cui il colore è intenso e non diluito

  • dopo aver ottenuto questo e sviluppato un po 'di intuizione, dovresti giocare con le immagini: prova a decomporre varie immagini nei loro componenti RGB e HSV

    Il tuo obiettivo sarebbe quello di vedere e comprendere una differenza in queste decomposizioni per immagini che contengono ombre, forte illuminazione, riflesso della luce.

  • se hai un particolare tipo di immagini con cui ti piace giocare, prova a scomporle: chissà, forse RGB è davvero più adatto alle tue esigenze rispetto a HSV :)


1
Se è un'ombra, dovrebbe cambiare solo la luminosità, non la saturazione.
Andrey Rubshtein,

@Andrey, come ho detto, non ho lavorato personalmente sull'approccio basato sul colore, ma posso ipotizzare che se non fosse solo un'ombra - probabilmente anche un'illuminazione indiretta dall'ambiente circostante o qualcosa di simile ha avuto un ruolo.
penelope,

1
Hai ragione. Tuttavia, nel caso dell'illuminazione indiretta, anche la tonalità potrebbe cambiare.
Andrey Rubshtein,

1
@Andrey Da qui la mia formulazione: "più probabile", "simile", "influenza principale", ... Dopotutto, non stavo spiegando HSV, solo dando alcuni esempi e ipotesi educate basate sull'esperienza. E il modo migliore per scegliere lo spazio colore più adatto a qualsiasi applicazione è giocare con il database delle immagini e diversi spazi colore
penelope,

3
Qualunque cosa nell'ombra e quindi non illuminata dalla fonte di luce primaria (il sole) viene illuminata dalla fonte di luce secondaria - il cielo, che è una luce gigante, luminosa e molto blu. Per gli occhi umani il rosso sembra ancora rosso poiché i nostri occhi effettuano misurazioni di colore relative invece del colore assoluto, motivo per cui le tue foto interne, senza flash, sembrano più gialle di quanto pensi che dovrebbero. E sono assolutamente d'accordo su come giocare con il tuo database di immagini.
John Robertson,

8

L'uso del solo componente Hue rende l'algoritmo meno sensibile (se non invariante) alle variazioni di illuminazione.

Un'altra opzione popolare è lo spazio cromatico LAB, in cui i canali AB rappresentano il colore e le distanze euclidee nello spazio AB che corrispondono meglio alla percezione umana del colore. Ancora una volta, ignorare il canale L (Luminanza) rende l'algoritmo più robusto alle differenze di illuminazione.


7

La risposta migliore che posso immaginare è: RGB ha a che fare con i "dettagli di implementazione" relativi al modo in cui RGB visualizza il colore e HSV ha a che fare con i componenti del "colore reale". Un altro modo per dire che sarebbe RGB è il modo in cui i computer trattano il colore e HSV prova a catturare i componenti del modo in cui gli umani percepiscono il colore.

Elaborerò:

Il colore è una percezione basata sulle onde elettromagnetiche. Le proprietà naturali di queste onde sono, ad esempio intensità e frequenza. Se spazziamo la frequenza di un'onda luminosa da infrarossi a ultravioletti, percepiremmo visivamente una variazione di colore lungo i colori dell'arcobaleno. I colori dell'arcobaleno potrebbero essere considerati "colori puri" perché sono rappresentati da onde a frequenza singola.

Ora l'occhio umano può solo rispondere, o "risuonare" a tre frequenze di luce principali, non sorprendentemente rosse, verdi e blu. Il fatto è che questa risposta non è lineare, quindi la retina può distinguere un dato colore puro (e implicitamente la sua "frequenza") dalla risposta combinata dei tre componenti di colore .

Lo spazio cromatico RGB esiste come tale solo per imitare il funzionamento interno della nostra retina, in modo che una vasta maggioranza di colori possa essere rappresentata sui display dei computer mediante un comodo colore (24 dal computer) 24 bit per pixel codifica. Lo spazio cromatico RGB non ha alcuna relazione intrinseca con le proprietà naturali del colore, né con l'interpretazione umana del colore.

Ad esempio, qualsiasi operazione aritmetica eseguita in termini di canali nello spazio RGB (ad esempio, generazione di sfumature di colore) produce risultati molto rozzi o addirittura "errati". Ecco perché si consiglia di creare mappe di colore convertendo le interruzioni di colore da RGB in altri spazi colore (HLS, Lab, ecc.), Eseguendo le interpolazioni, quindi riconvertendo i valori interpolati in RGB.

Spero che sia di aiuto!


2
Non sarei d'accordo. Esistono tre domini, non due: umano, computer e fisica. Il modello RGB è derivato dall'occhio umano, che ha tre recettori di colore.
Salteredi

@MSalters Penso che stiamo parlando delle stesse cose (anche se forse non mi sono reso completamente chiaro). I display RGB sono realizzati per adattarsi al nostro sistema di percezione del colore. Hanno una controparte computerizzata, le "coordinate" (R, G, B). Dato che queste coordinate sono associate all'implementazione piuttosto che alle proprietà fisiche, "di natura reale" del colore, non sono adatte per eseguire alcune elaborazioni matematiche, ad esempio interpolazione del gradiente percettivamente lineare, correzione del colore, operazioni di luminosità e saturazione, ecc.
heltonbiker

2

HSV è l'acronimo di Hue-Saturation-Value. In realtà è un tipo di rappresentazione del piano colore (come RGB, YCbCr ecc.).

È un formato di rappresentazione del colore indipendente dal dispositivo: la rappresentazione del colore HSV è utile per rilevare tipi di colore specifici, ad esempio: colore della pelle, colore del fuoco ecc.

Matlabè la funzione per convertire un'immagine RGB in un piano HSV rgb2hsv('/inputimage_name').


1

Ti farò un esempio per capire. Come se la nostra mano avesse molte parti di palma, palmo posteriore e sotto di essa. possiamo vedere diverse variazioni di colore in queste aree, ma la tonalità per tutte queste regioni non varia molto, quindi il valore della tonalità può essere utile nella segmentazione della mano.


1

Non so nulla di ciò che è particolarmente meglio con HSV rispetto a YUV o LAB che lo renderebbe migliore per l'estrazione delle caratteristiche e l'invarianza dell'illuminazione o la visualizzazione. Immagino che HSV sia il più comunemente usato per convenzione e continuità: è più facile confrontare i risultati e comunicare tra loro se entrambi usano lo stesso spazio colore.

Detto questo, HSV (al contrario di RGB) viene utilizzato nella visione artificiale per 2 motivi che conosco:

  1. Visualizzazione . Ogni volta che si dispone di informazioni direzionali densamente su un'immagine, HSV è un buon spazio colore per la visualizzazione. Invece di tracciare piccoli vettori su un'immagine (ingombreranno tutto), puoi tracciare il colore con HSV, mettendo il vettore direzionale mappato su H (angolo del vettore) e S (magnitudine del vettore). Questo lascia il componente Valore, che può essere impostato in qualsiasi numero di modi a seconda di ciò che si desidera ottenere. Vedi l'esempio seguente dal set di dati del flusso ottico di Middlebury. L'HSV viene utilizzato per visualizzare le indicazioni densamente.

Esempio dal DB di Middlebury sul flusso ottico

  1. Invarianza dell'estrazione e dell'illuminazione delle caratteristiche , come spiegato nelle altre risposte.

0

Come altri hanno già detto, è utile separare il luma dal croma. La luminanza varia notevolmente nella scena in base alla quantità di luce che cade sull'oggetto. Chroma, d'altra parte, si correla meglio con le proprietà intrinseche dell'oggetto e per immagini adeguatamente bilanciate in bianco è più o meno invariante.

Tuttavia, vorrei aggiungere che HSV, HSL, o qualsiasi spazio cromatico con parametrizzazione polare del piano cromatico, sono scelte sbagliate a tale scopo. Questo perché introducono una singolarità sulla linea dei grigi (quale tonalità è grigia?), Rendendoli molto sensibili al rumore e al bilanciamento del bianco. Inoltre, il confronto tra due colori in un sistema di coordinate polari non è così semplice. Si noti inoltre che né il valore in HSV né la leggerezza in HSL corrispondono alla leggerezza percepita dall'uomo o a qualsiasi altra misura fisica di energia.

Ci sono molti spazi colore lineari che danno la stessa separazione luma-croma preservando la linearità (YCbCr, YUV) o modellando correttamente la visione umana (LUV, LAB). Con quelli puoi confrontare due colori usando una norma Euclidea L2 sulle loro cromaticità, risultando in un algoritmo più robusto nel complesso.

Perché allora HSV / HSL sono usati così spesso? Difficile dare una risposta obiettiva. Dalla mia esperienza è principalmente dovuto all'ignoranza e alla disponibilità di routine di conversione RGB-> HSV. Doveva lavorare con un codice i cui autori non capivano la correzione gamma, e tanto meno diversi spazi colore. Il codice visto che ha convertito RGB in HSV ha quindi segmentato l'immagine in base alla tonalità, ignorando il fatto che si tratta di una quantità modulare. Penso che possiamo essere d'accordo sul fatto che quelle non erano decisioni consapevoli supportate da qualsiasi motivo.


-1

Il modello di colore HSV è più correlato al modo in cui gli esseri umani vedono gli oggetti colorati, rispetto a RGB, YUV, Lab ecc.

Vediamo di che colore è l'oggetto (Tonalità), quanto è saturo (Saturazione) e quanta luce bianca cade su di esso (Intensità).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.