semmixkolor i percepcja

Modele HLS i HSI

Dwa modele, które opisują kolor tak, jak opisuje go człowiek: przez odcień, nasycenie i to, jak bardzo kolor jest jasny. Różnią się tym, co rozumieją przez "jasny", i to ma większe znaczenie, niż się wydaje.

Po co modele oparte na odcieniu

Model RGB mówi, ile czerwonego, zielonego i niebieskiego światła trzeba zmieszać. Dla monitora to naturalne, dla człowieka już nie. Pytanie "jak zrobić ten pomarańczowy trochę bledszym?" nie ma w RGB prostej odpowiedzi, bo zmieniają się wszystkie trzy składowe naraz.

Modele HLS, HSI i HSV rozdzielają kolor na trzy cechy:

Model HLS (HSL)

HLS i HSL to ten sam model, różni się tylko kolejność liter. Przestrzeń ma kształt podwójnego stożka: na dole czerń, na górze biel, na obwodzie środkowego przekroju czyste barwy. Jasność to średnia z największej i najmniejszej składowej RGB:

max = max(R, G, B), min = min(R, G, B), d = max - min L = (max + min) / 2 S = 0 gdy d = 0 S = d / (1 - |2L - 1|) w pozostałych przypadkach H = 60° · ((G - B) / d mod 6) gdy max = R H = 60° · ((B - R) / d + 2) gdy max = G H = 60° · ((R - G) / d + 4) gdy max = B

Składowe R, G, B są tu w zakresie 0..1 (wartość 0..255 dzielimy przez 255). Wynik L i S też jest w zakresie 0..1, H w stopniach.

Ważna cecha HLS: każda czysta barwa ma L = 0,5. Czerwień (255, 0, 0), żółć (255, 255, 0) i błękit (0, 0, 255) mają w HLS tę samą jasność, choć oko widzi żółć jako znacznie jaśniejszą od błękitu. HLS jest wygodny do edycji, ale nie mierzy jasności postrzeganej.

Model HSI

HSI wywodzi się z przetwarzania i analizy obrazu. Intensywność to zwykła średnia trzech składowych, a nasycenie mierzy, jak mało jest w kolorze "wspólnej szarości":

I = (R + G + B) / 3 S = 1 - min(R, G, B) / I (S = 0, gdy I = 0) θ = arccos( ½·[(R - G) + (R - B)] / √[(R - G)² + (R - B)·(G - B)] ) H = θ gdy B ≤ G H = 360° - θ gdy B > G

Odcień w HSI liczy się geometrycznie, jako kąt między wektorem koloru a kierunkiem czerwieni na płaszczyźnie prostopadłej do osi szarości. W HLS i HSV odcień liczy się "po sześciokącie", odcinkami liniowymi. Dla barw leżących dokładnie na osiach oba sposoby dają ten sam wynik, dla pozostałych różnica sięga kilku stopni.

W HSI czyste barwy podstawowe mają I = 1/3, a barwy dopełniające (żółć, cyjan, magenta) I = 2/3. To bliżej odczucia oka niż w HLS, choć nadal daleko od CIELAB, które modeluje jasność postrzeganą.

Przykład krok po kroku

Kolor ceglasto-pomarańczowy RGB (200, 80, 40), czyli #c85028. Po podzieleniu przez 255:

R = 0,7843 G = 0,3137 B = 0,1569 max = 0,7843 min = 0,1569 d = 0,6275

HLS:

L = (0,7843 + 0,1569) / 2 = 0,4706 S = 0,6275 / (1 - |0,9412 - 1|) = 0,6275 / 0,9412 = 0,6667 max = R, więc H = 60° · ((0,3137 - 0,1569) / 0,6275) = 60° · 0,25 = 15° HLS = (15°, 47,1%, 66,7%)

HSI:

I = (0,7843 + 0,3137 + 0,1569) / 3 = 0,4183 S = 1 - 0,1569 / 0,4183 = 0,625 licznik = ½ · (0,4706 + 0,6275) = 0,5490 mianownik = √(0,4706² + 0,6275 · 0,1569) = √0,3199 = 0,5656 θ = arccos(0,9707) = 13,9°, B ≤ G, więc H = 13,9° HSI = (13,9°, 62,5%, 41,8%)

Ten sam kolor ma więc odcień 15° w HLS i 13,9° w HSI, nasycenie 66,7% albo 62,5%, a jasność 47,1% albo 41,8%. Żaden wynik nie jest "błędny", to po prostu różne definicje. Przy przenoszeniu wartości między programami trzeba wiedzieć, którego modelu używa każdy z nich.

Przelicz własny kolor

Kalkulator pokazuje ten sam kolor we wszystkich modelach naraz, także w HSV, CMYK i CIELAB.

HLS, HSI czy HSV?

ModelJasnośćCzysta barwa maTypowe użycie
HLS / HSL(max + min) / 2L = 0,5CSS (hsl()), selektory kolorów
HSV / HSBmaxV = 1programy graficzne, próbniki kolorów
HSI(R + G + B) / 3I = 1/3 lub 2/3analiza i segmentacja obrazu

Wszystkie trzy są przekształceniami RGB, więc dziedziczą jego zależność od urządzenia: ten sam zapis HLS wygląda inaczej na różnych ekranach. Gdy liczy się porównywanie barw tak, jak widzi je człowiek, lepszym wyborem jest CIELAB lub CIELUV.