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?
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?
Risposte:
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 rgb2hsv
e hsv2rgb
.
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 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 :)
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.
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!
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')
.
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.
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:
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.