Kolory i kompresja
20.04.2010 - Krzysztof Dryś
![]() ![]() Czy uważaliście na biologii?Człowiek tak na prawdę widzi tylko trzy kolory: czerwony, zielony i niebieski. Właśnie dlatego obrazek zapisujemy jako trzy macierze R,G i B - jest to sposób dla nas najbardziej naturalny. Jak sami się przed chwilą przekonaliśmy, spośród tych trzech kolorów najlepiej rozróżniamy zielony. Wytłumaczyć to można (nie do końca na poważnie) tym, że ludzie pierwotni większą część swojego czas spędzali w lasach. I dlatego musieli dobrze rozpoznawać rośliny oraz kryjące się między nimi zwierzęta. Jeżeli uważaliście na biologii to wiecie, że w ludzkim oku znajdują się pręciki i czopki. Pierwsze odpowiadają za za widzenie czarno-białe, drugie za widzenie barwne. Pręcików jest dużo więcej i są dużo czulsze. To między innymi dlatego, gdy jest ciemno, nie widzimy kolorów.
No dobrze, ale co to właściwie ma wspólnego z kompresją obrazków? Możemy wykorzystać to, że lepiej rozpoznajemy jasność obiektów niż ich kolor. W tym celu wprowadzimy nową reprezentację obrazków. Do tej pory trzy macierze R,G i B mówiły ile jest poszczególnych kolorów w pikselach. Teraz, zamiast tego, będzie posługiwali się macierzami Jasność piksela
W tym wypadku trudniej będzie o łatwą i ładną interpretację tego, co te macierze zawierają. Pierwsza z nich, macierz
Czy ten wzór jest ciekawy? Zdecydowanie! Przede wszystkim, jest kolejnym potwierdzeniem faktu, który my już przed chwilą zauważyliśmy: nie ma równości między kolorami. Zauważmy bowiem, że współczynniki przy czerwonym, zielonym i niebieskim są różne. Oznacza to, że zielony piksel wydaje się nam jaśniejszy od niebieskiego piksela. Najlepiej zobaczyć to na przykładzie: ![]()
Macierz
To nie są dokładne wzory! Ale dokładne wzory nie są zbyt ciekawe. A my chyba mamy już na dzisiaj dosyć cyferek, prawda? Gdyby ktoś jednak chciał dokładniej poznać podział na składowe YCrCb, to może skorzystać z
artykułu na Wikipedii.
No dobrze, ale po co nam tak właściwie te macierze? I jaki ma to związek z kompresją? Jesteśmy już coraz bliżej odpowiedzi na to pytanie. Najpierw popatrzmy na rozkład naszego obrazka na składowe Y,Cr i Cb:
Gdy rozkładaliśmy obrazek na składowe R,G i B to wszystkie kanały były (do pewnego stopnia) czarno-białą wersją oryginału. Tym razem już tak nie jest. Tylko składowa Dla nas jest to świetna wiadomość. Oznacza ona, że możemy pozwolić sobie na stratną kompresję składowych chromatycznych, bo i tak niewiele one wnoszą do naszego obrazka. Sprytniejszy algorytm kompresjiPopatrzmy na poniższy algorytm:
![]() ![]() ![]() ![]() ![]() Cała ta teoria brzmi mądrze. Ale najlepiej od razu sprawdzić, jak nasz algorytm zachowuje się w praktyce. W tym celu uruchomimy go dla różnych zestawów parametrów (y,cr,cb). ![]() ![]() ![]() ![]()
Te obrazki są dowodem na to, że składowa Y jest dużo ważniejsza od składowych Cr i Cb. Przy zastosowaniu parametrów (1 ocena) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com