Techniki wizualizacji Ćwiczenie 3 Wybrane modele kolorów i ich
Transkrypt
Techniki wizualizacji Ćwiczenie 3 Wybrane modele kolorów i ich
Doc. dr inż. Jacek Jarnicki Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej [email protected] Techniki wizualizacji Ćwiczenie 3 Wybrane modele kolorów i ich zastosowania Celem ćwiczenia jest zrozumienie i poznanie zastosowań praktycznych niektórych modeli kolorów. Spośród wielu znanych modeli opracowanych dla specyficznych zastosowań zwrócono uwagę na dwie grupy modeli. Pierwsza z nich to modele, które mają zastosowanie w procesie wyświetlania barw o znanym opisie liczbowym na monitorach oraz do wyrażania przy pomocy liczb w jakiś sposób wyobrażanych sobie barw. Druga grupa to modele opisujące obrazy barwne w kategoriach luminancja-chrominancja. Opisy liczbowe barw stosowane w modelach luminancja- chrominancja wywodzą się z podstawowego dla teorii barw modelu CIE-XYZ i mają fundamentalne znaczenie w algorytmach kompresji obrazów barwnych oraz telewizji analogowej i cyfrowej. Zaproponowane w ćwiczeniu przykłady dotyczyły będą właśnie tych dziedzin. Rozważane trzy modele barw: RGB, HSV, Model luminancja –chrominancja, 1. Model RGB Model RGB służy głównie do opisu procesu wyświetlania obrazu barwnego na monitorze. Obraz na monitorze niezależnie od tego czy jest to monitor CRT, LCD czy plazmowy powstaje jako wynik kombinacji efektów procesów świecenia bardzo małych punktów, emitujący światło w trzech kolorach podstawowych, czerwonym, zielonym i niebieskim. W procesie wyświetlania obrazu zachodzi, więc sumowanie barw i w związku z tym model ten nosi często nazwę modelu addytywnego. Najczęściej model RGB przedstawia się w postaci sześcianu jednostkowego o krawędziach położonych na trzech osiach układu współrzędnych prostokątnych (Rys. 1.), które reprezentują trzy barwy podstawowe. W modelu RGB barwę definiuje się, więc jak przy pomocy trójki liczb (r, g, b), przy czym r, g, b ∈[0, 1]. Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 G (0, 1, 0) R (1, 0, 0) B (0, 0, 1) Rys. 1. Model RGB przedstawiony jako sześcian Model ma kilka istotnych własności: przekątna sześcianu biegnąca od punktu [0, 0, 0] do punktu [1, 1, 1] reprezentuje tak zwaną oś szarości zwierającą ciągłą skalę stopni szarości od czarnego [0, 0, 0] do białego [1, 1, 1], barwy inne niż szare, które można utworzyć z kombinacji składników r, g, b reprezentowane są przez punkty wewnątrz sześcianu leżące poza przekątną, model nie zawiera wszystkich barw postrzeganych przez człowieka, wyświetlenie opisanej w modelu RGB barwy na monitorze jest łatwe, opisanie przy pomocy składowych r, g, b barwy, którą sobie w jakiś sposób wyobrażamy, lub mamy zadaną w postaci próbki jest raczej trudne. • Wyświetlenie barwy opisanej składowymi r, g, b Przed przystąpieniem do napisania kolejnego programu wygodnie będzie wprowadzić pojęcie funkcji. W języku systemu MATALB funkcja jest jednym z podstawowych elementów składni programu. Funkcja umożliwia strukturalizację programu a tym samym ułatwia programowanie i analizę kodu. W dotychczas pisanych programach funkcje były wielokrotnie używane, lecz jeszcze ani razu nie były samodzielnie definiowane. Dla sprawniejszego wykonania kolejnych zadań dogodnie będzie zapoznać się ze sposobem określania własnych funkcji. Aby napisać nową funkcję należy wykonać następujące czynności: Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Po uruchomieniu środowiska MATLAB otworzyć okno edytora i przygotować się do pisania nowego programu wykonując polecenia File, New, M-file W oknie edytora wpisać treść kodu funkcji stosując następująca składnię. %********************************************************************** % Szablon funkcji w języku MATLAB %********************************************************************** function [y_1, y_2,...,y_n] = nazwa_funkcji(arg_1, arg_2,..., arg_m) % . . . % treść kodu funkcji % . . . Wykonać polecenie SaveAs i zapisać program w folderze roboczym pod nazwą nazwa_funkcji (powstanie w ten sposób plik tekstowy o nazwie nazwa_funkcji.m). Nazwa musi być unikalna, to znaczy taka jakiej nie ma jeszcze żadna inna funkcja zdefiniowana wcześniej. Aby wykonać program opisany przez funkcję należy w linii komend środowiska MATLAB wpisać: >> [y_1, y_2,...,y_n] = nazwa_funkcji(arg_1, arg_2,..., arg_m) i nacisnąć klawisz Enter. Oczywiście można także użyć takiej funkcji do pisania dowolnego programu, czy innej funkcji, tak jak poprzednio używano gotowych funkcji, znajdujących się w środowisku programistycznym MATLAB i w pakiecie Image Processing Toolbox. Wracając do problemu wyświetlania barw opisanych w kategoriach modelu RGB należy na początku zrealizować proste zadanie, polegające na napisaniu funkcji wyświetlającej obraz barwny, którego wszystkie punkty mają ten sam kolor opisany przy pomocy składowych r, g, b. Projektowana funkcja o nazwie n.p. display_rgb powinna wyświetlać obraz o rozmiarze 256x256 punktów, składający się z pikseli o tym samym kolorze, opisanym przez trzy składowe r, g, b przy założeniu, że r, g, b ∈[0, 1]. Pierwszą linię programu definiującego funkcję można zapisać więc tak: [] = display_rgb(r, g, b) Dwa niewypełnione nawiasy [] oznaczają, że funkcja nie „zwraca” niczego, bowiem zgodnie z założeniem jej zadaniem jest jedynie wyświetlenie obrazu a nie obliczanie jakiegoś wyniku. Dalszą część kodu funkcji należy napisać stosując następujące wytyczne: Zadeklarować zgodną z rozmiarami obrazu tablicę o elementach typu (double) zawierająca same zera. Wypełnić odpowiednie elementy tablicy składowymi r, g, b. Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Wyświetlić obraz odpowiadający utworzonej tablicy. Wynik powinien być taki jak na rysunku 2 Rys. 2. Obraz wypełniony punktami o kolorze r = 0.12, g = 0.23, b = 0.47 2. Model HSV Model HSV (Hue, Saturation, Value) znacznie lepiej niż model RGB nadaję się do opisania barwy zadanej w postaci próbki lub barwy „wyobrażanej”. Model ma postać odwróconego stożka wypełnionego barwnymi punktami (Rys. 3). Barwa opisywana jest w tym przypadku przy pomocy trzech liczb (h, s, v), przy czym h, s, v ∈[0, 1]. Pierwsza składowa h określa odcień barwy i jej zmiana o 0 do 1 odpowiada to zmianie od czerwonego przez żółty, zielony, cyjanowy, niebieski, fioletowy i z powrotem do czerwonego (tak jak pokazują strzałki na rysunku 3.). Druga składowa s reprezentuje nasycenie barwy i jej zmiana od 0 do 1 odpowiada zmianie od szarości do barwy czystej. Trzeci element modelu, składowa v opisuje jasność barwy, 0 reprezentuje barwę najciemniejszą a 1 najjaśniejszą. Typowy algorytm ustalania składowych opisu barwy zadanej na przykład w postaci próbki jest taki: Ustawić wszystkie składowe na 1, Zmieniać składową h (odcień) tak, aby osiągnąć wrażenie maksymalnego podobieństwa z analizowaną próbką Zmieniać s (nasycenie), Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Zmieniać v (jasność) 0 1 Rys. 3. Model HSV wyobrażony jako odwrócony stożek • Zastosowanie modelu HSV do opisania barwy zadanej w postaci próbki Zadanie ma na celu napisanie funkcji wyświetlającej obraz wypełniony punktami o kolorze opisanym przez zadane składowe h, s, v. Funkcja powinna ponadto wyświetlać na konsoli składowe r, g, b, odpowiadające zadanemu kolorowi. Podobni jak w poprzednim zadaniu powinien być to obraz o rozmiarze 256x256 punktów a funkcja może nazywać się display_hsv. Algorytm realizacji zadania jest następujący: Zadeklarować zgodne z rozmiarami obrazu dwie tablice o elementach typu (double) zawierające same zera. Jedna tablica będzie przeznaczona na obraz opisany w modelu HSV a druga w RGB Wypełnić odpowiednie elementy tablicy opisującej obraz w modelu HSV składowymi h, s, v. Wypełnić tablicę opisującą obraz w modelu RGB wartościami składowych r, g, b przeliczonymi z modelu HSV (należy zastosować funkcję hsv2rgb()). Wyświetlić na konsoli składowe r, g, b jakiegoś punktu obrazu. Wyświetlić obraz opisany w modelu RGB. Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Dla sprawdzenia można wyświetlić obraz, którego punkty opisano składowymi h = 0.34, s = 0.83, v = 0.77, powinien on wyglądać mniej więcej tak: Rys. 4. Obraz wypełniony punktami o kolorze h = 0.34, s = 0.83, v = 0.77 Ostatnia część zadania polega na znalezieniu opisu w modelu RGB barwy, której próbka pokazana została na rysunku 5. Rys. 5. Próbka barwy z logo Politechniki Wrocławskiej Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Do rozwiązania problemu wygodnie będzie wykorzystać funkcję napisaną samodzielnie funkcję display_hsv()oraz algorytm ustalania barwy w modelu HSV opisany na początku niniejszego punktu. 3. Modele luminacja - chrominancja Modele luminacja – chrominancja najczęściej przedstawiane są w postaci zależności pozwalających przeliczyć wartości składowych określających barwę w kategoriach modelu RGB na inne trzy liczby. Pierwsza z nich nosi nazwę luminancji i zwykle oznaczana jest literą Y. Luminancja określa jasność punktów obrazu i wyświetlona w stopniach szarości bardzo dobrze prezentuje obraz barwny jako monochromatyczny. Pozostałe dwie składowe, różnie definiowane i oznaczane, noszą nazwę chrominancji i zawierają informację, która łącznie z luminancja określa obraz barwny. Poniżej podano wzory opisujące trzy najbardziej popularne modele: Model YUV stosowany jest w systemie telewizji PAL 0.587 0.114 R Y 0.229 U = − 0.146 − 0.288 − 0.434 G V 0.617 − 0.517 0.100 B Model YIQ określony dla systemu telewizji NTSC 0.587 0.114 R Y 0.229 I = − 0.168 − 0.257 − 0.321 G Q 0.212 − 0.528 0.311 B Model YCbCr stosowany w systemach telewizji cyfrowej i telewizji cyfrowej wysokiej rozdzielczości HDTV 0.587 0.114 R Y 0.229 C = − 0.168 − 0.331 − 0.500 G b Cr 0.500 − 0.418 0.082 B Można zauważyć, że wszystkie trzy modele opisane są jako przekształcenia liniowe. Można sprawdzić także, że dla każdego z nich istnieje przekształcenie odwrotne pozwalające przeliczyć barwę ze składowych luminancja - chrominancja z powrotem na składowe w Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 modelu RGB. Trzecia wspólna cecha to fakt, że luminancja Y dla każdego modle wyrażona jest tak samo, przy pomocy równania Y = 0.229 ⋅ R + 0.587 ⋅ G + 0.114 ⋅ B Równanie to określa, w jakich proporcjach trzeba zmieszać barwy podstawowe R,G, B, aby uzyskać barwę białą. Współczynniki w równaniu wynikają z wykresu CIE-XYZ prezentowanego na wykładzie i można je wyznaczyć na przykład wykreślni opierając się na pokazanej na rysunku 6 konstrukcji. G P C = (0.33, 0.33) R B Rys. 6. Luminancja wyrażona jako kombinacja składowych R. G, B Zakładając, że dane są trzy barwy podstawowe reprezentowane na wykresie przez punkty R, G i B oraz barwa biała wyrażona przez punkt C o współrzędnych chromatycznych (0.333…, 0.333…). Postępowanie można opisać tak: Zmieszać barwy R i G w takich proporcjach tak, aby uzyskać barwę reprezentowaną przez punkt P, która po zmieszaniu znów w odpowiednich proporcjach z barwą B da w efekcie barwę białą C. Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 • Symulacja uproszconego toru telewizji transmisji obrazu w telewizji cyfrowej Modele luminancja – chrominancja mają różne zastosowania. Jednym z ważniejszych jest technika telewizyjna. Poniższy przykład pokazuje jak można, przez zamianę obrazu z modelu RGB na model YCbCr ograniczyć ilość informacji przesyłanej przez kanał transmisyjny, praktycznie bez straty jakości obrazu. Na rysunku 7 pokazano zasadę, według której funkcjonuje tor transmisji obrazu. Na początku w koderze, przeprowadzana jest konwersja obrazu z modelu RGB na model YCbCr. W dalszej części toru sygnały luminacji i chrominancji traktowane są różnie. Sygnał luminacji Y przesyłany jest bez zmiany poprzez kanał transmisyjny do odbiornika. Natomiast dwa pozostałe sygnały opisujące, chrominancję, czyli Cb i Cr poddawane są następującym przekształceniom. R G B RGB do YCbCr Y Y Y Y Cb Cb/4 Cb/4 C ’b Cr/4 Cr/4 Cr Downsampling Downsampling KODER C Upsampling Upsampling KANAŁ TRANSMISYJNY C ’r R’ YCbCr do RGB G’ B’ DEKODER Rys. 7. Uproszczony schemat toru transmisji obrazu w systemie telewizji cyfrowej W koderze tablice opisujące składowe Cb i Cr poddawane są procesowi tak zwanego downsamplingu (zwanego też czasem podpróbkowaniem), schemat tej operacji pokazano na rysunku 8. Downsampling powoduje ograniczenie liczby informacji w sygnale, bowiem z tablic Cb i Cr pozostaje jedynie ¼ opisu punktów obrazu. Tak, więc dla przykładu, jeśli obraz zapisany jest przy pomocy trzech tablic R, G, B o rozmiarze 256 x 256 to informacja na wyjściu kodera będzie zajmował 1 tablicę o wymiarze 256 x 256 (składowa Y) oraz dwie tablice o rozmiarach 128 x 128. Można łatwo policzyć, że w ten sposób osiąga się zmniejszenie informacji do przesłania w kanale transmisyjnym o połowę. Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 6 13 23 7 54 23 12 9 55 76 7 23 42 73 75 58 downsampling 6 23 55 7 Rys. 8. Schemat ilustrujący downsamling W dekoderze przeprowadzana jest operacja odwrotna do downsamplingu zwana upsamplingiem (nadpróbkowanie). Operacje została wyjaśniona na rysunku 9. Tablice opisujące składowe Cb i Cr zostają uzupełnione przez powielanie do pierwotnych rozmiarów. Oczywiście różnią się one od pierwotnych gdyż w procesie upsamplingu część informacji została bezpowrotnie stracona. 6 23 55 7 upsampling 6 6 23 23 6 6 23 23 55 55 7 7 55 55 7 7 Rys. 9. Schemat ilustrujący upsampling Ostatnim etapem wykonywanym w dekoderze jest konwersja informacji opisującej obraz z powrotem do modelu R, G, B. Jest oczywiste, że będzie to obraz trochę inny niż źródłowy, gdyż tablice opisujące, chrominancję są inne niż źródłowe. Okaże się jednak dalej, że różnice są praktycznie niedostrzegalne dla obserwatora a jak już zauważono wcześniej liczba informacji do przesłania przez kanał transmisyjny jest przy tym sposobie kodowana o połowę mniejsza. Fakt ten może potwierdzić następujący eksperyment. Należy napisać program symulujący działanie toru transmisyjnego pokazanego na rysunku 7. Algorytm jest taki: Przeczytać obraz źródłowy z pliku Lena_color_256.tif i umieścić go w odpowiedniej tablicy. Przeprowadzić konwersję obrazu do modelu YCbCr posługując się funkcją rgb2ycbcr() Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Wyświetlić obraz źródłowy i składowe Y, Cb, Cr , wynik powinien wyglądać mniej więcej tak: Rys. 10. Obraz źródłowy i jego rozkład na składowe Y, Cb, Cr Dla składowych Cb i Cr, wykonać operację downsamplingu (użyć funkcji down_sampling(), która wykonuje to co pokazano na rysunku 8, czyli przekształca kwadratowy obraz w obraz 4 razy mniejszy wycinając ¾ punktów). Dla tablic uzyskanych w wyniku downsamplngu w punkcie poprzednim, wykonać upsamplng (użyć funkcji up_sampling(), która wykonuje to, co pokazano na rysunku 9, czyli przekształca kwadratowy obraz w obraz 4 razy większy, powielając punkty). Wyświetlić efekt w postaci obrazu źródłowego, składowej luminacji Y i zrekonstruowanych w wyniku upsamplingu składowych Cb i Cr . Efekt powinien być taki jak na rysunku 11. Należy porównać wizualnie obrazy składowych Cb i Cr na rysunkach 10 i 11 (na ekranie monitora różnice będą widoczne). Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Rys. 11. Obraz źródłowy, składowa Y i zrekonstruowane w dekoderze składowe Cb, Cr Wykonać konwersję obrazu opisanego luminancją Y i zrekonstruowanymi w dekoderze składowymi Cb i Cr na obraz opisany w modelu RGB używając funkcji ycbcr2rgb(), Wyświetlić obraz źródłowy i zrekonstruowany w dekoderze obok siebie i porównać na ile obraz odebrany przez odbiornik różni się od obrazu źródłowego. Wynik powinien wyglądać tak jak na rysunku 12. Rys. 12. Obraz źródłowy i obraz zrekonstruowany w odbiorniku Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007 Na zakończenie, można przeanalizować podobny tor transmisyjny, lecz bez konwersji z modelu RGB na YCbCr. Schemat takiego toru może na przykład wyglądać tak jak na rysunku 13. R R G G/4 Downsampling B B/4 Downsampling KODER G/4 B/4 G’ Upsampling B’ Upsampling KANAŁ TRANSMISYJNY DEKODER Rys. 13. Tor transmisyjny bez uwzględnienia konwersji na model luminancja- chrominancja Po wykonaniu eksperymentu (bardzo łatwo jest go wykonać komentując jedynie fragmenty kodu w napisanym poprzednio programie) okaże się, że obraz otrzymany na wyjściu dekodera znacząco różni się od obrazu źródłowego. Zadanie dodatkowe: Zmodyfikować funkcje down_sampling() i up_sampling(), tak że jedna próbka z tablic składowych chrominancji obrazu wejściowego pobierana będzie nie dla 4 lecz dla 16 pikseli, czyli 4 razy rzadziej niż w poprzednim przypadku. Sprawdzić, jak zmieni się jakość obrazu odtworzonego przy takim sposobie ograniczenia informacji niesionej przez składowe chrominancji. Studia Podyplomowe – Techniki Wizualizacji Wrocław 2007