Techniki wizualizacji Ćwiczenie 2 Obraz cyfrowy w komputerze

Transkrypt

Techniki wizualizacji Ćwiczenie 2 Obraz cyfrowy w komputerze
Doc. dr inż. Jacek Jarnicki
Instytut Informatyki, Automatyki i Robotyki
Politechniki Wrocławskiej
[email protected]
Techniki wizualizacji
Ćwiczenie 2
Obraz cyfrowy w komputerze
Celem ćwiczenia jest poznanie podstawowych sposobów zapisywania obrazów cyfrowych
w pamięci komputera. Każdy z nich wykorzystywany do odmiennego typu obrazów i ma
specyficzne zastosowania. Możliwa jest oczywiście konwersja pomiędzy zapisanymi w różny
sposób obrazami. Należy zaznaczyć, że omawiane metody nie wykorzystują jakichkolwiek
algorytmów kompresji, w każdym z nich obraz zapisywany jest punkt po punkcie, inne jest
tylko znaczenie informacji dotyczącej kodowanego punktu i sposób jej kodowania przy
pomocy liczb.
Rozważane będą cztery rodzaje obrazów:
monochromatyczne (intensity images),
binarne (binary images),
kolorowe typu RGB (RGB images),
indeksowane (indexed images).
1. Obrazy monochromatyczne (intensity images)
Obrazy monochromatyczne są to obrazy, dla których punkt (piksel) kodowany jest przy
pomocy jednej liczby, a cały obraz przy pomocy prostokątnej macierzy liczb, opisujących
intensywność (jasność, szarość) poszczególnych punktów. Wartość 0 reprezentuje zazwyczaj
czerń, a największa dopuszczalna dla danego zakresu kodowania liczba biel. W systemie
MATLAB intensywność dla punktu obrazu monochromatycznego może być kodowana jako:
liczba całkowita 8-bitowa (uint8) – 256 stopni jasności od 0 do 255 ,
liczba całkowita 16-bitowa (uint16) – 65636 stopni jasności od 0 do 65635,
liczba zmiennoprzecinkowa (double) – praktycznie ciągła skala od 0 do 1.
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
Kodowanie punktów obrazu przy pomocy liczb całkowitych (8 lub 16 bitowych) jest
powszechnie stosowanym sposobem zapisu jasności piksela i w ten sposób dane zapisywane
są zwykle w plikach graficznych (niezależnie od ich formatu). W praktyce częściej stosowany
jest zapis jasności piksela na 8 bitach, bowiem 256 stopni jasności jest z uwagi na
właściwości układu percepcji wzrokowej człowieka liczbą całkowicie wystarczającą dla
osiągnięcia wrażenia skali ciągłej. Format zmiennoprzecinkowy służy raczej jako format
pośredni w przypadku, gdy na elementach obrazu chcemy wykonać jakieś operacje
matematyczne i wygodniej jest to zrobić używając arytmetyki zmiennoprzecinkowej. System
MTLAB z pakietem Image Processing Toolbox oferuje narzędzia do identyfikacji sposobu
zapisu danych w plikach graficznych i wiele możliwości konwersji pomiędzy formatami.
• Kodowanie punktu na 8 bitach
Dla przykładu, aby przeanalizować treść
Lena_gray_8.tif trzeba wykonać trzy polecenia:
zapisaną
w
pliku
graficznym
>> I = imread(’Lena_gray_8.tif’);
>> imshow(I)
>> whos
Ich wykonanie spowoduje: przeczytanie obrazu z pliku i wyświetlenie go w oknie
graficznym oraz wypisanie na ekranie konsoli charakterystyki zmiennych, z której wynika, że
utworzona przy pomocy polecenia imread(…)tablica I zawiera liczby 8 bitowe bez znaku
(uint8), ma rozmiar 256 x 256 i zajmuje 65536 bajty. Jak widać, został w ten sposób
zidentyfikowany rozmiar obrazu i sposób kodowania danych o jasności poszczególnych jego
pikseli. Było to możliwe dzięki działaniu polecenia imread(…), które zawiera mechanizmy
pozwalające na prawidłową interpretację informacji umieszczonej w odczytywanym pliku
graficznym. Plik taki (w tym przypadku ’Lena_gray_8.tif’) składa się zwykle z
nagłówka, w którym w jakiś sposób zapisane są informacje określające format danych
opisujących obraz i sposób ich zapisu oraz samych danych. Dane mogą być zapisane jako
skompresowane bądź bez kompresji.
Aby stwierdzić jak dane zostały naprawdę zapisane w pliku graficznym należy wykonać
kolejne polecenie:
>> imfinfo(’Lena_gray_8.tif’);
Na ekranie konsoli zostanie wypisana pełna informacja dotycząca sposobu kodowania
danych i charakterystyka pliku graficznego. Ważniejsze parametry to:
FileSize: 70622 – rozmiar całego pliku graficznego
Width: 256 – szerokość obrazu
Height: 256 – wysokość obrazu
ColorType: 'grayscale' – sposób interpretacji danych z punktu widzenia
odtworzenie koloru
BitsPerSample: 8 – liczba bitów na jedną próbkę obrazu
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
PhotometricInterpretation: 'BlackIsZero'– sposób interpretacji liczb
opisujących punkty obrazu
SamplesPerPixel: 1 – liczba próbek na jeden piksel obrazu
Należy zauważyć, że tablica I opisująca punkty obrazu ma 65536 bajty, natomiast plik
Lena_gray_8.tif w formacie TIFF jest trochę większy i liczy 70622 bajty. Różnica
wynika właśnie między innymi z tego, że plik prócz danych zawiera nagłówek.
• Kodowanie punktu na 16 bitach
Dla porównania jak wygląda nagłówek pliku zawierającego obraz z punktami
kodowanymi na 16 bitach można wykonać polecenia:
>> J = imread(’Lena_gray_16.tif’);
>> imfinfo(’Lena_gray_16.tif’)
>> whos
Można także wyświetlić obraz zapisany w tablicy J by przekonać się, że obrazy
monochromatyczne z 8 i 16 bitowym kodowaniem jasności punktu wizualnie niewiele się
różnią.
• Kodowanie punktu jako liczby zmiennoprzecinkowej
Ostatnim sposobem kodowania obrazu monochromatycznego jest zapis punktów przy
pomocy liczb zmiennoprzecinkowych z zakresu [0,1]. Aby dokonać konwersji z zapisu
całkowitoliczbowego (uint8) lub (uint16) do zapisu w zmiennoprzecinkowego
(double) wygodnie jest użyć dostępnej w pakiecie „Image Processing Toolbox” funkcji
im2double(…). Żeby dla przykładu przekonwertować obraz z 16 bitowym kodowaniem
jasności zapisany ostatnio w tablicy J można użyć polecenia:
>> K = im2double(J);
Zostanie w ten sposób utworzona tablica K, w której obraz z tablicy J zostanie zapisany
przy pomocy liczb zmiennoprzecinkowych z zakresu [0,1]. Dla potwierdzenia można dalej
przy pomocy poleceń:
>> J(45, 167)
>> K(45, 167)
wyświetlić jakieś odpowiadające sobie elementy tablic J i K i przekonać się, że konwersja
została wykonana prawidłowo.
Oczywiście zestaw funkcji znajdujących się w pakiecie „Image Processing Toolbox”
zapewnia możliwość operacji odwrotnej, czyli powrotu z postaci zmiennoprzecinkowej do
całkowitoliczbowej. Można to zrobić wykorzystując funkcje im2uint8(…) lub
im2uint16(…).
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
2. Obrazy binarne (binary images)
Obrazy binarne są to obrazy, dla których poszczególne punkty kodowane są przy pomocy
zmiennej logicznej przyjmującej wartości 0 lub 1. Jeśli założyć, że wartość 0 odpowiada
czerni a wartość 1 bieli to można obraz binarny wyświetlić. Obrazy binarne są często
uzyskiwane z obrazów monochromatycznych lub barwnych w celu uproszczenia dalszego ich
przetwarzania np. w zagadnieniach rozpoznawania obiektów, analizy ilościowej treści obrazu
czy innych.
Sposób uzyskiwania obrazu binarnego z obrazu monochromatycznego jest dość prosty. Na
wstępie należy ustalić tak zwany próg binaryzacji (level), czyli jakąś liczbę z zakresu, w
którym leżą wartości jasności punktów obrazu monochromatycznego. Przykładowo, gdy
obrazem źródłowym jest obraz monochromatyczny z kodowaniem jasności punktów na 8
bitach progiem może być dowolna liczba z zakresu [0, 255]. Dalej wystarczy tylko obliczyć
wartości dla poszczególnych punktów obrazu binarnego korzystając z zależności.
0 gdy x( i , j ) ≤ level
y( i , j ) = 
 1 gdy x( i , j ) > level
