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