gdzie:
x(i, j) – jasność punktu obrazu monochromatycznego (źródłowego),
y(i, j) – wartość logiczna dla punktu obrazu binarnego (wyjściowego),
level – próg binaryzacji.
• Konwersja obrazu monochromatycznego na binarny
Zadanie będzie polegało na napisaniu programu prostego konwertera zamieniającego obraz
monochromatyczny na obraz binarny z możliwością ustawienia progu binaryzacji. Materiał
źródłowy jest mikroskopowym obrazem rozkładu komórek materiału biologicznego
pobranego z mózgu ryby o nazwie „zebrafish” i pochodzi z Instytutu Maxa Plancka
w Dreźnie. Obraz źródłowy znajduje się w pliku Cells.tif a próg binaryzacji jest zadaną
liczbą z przedziału [0, 1] dla przykładu 0.5.
Kolejne kroki algorytmu zamiany obrazu są następujące (w nawiasach podano funkcje,
jakich zaleca się użyć w programie przy realizacji poszczególnych kroków):
Ustawić próg binaryzacji przez zadeklarowanie i inicjalizację zmiennej nazwanej
level np. level = 0.5;
Przeczytać obraz wejściowy z pliku i Cells.tif zapisać go w tablicy I
( funkcja imread(…)).
Wykonać konwersję obrazu zapisanego w tablicy I (liczby typu uint8) na obraz w
formacie zmiennoprzecinkowym (double) i zapisać go w tablicy J
( funkcja im2double(…))
Wyznaczyć rozmiary obrazu zapisanego w tablicy J ( funkcja size(…))
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
Zadeklarować tablicę K zgodną z rozmiarem obrazu zawierającą zera logiczne. Można
to zrobić przy pomocy polecenia K = logical(zeros(n, m)); gdzie n i m są
rozmiarami obrazu wyznaczonymi w poprzednim kroku.
Badać kolejne punkty obrazu zapisanego w tablicy J i jeśli jasność przekracza zadany
próg (level) zmieniać odpowiedni element tablicy K z 0 na 1
Uwaga: Do przeglądania kolejnych punktów obrazu należy zastosować podwójną pętlę
for, natomiast do badania przekroczenia progu instrukcję warunkową if (patrz
system pomocy Help)
W jednym oknie graficznym pokazać obraz źródłowy z tablicy I oraz obraz binarny
z tablicy K ( funkcja subplot(…)).
Zapisać obraz binarny z tablicy K do pliku przy pomocy polecenia
imwrite(K, 'Cells_bin.tif', 'tif')
Używając polecenia imfinfo(…)sprawdzić parametry pliku z zapisem obrazu
binarnego.
Na rysunku 1 pokazano jak ma wyglądać okno graficzne z obrazami źródłowym
i binarnym obliczonym dla progu binaryzacji level = 0.5.
Rys. 1. Obraz monochromatyczny i binarny (level = 0.5)
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
Można teraz manipulując progiem binaryzacji sprawdzić jak zmienia się wygląd obrazu
wyjściowego.
3. Obrazy kolorowe RGB (RGB images)
Obrazy kolorowe tworzone według modelu barw RGB różnią się od obrazów
monochromatycznych tym, że pojedynczy punkt obrazu (piksel) zapisywany jest przy
pomocy nie jednej a trzech liczb. Liczby te zwane składowymi barwnymi R, G i B określają
zawartości w barwie piksela poszczególnych barw podstawowych (czerwonej, zielonej i
niebieskiej). Zwykle przyjmuje się, że wartość składowej barwnej równa 0 oznacza brak
danej barwy podstawowej, a wartość 1 jej maksymalny udział. Podobnie jak w przypadku
obrazów monochromatycznych w systemie MATLAB składowe barwne R, G, B koduje się
przy pomocy liczb całkowitych i zmiennoprzecinkowych. Wyróżnia się trzy podstawowe
sposoby typy zapisu składowej
liczba całkowita 8-bitowa (uint8) – 256 stopni udziału składowej od 0 do 255 ,
liczba całkowita 16-bitowa (uint16) – 65636 stopni 0 do 65635,
liczba zmiennoprzecinkowa (double) – praktycznie ciągła skala od 0 do 1.
Przy pierwszym sposobie zapisu obrazu na 8 bitach liczba możliwych do zapamiętania
kolorów wynosi,
2563 = 16.777.216,
przy zapisie na 16 bitach,
656363 = 282.765.433.979.456
natomiast w formacie zmiennoprzecinkowym jest jeszcze większa (liczba kolorów zależy od
sposobu kodowania liczby zmiennoprzecinkowej)
Żeby zorientować się, czym różni się informacja umieszczona w pliku opisującym obraz
barwny od opisu obrazu monochromatycznego można, po wykonaniu poleceń:
>> imfinfo(’Lena_gray_8.tif’)
>> imfinfo(’Lena_color_256.tif’)
i porównać treść wyprowadzonych na konsolę komunikatów.
• Rozkład obrazu RGB na składowe
Celem zadania jest przeczytanie kolorowego obrazu z pliku, rozłożenie go na składowe
barwne R, G, i B a następnie wyświetlenie każdej ze składowych jako oddzielny obraz
monochromatyczny.
Algorytm jest taki:
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
Przeczytać obraz wejściowy z pliku i Spectrum.tif zapisać go w tablicy I
( funkcja imread(…)).
Wyznaczyć rozmiary obrazu zapisanego w tablicy I ( funkcja size(…)).
Uwaga: Tablica zawierająca obraz RGB jest tablicą trójwymiarową.
Zadeklarować trzy tablice R, G, i B, w których zapamiętane zostaną obrazy
monochromatyczne
Można
to
zrobić
przy
pomocy
polecenia
zeros(n, m, 'uint8'); gdzie n i m są rozmiarami obrazu wyznaczonymi w
poprzednim kroku.
Zapisać
dane
zawarte
w
tablicy
I
do
Uwaga: Można to zrobić w pętli lub bez używania pętli.
W jednym oknie graficznym pokazać obraz źródłowy z tablicy I oraz obrazy
monochromatyczne z tablic R, G, B ( funkcja subplot(…)).
tablic
R,
G,
B.
Otrzymany efekt powinien wyglądać mniej więcej tak jak pokazano to na rysunku 2. Napisy
widoczne nad poszczególnymi obrazami można uzyskać przy pomocy funkcji title(…)
(patrz system pomocy Help).
Rys. 2. Obraz barwny i składowe R, G, B wyświetlone jako obrazy monochromatyczne
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
4. Obrazy indeksowane (indexed images)
W dotychczas omówionych sposobach zapisu obrazu dane o pisujące treść obrazu były
umieszczany zawsze w jednej tablicy. W przypadku obrazów monochromatycznych
i binarnych była to tablica dwuwymiarowa, natomiast dla obrazów kolorowych
trójwymiarowa. Kolejny typ obrazów to tak zwane obrazy indeksowane, które różnią się od
poprzednich tym, że do zapisu obrazu wykorzystuje się dwie tablice. Przy pomocy zapisu
indeksowego można kodować zarówno obrazy monochromatyczne jak i barwne.
Ideę zapisu obrazu kolorowego przy pomocy indeksów zaprezentowano na rysunku 3.
Tablica danych
I (162, 157) = 253
Tablica kolorów
Index
R
G
B
…
…
…
…
(162, 157)
253
0.7804 0.4745 0.4745
…
…
…
…
Rys. 3. Wyjaśnienie sposobu zapisu obrazu przy pomocy indeksów
Obraz kodowany jest teraz przy pomocy dwóch tablic:
•
Tablicy danych (data matrix) o rozmiarach zgodnych z rozmiarami obrazu, której
elementy są liczbami całkowitymi (uint8 lub uint16).
•
Tablicy kolorów (colormap matrix) zbudowanej z pewnej liczby wierszy
zawierających trzy liczby zmiennoprzecinkowe (double) opisujące składowe R,
G i B koloru.
Elementy tablicy danych są po prostu numerami wierszy w tablicy kolorów (pokazano to
na rysunku 3). Taki sposób kodowania obrazu jest niewątpliwie w większości przypadków
bardziej oszczędny niż bezpośredni zapis dla każdego punktu obrazu trzech składowych R, G,
B. Daje też możliwości łatwiejszej zmiany obrazu.
Żeby w zilustrować sposób wykorzystania zapisu obrazu przy pomocy indeksów można
przeprowadzić prosty eksperyment, polegający na zamianie jednego wiersza tablicy kolorów.
W tym celu należy najpierw przeczytać obraz zapisany jako już wcześniej jako indeksowany.
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
Obraz znajduje się w pliku Lena_color_index.tif', a przeczytać go można przy
pomocy polecenia:
>> [I, map] = imread(’Lena_color_index.tif’);
Należy zauważyć, że w odróżnieniu od wszystkich poprzednich przypadków wczytany
obraz został umieszczony w dwóch tablicach I i map. Pierwsza z nich jest opisaną wcześniej
tablicą danych (indeksów) a druga tablicą kolorów. Jeśli dalej wykona się polecenie:
>> I(162, 157)
na ekranie zostanie wyświetlona liczba 253, czyli indeks wiersza tablicy kolorów
odpowiadającego punktowi obrazu o współrzędnych (162, 157). Aby odczytać składowe
koloru analizowanego piksela można teraz napisać:
>> map(253,:)
co spowoduje wyświetlenie składowych R, G, B koloru punktu. Są to liczby 0.7804,
0.4745, 0.4745, (patrz rys. 3).
Zamianę elementów wiersza w tablicy kolorów można wykonać wydając kolejne
polecenie:
>> map(253,:)= 1.0;
Wszystkie trzy elementy wiersza, czyli składowe koloru zostaną zmienione na liczby 1.0 co
odpowiada kolorowi białemu.
Na zakończenie, aby zobaczyć rezultat należy napisać polecenie:
>> imshow(I, map);
efekt powinien być taki jak pokazano to na rysunku 4.
Rys. 4. Obraz z wymienionym jednym kolorem
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
Interpretacja uzyskanego wyniku jest prosta. Wszystkie piksele obrazu, które w tablicy
danych miały wartość 253 po zamianie odpowiedniego wiersza w tablicy kolorów zostały
wyświetlone w kolorze białym.
• Uzyskanie obrazu w kolorze przypominającym sepię
Zadanie polega na przetworzeniu obrazu w stopniach szarości zapisanego jako
indeksowany w obraz w kolorze podobnym do sepii.
Algorytm jest następujący:
Przeczytać obraz wejściowy z pliku i Lena_gray_index.tif zapisać go
w tablicach I i map (funkcja imread(…)).
Zadeklarować i zainicjalizować zmienną alfa np. alfa = 0.65;
Wyznaczyć rozmiary obrazu zapisanego w tablicy kolorów map (funkcja size(…)).
Utworzyć nową tablice kolorów map_1 przepisując do niej dwie pierwsze kolumny
(określające składowe R i G) tablicy map i mnożąc wartości w trzeciej kolumnie
(odpowiadające składowej niebieskiej B) przez alfa.
W osobnych oknach graficznych wyświetlić obrazy (I, map) i (I, map_1),
powinny one wyglądać tak jak na rysunku 5.
Zmieniając wartość zmiennej alfa uzyskać pożądany wygląd obrazu w sepii.
Rys. 5. Obraz źródłowy i w kolorze podobnym do sepii (alfa = 0.65)
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
• Przekształcenie obrazu RGB na obraz indeksowany
Z punktu widzenia oszczędności pamięci zapis obrazu przy pomocy indeksów wydaje się
dość atrakcyjny. Jednak zwykle obrazy zapisane jako indeksowane nie są bezpośrednio
dostarczane przez urządzenia rejestrujące. Ich uzyskanie wymaga przetworzenia zapisanych
wcześniej obrazów przy pomocy specjalnych algorytmów. Zarejestrowany obraz źródłowy
opisany w kategoriach modelu RGB ma zazwyczaj bardzo dużo kolorów. Można w
krańcowym przypadku, wyobrazić sobie obraz, w którym każdy piksel ma trochę inny kolor.
Dla takiego obrazu, przy próbie zapisu jako indeksowany, tablica kolorów będzie miała tyle
wierszy ile obraz ma punktów a dodatkowo trzeba będzie dodać jeszcze tablicę danych
zawierającą indeksy. Zapis w tym przypadku będzie zajmował więcej pamięci niż
bezpośrednie opisanie składowych barwnych R, G, B dla poszczególnych punktów. Ogólny
wniosek jest, więc taki, że zapis w postaci indeksów opłaca się stosować, gdy na obrazie jest
znacznie mniej kolorów niż obraz ma punktów. Jednak okazuje się, że z uwagi na pewne
właściwości procesu postrzegania obrazów barwnych przez człowieka, można bez większej
starty jakości ograniczyć liczbę kolorów punktów obrazu. Idea jest prosta i polega na tym, że
punktom o zbliżonych kolorach przypisuje się jeden wyliczony w jakiś sposób kolor. Proces
taki nazywa się kwantyzacją koloru i realizowany jest przy pomocy różnych algorytmów.
Najbardziej popularne to kwantyzacja jednorodna i kwantyzacja przy kryterium minimalnej
wariancji.
Kwantyzacja jednorodna jest najprostszym algorytmem redukcji liczby kolorów w
obrazie. Ideę jej łatwo jest wyjaśnić posługując się modelem barw RGB w postaci sześcianu
takim jak pokazany został na rysunku 6.
G
(0, 1, 0)
R
(1, 0, 0)
B
(0, 0, 1)
Rys. 6. Model RGB w postaci sześcianu
Jeśli każdy z boków sześcianu podzielić na n równych odcinków to można sobie
wyobrazić, że sześcian zostanie podzielony na n3 małych sześciennych kostek. Jeśli każdej
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007
z takich kostek przypisać jeden kolor na przykład określony jako kolor jej środka, to
powstanie dyskretna struktura opisująca przestrzeń zbudowaną z n3 kolorów.
Algorytm kwantyzacji koloru jest bardzo prosty:
Dla danego piksela obrazu opisanego składowymi r, g, b zidentyfikować, w której
kostce leży punkt opisany tymi składowymi.
Jako nowe współrzędne barwne piksela przypisać
odpowiadającego kostce znalezionej w kroku poprzednim.
Tabelę kolorów zbudować tylko z tych kolorów przestrzeni kostki, które mają swoje
odpowiedniki w przetworzonym obrazie.
współrzędne
koloru
W wyniku kwantyzacji równomiernej powstanie obraz, który będzie zawierał punkty
o maksymalnie n3 kolorach. Algorytm jest prosty jednak pewien kłopot może sprawiać dobór
liczby n. Dla małych n, kolorów w przetworzonym obrazie może być za mało, dla dużych
n powstanie prawdopodobnie zbyt duża tabela kolorów. Należy także zaznaczyć, że sposób
podziału przestrzeni barw nie zależy od treści obrazu a jedynie wyboru liczby n.
Kwantyzacja przy kryterium minimalnej wariancji jest znacznie bardziej
skomplikowana. Przestrzeń kolorów RGB reprezentowana przez sześcian z rysunku
6 dzielona jest w tym przypadku nie na równe sześcienne małe kostki, tak jak to było w
przypadku kwantyzacji równomierniej, ale na prostopadłościany o różnej wielkości. Podział
zależny jest od rozkładu punktów reprezentujących poszczególne piksele obrazu wewnątrz
sześcianu przestrzeni barw. Jeśli w pewnym obszarze znajduje się dużo skoncentrowanych
obok siebie punktów w buduje się mały prostopadłościan, jeśli lokalna gęstość punktów jest
niewielka, prostopadłościan jest większy. Poszczególne punkty leżące wewnątrz tak
wyznaczonych prostopadłościanów reprezentowane są w obrazie wynikowym przez centra
prostopadłościanów. Taki podział przestrzeni barw pozwala lepiej aproksymować obraz
źródłowy przy pomocy zadanej liczby kolorów, uzależniając wynik od treści analizowanego
obrazu a nie jak to miało miejsce w przypadku kwantyzacji równomiernej jedynie od
pewnego arbitralnie zadanego parametru. Oczywiście lepsza jakość aproksymacji wymaga
większej liczby obliczeń.
W pakiecie „Image Processing Toolbox” dostępna jest funkcja o nazwie rgb2ind(…),
która zamienia obraz zapisany według modelu RGB na obraz indeksowany.
Zaimplementowane zostały obie wyżej opisane metody.
Celem ostatniego zadania jest zbadanie, jaki efekt dają oba algorytmy kwantyzacji koloru
i porównanie wyników ich działania. Schemat postępowania jest następujący:
Przeczytać obraz ’Lena_color_256.tif’.
Używając funkcji rgb2ind(…)wykonać kwantyzację metodą równomierną i metodą
minimalizacji wariancji, tak, aby uzyskać jak najmniejszą tablicę kolorów, przy której
odtworzony obraz indeksowany nie różni się praktycznie od obrazu oryginalnego.
Sprawdzić, jakie są wielkości plików z zapisem obrazu indeksowanego dla jednej
i drugiej metody.
Studia Podyplomowe – Techniki Wizualizacji
Wrocław 2007