PRACA DYPLOMOWA INŻYNIERSKA



Podobne dokumenty
Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Cyfrowe przetwarzanie i kompresja danych. dr inż.. Wojciech Zając

Wybrane metody kompresji obrazów

Kompresja danych DKDA (7)

Klasyfikacja metod kompresji

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

Klasyfikacja metod kompresji

Cyfrowe przetwarzanie i kompresja danych

Progresywny internetowy kodek falkowy

Joint Photographic Experts Group

Przedmowa 11 Ważniejsze oznaczenia 14 Spis skrótów i akronimów 15 Wstęp 21 W.1. Obraz naturalny i cyfrowe przetwarzanie obrazów 21 W.2.

Temat: Algorytm kompresji plików metodą Huffmana

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Kompresja dźwięku w standardzie MPEG-1

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

Transformata Fouriera

2. Próbkowanie Sygnały okresowe (16). Trygonometryczny szereg Fouriera (17). Częstotliwość Nyquista (20).

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Podstawowe pojęcia. Teoria informacji

Kompresja obrazów w statycznych - algorytm JPEG

Fundamentals of Data Compression

Kodowanie informacji

WYKŁAD 10. kodem pierwotnym krzywej jest ciąg par współrzędnych x, y kolejnych punktów krzywej: (x 1, y 1 ), (x 2, y 2 ),...

Kody Tunstalla. Kodowanie arytmetyczne

Krótki przegląd pierwszych standardów kompresji obrazów

Transformaty. Kodowanie transformujace

Python: JPEG. Zadanie. 1. Wczytanie obrazka

9. Dyskretna transformata Fouriera algorytm FFT

Wygra Polska czy Brazylia, czyli o tym jak zwięźle zapisywać informacje

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Technologie informacyjne - wykład 12 -

dr hab. inż. Lidia Jackowska-Strumiłło, prof. PŁ Instytut Informatyki Stosowanej, PŁ

FFT i dyskretny splot. Aplikacje w DSP

Kwantyzacja wektorowa. Kodowanie różnicowe.

LABORATORIUM AKUSTYKI MUZYCZNEJ. Ćw. nr 12. Analiza falkowa dźwięków instrumentów muzycznych. 1. PODSTAWY TEORETYCZNE ANALIZY FALKOWEJ.

Teoria przetwarzania A/C i C/A.

Kodowanie transformujace. Kompresja danych. Tomasz Jurdziński. Wykład 11: Transformaty i JPEG

Kompresja falkowa na przykładzie JPEG2000

Biocentrum Ochota infrastruktura informatyczna dla rozwoju strategicznych kierunków biologii i medycyny POIG /09

Grafika Komputerowa Wykład 2. Przetwarzanie obrazów. mgr inż. Michał Chwesiuk 1/38

Przekształcenia widmowe Transformata Fouriera. Adam Wojciechowski

Kompresja Stratna i Bezstratna Przegląd Najważniejszych Formatów Graficznych

0 + 0 = 0, = 1, = 1, = 0.

Akwizycja obrazów. Zagadnienia wstępne

dr inż. Piotr Odya dr inż. Piotr Suchomski

Ćwiczenie 6. Transformacje skali szarości obrazów

Kodowanie informacji. Przygotował: Ryszard Kijanka

Waldemar Izdebski - Wykłady z przedmiotu SIT / Mapa zasadnicza 30

Przetworniki cyfrowo analogowe oraz analogowo - cyfrowe

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

teoria informacji Entropia, informacja, kodowanie Mariusz Różycki 24 sierpnia 2015

TRANSFORMATA FALKOWA 2D. Oprogramowanie Systemów Obrazowania 2016/2017

Podstawy kompresji danych

Grafika komputerowa. Dla DSI II

FORMATY PLIKÓW GRAFICZNYCH

Układy równań i nierówności liniowych

Kompresja sekwencji obrazów - algorytm MPEG-2

Formaty obrazów rastrowych biblioteki PBM

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

GRAFIKA RASTROWA. WYKŁAD 2 Oprogramowanie i formaty plików. Jacek Wiślicki Katedra Informatyki Stosowanej

5. Rozwiązywanie układów równań liniowych

Cechy formatu PNG Budowa bloku danych Bloki standardowe PNG Filtrowanie danych przed kompresją Wyświetlanie progresywne (Adam 7)

Dane obrazowe. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Grafika na stronie www

Teoria informacji i kodowania Ćwiczenia

POSZUKIWANIE FALKOWYCH MIAR POTENCJAŁU INFORMACYJNEGO OBRAZÓW CYFROWYCH JAKO WSKAŹNIKÓW JAKOŚCI WIZUALNEJ

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

Wykład II. Reprezentacja danych w technice cyfrowej. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Księgarnia internetowa Lubię to!» Nasza społeczność

Kompresja bezstratna. Entropia. Kod Huffmana

Kodowanie podpasmowe. Plan 1. Zasada 2. Filtry cyfrowe 3. Podstawowy algorytm 4. Zastosowania

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Instrukcja do pracowni specjalistycznej

Spis treści. 1. Cyfrowy zapis i synteza dźwięku Schemat blokowy i zadania karty dźwiękowej UTK. Karty dźwiękowe. 1

Kompresja sekwencji obrazów

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Obróbka grafiki cyfrowej

Przetwarzanie Sygnałów. Zastosowanie Transformaty Falkowej w nadzorowaniu

PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka

Sieci neuronowe - projekt

dr inż. Piotr Odya Wprowadzenie

Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki

Przekształcenia punktowe

Zadanie 1. Suma silni (11 pkt)

Akwizycja i przetwarzanie sygnałów cyfrowych

Cyfrowe Przetwarzanie Obrazów i Sygnałów

Teoria Informacji - wykład. Kodowanie wiadomości

Rozszerzenia plików graficznych do publkacji internetowych- Kasia Ząbek kl. 2dT

Kody blokowe Wykład 2, 10 III 2011

Transkrypt:

Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Radioelektroniki Rok akademicki 2001/2002 PRACA DYPLOMOWA INŻYNIERSKA Dominik Rives Standard kompresji obrazów JPEG 2000 z uwzględnieniem zastosowań w medycynie Kierownik Pracy dr inż. Artur Przelaskowski Ocena Podpis Przewodniczącego Komisji Egzaminu Dyplomowego

Streszczenie W pracy przedstawiono podstawy teoretyczne kompresji oraz nowy standard kompresji obrazów JPEG 2000. Opisano także program do kompresji oraz dekompresji obrazów JPER 2000, który stanowi część praktyczną niniejszej pracy. Pracę uzupełnia zestaw testów standardu JPEG 2000 wykonanych z wykorzystaniem aplikacji JPER 2000. Na każdym etapie pracy brano pod uwagę przydatność standardu do kompresji obrazów medycznych. The JPEG 2000 Image Compression Standard with Regard to Medical Applications Summary The fundamentals of compression and the new JPEG 2000 image compression standard is introduced. The JPER 2000 application for compression and decompression of images practical part of this work is then described. Finally, a good few tests of standard are presented and analyzed. The tests were carried out with JPER 2000 application. Usefulness of the standard for compression of medical images is always taking into consideration.

Składam serdeczne podziękowania dr inż. Arturowi Przelaskowskiemu za pomoc i cierpliwość okazaną przy pisaniu niniejszej pracy.

Spis treści: 1. Wprowadzenie 2 1.1. Przegląd standardów kompresji obrazów 2 1.2. Wymagania stawiane kompresji obrazów medycznych 3 1.3. Cel i przebieg pracy 3 2. Podstawy teorii kompresji 5 2.1. Modelowanie danych 6 2.1.1. Transformacja przestrzeni kolorów 7 2.1.2. Transformacja falkowa 10 2.2. Kwantyzacja 15 2.3. Kodowanie danych kodowanie arytmetyczne 16 3. Standard JPEG 2000 20 3.1. Schemat kompresji 21 3.2. Struktura pliku JP2 24 3.3. Przegląd dostępnych kodeków 25 3.3.1. Kodeki programowe 25 3.3.2. Kodeki sprzętowe 28 4. Program JPER 2000 31 4.1. Założenia 31 4.2. Realizacja 31 4.3. Biblioteka JasPer 31 4.4. Praca z programem JPER 2000 34 4.5. Możliwości rozwoju 41 5. Eksperymenty 43 5.1. Badanie transformat przestrzeni kolorów 43 5.2. Badanie wpływu poszczególnych parametrów na kompresję 45 5.3. Test kompresji bezstratnej 56 5.4. Test kompresji stratnej 58 6. Podsumowanie 63 Dodatek A. Bibliografia 64 Dodatek B. Obrazy testowe 65

Rozdział 1 Wprowadzenie Jedną z najszybciej rozwijających się dziedzin diagnostyki medycznej jest obrazowanie. Dane diagnostyczne w formie obrazu są wynikiem badań radiograficznych, termowizyjnych, scyntygraficznych, ultrasonograficznych, tomograficznych (techniki DR, CT, NMR, SPECT, PET) i.in. Jedną z charakterystycznych cech danych obrazowych jest ich duża objętość. Na przykład cyfrowa radiografia klatki piersiowej to obraz o rozdzielczości 4096 4096 oraz 12 bitach na próbkę i w efekcie objętości 12 bit 4096 4096 = 24MB ; pełne badanie mammograficzne składające się z 4 obrazów to prawie 100MB. Dużo danych pochodzi także z badań, których wynikiem jest obraz trójwymiarowy (będący najczęściej serią dwuwymiarowych przekrojów, ang. slice): tomografia CT klatki piersiowej to 140 obrazów o matrycy 512 512 punktów, co daje 140 12bit 512 512 = 52MB. Taka ilość danych powoduje duże trudności w ich archiwizacji (dane muszą być przechowywane przez kilka lat). Utrudnione jest także ich wykorzystanie, np. w telediagnostyce (długi czas przesyłania danych). Powyższy przykład pokazuje celowość stosowania kompresji danych, mimo malejących cen pamięci masowej. 1.1 Standardy kompresji obrazów Standardy kompresji obrazów można podzielić na dwie grupy: standardy kompresji bezstratnej oraz standardy kompresji stratnej. Do pierwszej grupy zaliczają się wszystkie metody, które nie doprowadzają do utraty danych, tzn. obraz rekonstruowany jest identyczny z obrazem oryginalnym. W tabeli 1.1.1 zawartych jest kilka najszerzej rozpowszechnionych standardów kompresji bezstratnej. Standardy kompresji bezstratnej Liczba komponentów Liczba bitów na próbkę Graphics Interchange Format (GIF) 1, 3 8 Portable Network Graphics (PNG) 1, 3 1, 4, 8, 16 JPEG-LS 1, 3 8, 12, 16 JPEG 2000 R 1...16 384 1...38 Tabela 1.1.1 Standardy kompresji bezstratnej. Mimo że rozpowszechniony format GIF jest standardem kompresji bezstratnej, ze względu na ograniczenia standardu (obraz jest dzielony na bloki 16 na 16 pikseli; każdy blok ma własną paletę kolorów; w efekcie kompresja jest stosunkowo słaba), nie nadaje się do kompresji obrazów naturalnych. Istotnym czynnikiem ograniczającym zastosowanie formatu GIF jest także koszt licencji. Pamiętać należy, że dostępnych jest więcej metod kompresji bezstratnej, niż wymieniono w tabeli 1.1.1, jednak prace nad tymi standardami nie są formalnie zakończone, nie są więc one zarejestrowane i gotowe do natychmiastowego wykorzystania (np. TMW, MRP, LOCO, FELICS) lub nie spełniły oczekiwań i nie są 2

wykorzystywane (dotyczy to np. standardu JPEG Lossless Mode, który ze względu na niezadowalającą skuteczność kompresji został zastąpiony przez JPEG-LS oraz PNG). Tabela 1.1.2 zawiera kilka najpopularniejszych standardów kompresji stratnej. Standardy kompresji stratnej Liczba komponentów Liczba bitów na próbkę JPEG 1, 3, 4 8, 12 JPEG 2000 I 1...16 384 1...38 IW44 (DjVu) 1, 3 8 Tabela 1.1.2 Standardy kompresji stratnej. Standard JPEG nie nadaje się do kompresji obrazów naturalnych przy bardzo niskiej średniej bitowej. Silna kompresja w standardzie JPEG powoduje powstanie efektu blokowego. W przypadku DjVu problemem jest koszt licencji uprawniającej do korzystania ze standardu. 1.2 Wymagania stawiane kompresji obrazów medycznych Ze względu na zastosowania medyczne, standard kompresji powinien spełniać warunki: wysoka skuteczność kompresji, kompresja bezstratna i stratna, kompresja progresywna, kompresja z uwzględnieniem ROI (regionu zainteresowania), zdolność do kompresji/dekompresji obrazów o niestandardowej ilości bitów na piksel (np. 12bit/piksel dla skali Hounsfielda), możliwość dodania opisu zawartości, możliwość zawarcia w jednym pliku serii obrazów różnej modalności (a więc obrazów o różnych parametrach), zabezpieczenie praw. Szybkość czasu kompresji i dekompresji może mieć istotne znaczenie jedynie w przypadku telediagnostyki (np.: zdalne przeprowadzanie operacji, konsultacje itp.) i sieci o wystarczająco wysokiej przepustowości. W telediagnostyce duże znaczenie ma też odporność na błędy transmisji. Jedynym standardem kompresji, który spełnia wszystkie wymienione wyżej warunki jest JPEG 2000. 1.3 Cel i przebieg pracy Głównym celem niniejszej pracy jest analiza rozwiązań proponowanych w standardzie kompresji obrazów JPEG 2000 oraz ich praktyczne wykorzystanie opracowanie programu do wygodnej ale jednocześnie zaawansowanej kompresji i dekompresji obrazów z uwzględnieniem obrazów medycznych. Do zrozumienia standardu JPEG 2000 konieczna okazała się wiedza z zakresu teorii kompresji, a w szczególności wiedza ogólna (pojęcia dane, informacja, stopień 3

kompresji, miary zniekształceń; modelowanie oraz kodowanie danych) oraz szczegółowe poznanie praktycznych technik obróbki danych stosowanych w kompresji obrazów (transformacja kolorów, transformacja falkowa, kwantyzacja oraz kodowanie arytmetyczne). Teorii kompresji został poświęcony rozdział 2. W rozdziale 3 został przedstawiony standard JPEG 2000. Rozdział zawiera tło historyczne, schemat kompresji i własności standardu oraz przegląd obecnie dostępnego oprogramowania oraz rozwiązań do kompresji sprzętowej. Drugim etapem pracy było napisanie programu do kompresji i dekompresji obrazów wykorzystującego standard JPEG 2000 i uwzględniającego specyfikę obrazów medycznych przystosowanego do pracy z plikami o dowolnej liczbie bitów na próbkę i komponentów oraz z możliwością dodania opisu do pliku w języku XML. Program został nazwany JPER 2000. Ponieważ aplikacja ma służyć także do eksperymentów, została wyposażona w możliwie dużo opcji pozwalających na zmianę parametrów kompresji. Etap ten wymagał wykorzystania wiedzy na temat techniki i języka programowania w środowisku graficznym (wybrano środowisko Windows oraz kompilator Microsoft Studio C++). Program JPER 2000 został szczegółowo opisany w rozdziale 4. Konieczne okazało się także poznanie języka XML. Ostatnią częścią niniejszej pracy były eksperymenty przeprowadzone z wykorzystaniem napisanego programu JPER 2000. Badania objęły określenie wpływu poszczególnych parametrów na kompresję oraz porównanie standardu JPEG 2000 z innymi standardami kompresji (bezstratnej oraz stratnej). Eksperymenty opisano w rozdziale 5. 4

Rozdział 2 Podstawy teorii kompresji Kompresja danych jest procesem mającym na celu zmniejszenie ich objętości [3, 4]. Dane są w tym znaczeniu rozumiane jako uporządkowany ciąg symboli będący nośnikiem pewnej informacji. Granicznym stopniem kompresji jest więc sytuacja, w której objętość danych jest równa objętości (ilości) informacji zawartej w tym zbiorze. Poniżej przedstawiono wzór określający autoinformacje (I, ang. selfinformation), ilość informacji przekazywaną w wyniku pojawienia się jednego symbolu (zdarzenia) A o prawdopodobieństwie wystąpienia P(A): I ( A) 1 = logb. P Podstawa logarytmu b określa jednostkę informacji; jeśli b = 2 to jest nią bit. Entropia H ciągu S składającego się z n niezależnych zdarzeń A n (czyli wygenerowanych przez model bez pamięci, ang. discrete memoryless source) określa średnia ilość informacji przypadającej na jedno zdarzenie i dana jest wzorem: H ( S ) P( A ) ( A ) n ( A) 1 = n log b = P( An ) I( An ). n P n W rzeczywistości częściej spotykanym źródłem są modele z pamięcią (ang. conditional source model), w których prawdopodobieństwo zajścia zdarzenia zależy od zdarzeń wcześniej zaistniałych (liczbę zdarzeń mających wpływ na bieżące zdarzenie określa rząd takiego źródła). Skuteczność algorytmu kompresji (tzn. skuteczność redukcji objętości danych) jest określana stopniem kompresji (CR, ang. compression ratio), o postaci: D o CR =, D s gdzie: D o objętość danych oryginalnych w bitach, D s objętość danych skompresowanych w bitach. Inną często stosowana miarą jest procent kompresji (CP, ang. compression percentage): [%] 1 1 CP = 100. CR Drugą istotną własnością charakteryzującą jakość algorytmu kompresji jest stopień zniekształcenia (ang. distortion) zrekonstruowanych danych w stosunku do oryginalnych. Oczywiście miara ta dotyczy wyłącznie kompresji stratnej. Najczęściej do oceny zniekształceń stosuje się błąd średniokwadratowy (MSE, ang. mean squared 5

error). Jeśli x to N-elementowy zbiór danych oryginalnych (w przypadku obrazów są to wartości wszystkich próbek), natomiast x ~ jest zbiorem danych zrekonstruowanych, to błąd średniokwadratowy można wyznaczyć ze wzoru: MSE = 1 N N ( ~ ) n= 1 x n x n 2. Poniżej zdefiniowano kilka innych miar zniekształceń: pierwiastek błędu średniokwadratowego (RMSE, ang. root mean squared error): RMSE = MSE = 1 N N ( ) n= 1 ~ x n x n 2, średni błąd absolutny (MAE, ang. mean absolute error): MAE = 1 N ~ x n x n N n= 1, szczytowy błąd absolutny (PAE, ang. peak absolute error): PAE = ~ max x n= 1K N n x n, szczytowy stosunek sygnału do szumu (PSNR, ang. peak signal to noise ratio): max n= 1K N PSNR = MSE 2 2 ( x ) ( x ) n lub = 1 N max n= 1K N N ( ~ x x ) n= 1 [ db] 10log PSNR PSNR = 10. Proces kompresji można podzielić na dwa etapy: modelowanie oraz kodowanie danych. Jeśli kompresja jest stratna, to występuje także kwantyzacja. 2.1 Modelowanie danych W fazie modelowania tworzona jest pośrednia reprezentacja danych, która może być kodowana efektywniej, niż dane oryginalne [3, 4]. W niniejszym rozdziale przez modelowanie będzie rozumiany proces prowadzący do dekorelacji, czyli usuwania nadmiarowości z danych. Operacja ta polega na znalezieniu takiego modelu danych, który możliwie najdoskonalej opisze kompresowane dane. W przypadku danych jednowymiarowych, n n n 2 6

modelem może być równanie prostej. Wynikowym ciągiem danych będzie wtedy opis prostej oraz zbiór różnic między wartością rzeczywistą a wskazywaną przez dany punkt na prostej. Modelowanie danych sprowadza się więc do podziału oryginalnego zbioru danych na dwie części: opis modelu oraz ciąg różnic liczb o ograniczonej dynamice, które w efekcie mogą być reprezentowane mniejszą liczbą bitów. 2.1.1 Transformacja przestrzeni kolorów Transformacja przestrzeni kolorów jest przeprowadzana na obrazach kolorowych (choć można sobie oczywiście wyobrazić transformacje na obrazach o dowolnej, większej od jedności liczbie komponentów) i ma za zadanie doprowadzić do wzajemnej dekorelacji komponentów obrazu [5]. Istnieje nieskończona liczba możliwych przestrzeni kolorów. W ogólnym przypadku liniowe transformacje przestrzeni kolorów z przestrzeni RGB na V 1 V 2 V 3 wyrażone są wzorami: V V V 2 1 3 = a = a = a r1 r 2 r3 R + a R + a R + a g1 g 2 g 3 G + a G + a G + a przy czym a xx są stałymi określającymi transformacje do danej przestrzeni kolorów. Podobny zestaw równań pozwala określić transformacje V 1 V 2 V 3 na RGB: R = d G = d B = d r1 r 2 r3 V + d 1 V + d 1 V + d 1 g1 g 2 g 3 V 2 V V 2 2 + d + d + d b1 b2 b3 b1 b2 b3 B, B, B. V3, V3, V. gdzie d xx są współczynnikami określającymi tą transformację (współczynniki te uzyskuje się poprzez odwrócenie macierz współczynników a xx ). Pomysł dekorelacji obrazu kolorowego opiera się na założeniu (potwierdzonym eksperymentami przedstawionymi w rozdziale 5), że jasność, w przeciwieństwie do chrominancji (informacji o odcieniu i nasyceniu barwy), poszczególnych punktów obrazu jest informacją wspólną dla wszystkich trzech składowych RGB. Dekorelację można zatem przeprowadzić poprzez wydzielenie z wartości RGB informacji o jasności oraz chrominancji danego piksela. Modelem informacji jest w tym przypadku jasność (jako cecha wspólna wszystkich składowych R, G i B), a różnicą chrominancja. W kompresji obrazów stosuje się głównie transformatę z przestrzeni RGB na YCbCr. Składowa Y to jasność danego piksela i jest średnią ważoną trzech składowych RGB: Y = 0.2989 R + 0.5866 G + 0.1145 B. Taki udział poszczególnych składowych wynika z czułości oka ludzkiego na barwy podstawowe. Chrominancja jest różnicą miedzy dana składową piksela a jego 3 7

jasnością. Wynika z tego, ze do poprawnego odtworzenia wartości RGB wystarczają dwie z trzech składowych chrominancji. Ze względu na oczywista potrzebę minimalizacji korelacji miedzy składową jasności oraz dwiema składowymi chrominancji zdecydowano się na składowe o najmniejszym udziale w jasności: chrominancje barwy niebieskiej (Cb) oraz czerwonej (Cr): czyli: Cb = B Y, Cr = R Y, Cb = -0.2989 R - 0.5866 G + 0.8855 B, Cr = 0.7011 R - 0.5866 G - 0.1145 B. Po normalizacji (sprowadzeniu składowych Cb i Cr do zakresu zmienności od -0.5 do 0.5) przekształcenie RGB na YCbCr przyjmuje ostateczną postać: Y = 0.2989 R + 0.5866 G + 0.1145 B, Cb = -0.1687 R - 0.3312 G + 0.5000 B, Cr = 0.5000 R - 0.4183 G - 0.0816 B. Transformację odwrotną (YCbCr na RGB) określają równania: R = 1.000 Y + 1.4022 Cr, G = 1.000 Y - 0.3456 Cb - 0.7145 Cr, B = 1.000 Y + 1.7710 Cb. Na rysunku 2.1 przedstawiono obraz testowy kredki oraz rodzinę składowych RGB oraz YCbCr. Rys. 2.1 Rodzina składowych RGB oraz YCbCr obrazu testowego kredki. 8

Podane wyżej przekształcenia są nieodwracalne (ze względu na zmiennoprzecinkową reprezentacje składowych). Poniżej przedstawiono odwracalna wersję przekształcenia RGB na YCbCr: oraz YCbCr na RGB: 1 1 1 Y = R + G + B 4 2 4, Cb = B - G, Cr = R G, 1 1 G = Y Cb + Cr 4 4, R = Cr + G, B = Cb + G. Przedstawiony sposób dekorelacji obrazów kolorowych daje pozytywne efekty tylko dla obrazów naturalnych (w ogólności takich, w których informacja o jasności dominuje nad informacją o odcieniu i nasyceniu barwy). Niżej podano definicje kilku innych popularnych transformacji: Transformacja RGB na YIQ oraz YIQ na RGB RGB na YIQ: Y = 0.299 R + 0.587 G + 0.114 B, I = 0.569 R - 0.274 G - 0.322 B, Q = 0.212 R - 0.523 G + 0.311 B. YIQ na RGB: R = 1.000 Y + 0.956 I + 0.621 Q, G = 1.000 Y - 0.272 I - 0.647 Q, B = 1.000 Y - 1.105 I + 0.702 Q. Transformacja RGB na XYZ oraz XYZ na RGB RGB na XYZ: X = 0.431 R + 0.342 G + 0.178 B, Y = 0.222 R + 0.707 G + 0.071 B, Z = 0.020 R + 0.130 G + 0.939 B. XYZ na RGB: R = 3.063 X - 1.393 Y - 0.476 Z, G = -0.969 X + 1.876 Y + 0.042 Z, B = 0.068 X - 0.229 Y + 0.069 Z. 9

Transformacja RGB na CMY oraz CMY na RGB RGB na CMY: C = 1 - R, M = 1 - G, Y = 1 - B. CMY na RGB: R = 1 - C, 2.1.2 Transformacja falkowa G = 1 - M, B = 1 - Y. Transformata falkowa (ang. wavelet transform) jest kolejnym narzędziem, które ma za zadanie zdekorelować sygnał. Opisana w poprzednim punkcie transformacja przestrzeni kolorów dekorelowała informację pomiędzy komponentami obrazu. Transformata falkowa służy do rozdzielenia informacji zawartych w jednym komponencie na kilka części (pasm) o różnym zakresie częstotliwości (rozdzielczości) i jednocześnie malej wzajemnej korelacji [1, 3, 4, 6, 7]. Transformacja falkowa jest procesem przekształcającym daną funkcję na superpozycję funkcji bazowych falek. W przeciwieństwie do funkcji bazowych transformaty Fouriera sinusów i cosinusów, falki są funkcjami o skończonym nośniku i ograniczonej energii. Funkcje te muszą spełniać także warunek zerowej wartości średniej, który wymusza oscylacyjny przebieg funkcji. Falki ( t) ψ s, τ są uzyskiwane z funkcji macierzystej ψ ( t) poprzez jej przeskalowywanie w funkcji czasu (parametr s) oraz przesuniecie (parametr τ): 1 t τ ψ s τ () t = ψ s s,, gdzie 1 s,τ R; s 0. Element s gwarantuje zachowanie takiej samej energii wszystkich falek niezależnie od parametru s. Dla tak zdefiniowanych funkcji bazowych ciągłe przekształcenie falkowe (ang. continuous wavelet transform) ω s,τ ma postać: ω s τ f s, τ s, () t ψ () t = f () t ψ () t, =, τ dt. 10

Zauważyć należy, ze parametrami transformaty są wymiar i położenie falki. Dzięki temu transformata falkowa sygnału (w przeciwieństwie do transformaty Fouriera) daje bezpośredni dostęp do informacji o położeniu przestrzennym poszczególnych składowych częstotliwościowych. Funkcję oryginalną można odtworzyć korzystając z odwrotnej transformaty falkowej o postaci: gdzie: 2 Ψ( ω ) C = dω, a ( ω ) ψ 0 ω f 1 dsdτ = s, τ s, τ, 2 C s () t ω ψ () t ψ Ψ jest transformata Fouriera funkcji ψ () t. Aby całka C ψ była skończona, funkcja macierzysta ( t) warunek o zerowej wartości średniej, co odpowiada zachodzeniu równości ( 0 ) = 0 ψ musi spełniać wymieniony wcześniej Ψ. Warunek ten jest nazywany warunkiem dopuszczalności (ang. admissibility condition). Ponieważ w kompresji dane są dyskretne, bardziej interesującą wersją przekształcenia jest dyskretna transformata falkowa. Zostanie ona przedstawiona na przykładzie najprostszej transformaty falkowej transformaty Haara [7]. Najprostszym odwracalnym przekształceniem dwóch liczb (oznaczonych a, b) jest operacja polegająca na zastąpieniu danych liczb ich średnią (s) oraz różnicą (d): a + b s =, d = b a. 2 Pomysł zastosowania takiego przekształcenia opiera się na spostrzeżeniu, że jeśli wartości a i b są podobne (skorelowane), to ich różnica d będzie mała, a więc możliwa do zakodowania przy pomocy małej liczby bitów. Liczby a oraz b mogą być odtworzone ze wzorów: d a = s, 2 d b = s +. 2 Powyższe równania stanowią podstawę falkowej transformaty Haara. Niech s n będzie sygnałem (ciągiem) składającym się z 2 n wartości oznaczonych s n,l. Wartość n 2 stanowi niejako wymiar (rozdzielczość) sygnału s n, natomiast l jest numerem danej wartości (próbki) sygnału s n,l. Poste przekształcenie Haara (analiza) sygnału s n jest zdefiniowana następująco: 1 1 s n 1, l = sn,2l + sn,2l+ 1, d n 1, l = sn,2l+ 1 sn, 2l 2 2. Sygnał oryginalny s n jest dzielony na dwa sygnały (pasma) s n-1 oraz d n-1 ; oba o dwa razy mniejszej liczbie wartości (a więc o wymiarach 2 n-1 ). Sygnał s n-1 jest ciągiem średnich, natomiast d n-1 jest ciągiem różnic. Poszczególne wartości sygnałów s n-1 oraz d n-1 są nazywane współczynnikami. 11

Sygnał średnich s n-1 to niskorozdzielcza (niskoczęstotliwościowa) reprezentacja sygnału s n (czyli model sygnału oryginalnego), natomiast sygnał d n-1, ciąg różnic umożliwiający bezstratne odtworzenie sygnału oryginalnego, jest wysokorozdzielczą reprezentacją sygnału s n. Sygnały te stanowią pierwszy poziom rozkładu (dekompozycji) sygnału s n. Niskorozdzielcza reprezentacja sygnału oryginalnego s n-1 także może być poddana transformacji. W wyniku podziału s n-1 powstają dwa sygnały: s n-2 oraz d n-2, o liczbie współczynników równej 2 n 2 każdy. Proces dekompozycji sygnału może być oczywiście powtarzany n-krotnie (rysunek 2.2) co jest cechą charakterystyczną każdej transformacji falkowej. Sygnał s 0 jest sygnałem o najniższej rozdzielczości i składa się z jednego współczynnika s 0,0, który jest po prostu wartością średnią (składową stałą) sygnału oryginalnego. Rys. 2.2 Analiza. Odwrotną transformację (syntezę) Haara można wyznaczyć poprzez odwrócenie macierzy współczynników określających transformację prostą, stąd: 1 1 =, s n,2l+ 1 = sn 1, l d n 1. l, 2 2 s n,2l sn 1, l + d n 1. l natomiast schemat procesu syntezy przedstawiono na rysunku 2.3. Rys. 2.3 Synteza. Ciekawe spojrzenie na wyżej przedstawioną analizę oraz syntezę sygnału polega na zauważeniu, że sygnał oryginalny jest rozkładany za pomocą dwóch funkcji: skalującej oraz falki; przy czym funkcja skalująca wyznacza średnią wartość pary próbek, natomiast falka różnicę między tymi wartościami (rysunek 2.4). 12

Rys. 2.4 Transformacja falkowa realizowana za pomocą falki i funkcji skalującej. Z punktu widzenia teorii cyfrowego przetwarzania sygnałów przedstawiona transformata Haara stanowi zestaw dwóch bardzo prostych filtrów SOI: dolnoprzepustowego (na wyjściu którego powstaje ciąg średnich) oraz górnoprzepustowego (generującego ciąg różnic), uzupełnionych o proces binarnej decymacji (ang. downsampling) sygnału wynikowego. Filtry tej transformaty są drugiego rzędu, jednak lepsze efekty mogą być uzyskane przy pomocy filtrów wyższego rzędu (i innej rodziny funkcji bazowych, najczęściej są stosowane filtry biortogonalne). W ogólnym przypadku transformację falkową można przedstawić następująco: sn 2 t 1, l = ht sn, l+ t, d n, l g t sn, 2l+ 1 = t, t gdzie h t oraz g t to współczynniki filtru dolnoprzepustowego oraz górnoprzepustowego analizy. Odwrotna transformata falkowa ma postać: ~ = h t+ sn l+ t + g~ ~ 2 1 1, 2t+ 1d n 1 l+ t, n,2l+ 1 = h2t sn 1, l+ t + g~ s n,2l, t t s 2td n 1, l+ t t t gdzie h ~ t oraz g ~ t to współczynniki filtrów odpowiednio dolnoprzepustowego i górnoprzepustowego syntezy. W przypadku dekompozycji obrazów, proces jest identyczny, ale musi być przeprowadzany dwukrotnie (kolejno rozkładane są wiersze oraz kolumny obrazu). W efekcie takiego rozkładu powstają 4 przefiltrowane wersje obrazu oryginalnego pasma, każde odpowiadające innej częstotliwości przestrzennej po każdej ze współrzędnych. Pasma te są zazwyczaj oznaczane LL, LH, HL oraz HH. Przykładowo, pasmo oznaczone HL to obraz powstały przez przefiltrowanie obrazu oryginalnego wzdłuż współrzędnych x przez filtr górnoprzepstowy (stąd oznaczenie H, ang. high) a następnie przefiltrowanie go wzdłuż współrzędnych y przez filtr dolnoprzepustowy (oznaczenie L, ang. low). Na rysunku 2.5 przedstawiono schemat dekompozycji, 13

(analizy) obrazu testowego domek_grey o jeden poziom natomiast na rysunku 2.6 jego syntezę. Rys. 2.5 Analiza obrazu. Rys. 2.6 Synteza obrazu. 14

2.2 Kwantyzacja Kwantyzacja jest przekształceniem jednego zbioru wartości przetwarzanego sygnału w inny o mniejszej liczbie elementów [3, 4]. W technice przetwarzania danych cyfrowych oznacza to zazwyczaj podział zbioru wartości liczb (całkowitych lub rzeczywistych) na kilka przedziałów, z których każdy jest reprezentowany przez przyporządkowane mu słowo kodowe. Zbiór słów kodowych reprezentuje zatem wszystkie możliwe wartości źródła (rysunek 2.7). Rys. 2.7 Kwantyzacja. Z powyższej definicji można wysnuć dwa wnioski. Po pierwsze, proces kwantyzacji sygnału sam w sobie prowadzi do kompresji danych (mniej liczny zbiór symboli to krótsza ich reprezentacja). Po drugie, kwantyzacja prowadzi do utraty części informacji zawartej w oryginalnym ciągu danych. Najprostszym typem kwantyzatora jest kwantyzator równomierny. Kwantyzator ten charakteryzuje się tym że wszystkie przedziały (z wyjątkiem zewnętrznych, w pewnych przypadkach) mają taką samą długość. Mimo, że taki kwantyzator nie jest najczęściej optymalny (ponieważ rzeczywiste dane rzadko mają rozkład równomierny); ze względu na swoją prostotę jest często stosowany. Jeśli x oznacza dane oryginalne, a długość przedziału (krok kwantyzacji), to taki kwantyzator można opisać wzorem: x ( x) = ( x) y = Q sgn, natomiast odpowiadający mu dekwantyzator ma postać: ~ x = D +, ( y) = ( y r sgn( y) ) przy czym współczynnik r określa przesunięcie dekwantyzowanych wartości (ang. bias) i najczęściej jest równy / 2. Na rysunku 2.8 przedstawiono przykład kwantyzatora równomiernego o kroku kwantyzacji = 1 i r = 1/ 2. 15

Rys. 2.8 Kwantyzator równomierny. Szczególną cechą (i jednocześnie wadą) powyższego kwantyzatora jest fakt, że zero nie jest jednym z poziomów reprezentacji danych. Taki kwantyzator jest nazywany kwantyzatorem ze skokiem z zerze (ang. midrise quantizer). W przypadku 2 tego kwantyzatora błąd średniokwadratowy jest równy (taki wynik został uzyskany 12 dla funkcji gęstości prawdopodobieństwa o rozkładzie równomiernym). Kwantyzator stały w zerze (ang. midtread quantizier) można otrzymać zerując współczynnik r. 2.3 Kodowanie danych kodowanie arytmetyczne Modelowanie miało na celu dekorelację danych. Procesem prowadzącym do redukcji ich objętości jest kodowanie. Kodowanie danych może polegać na przyporządkowaniu symbolom alfabetu danych oryginalnych ciągów binarnych (tzn. każdemu symbolowi alfabetu źródła jest przypisywany unikalny ciąg bitów) [3, 4]. Zbiór kodów binarnych tworzy kod. Ciągi binarne są nazywane słowami kodowymi. Charakterystyczną cechą słów kodowych jest to, że mogą mieć one ich różną długość. Ponieważ kod binarny to kod o alfabecie składającym się z dwóch elementów, symbol źródła może być reprezentowany przez słowo kodowe o długości będącej wielokrotnością jednego bitu. Idea zastosowania kodowania danych w technikach kompresji polega więc na takim zaprojektowaniu kodu, aby symbole często występujące w kompresowanych danych były reprezentowane przez krótkie słowa kodowe, natomiast symbole występujące rzadko przez długie. Jakość takiego kodu może być określona przez średnią długość kodu (średnią bitową) l, która określa średnią liczbę bitów przypadającą na jeden symbol kodowanego ciągu: ( S ) P( a ) n( ) l =, i i a i 16

przy czym suma przebiega po wszystkich symbolach alfabetu, natomiast n ( a i ) jest liczbą bitów użytych do reprezentacji danego symbolu. Sam proces kodowania polega na wyznaczeniu słów kodowych o zmiennej długości stosownie do statystyki kompresowanych danych (optymalnym algorytmem generacji takich słów kodowych jest algorytm Huffmana) oraz właściwym kodowaniu, tzn. zamianie ciągu symboli na ciąg słów kodowych. Taki sposób kodowania danych ma jednak wadę. Jeśli alfabet źródła ma stosunkowo mały rozmiar a prawdopodobieństwa wystąpień poszczególnych symboli alfabetu są silnie zróżnicowane, wyżej podana procedura jest wysoce nieefektywna. Pewnym rozwiązaniem tego problemu może być specyficzne potraktowanie danych wejściowych. W pierwotnym ujęciu kompresowane dane to uporządkowany ciąg symboli należących do alfabetu źródła. Taka organizacja danych nie jest jednak obligatoryjna z punktu widzenia kodowania danych i może być zmieniona. Jedną z metod poprawy efektywności kodowania może być sztuczne powiększenie liczebności alfabetu źródła przez łączenie symboli w grupy. W przypadku zbioru dwuelementowego zgrupowanie ośmiu symboli pozwala zwiększyć liczebność alfabetu z 2 do 256 ( 2 8 = 256 ) elementów. Proces grupowania zazwyczaj niszczy jednak charakter danych. Inna niekorzystną cechą takiego kodowania jest wielkość alfabetu, który musi być przekazany do dekodera. Kodowanie takie to kodowanie z alfabetem rozszerzonym. Idea arytmetycznego kodowania danych polega na potraktowaniu kompresowanych danych jako jednego, dużego symbolu, a więc niejako na granicznym rozszerzeniu alfabetu, jednak bez konieczności jego wyznaczania i przekazywania do dekodera. Sekwencji symboli zostaje przyporządkowana jedna unikalna liczba ułamkowa należąca do zakresu [0;1). Jest to możliwe, ponieważ liczb należących do tego zakresu jest nieskończenie wiele. Liczba ta jest w pewnym sensie prawdopodobieństwem wystąpienia danego ciągu symboli i jest nazywana liczbą kodową. Jako że liczba kodowa jest wyznaczana na podstawie prawdopodobieństw symboli alfabetu źródła, aby jednoznacznie zdekodować dane dekoder musi dysponować wyłącznie zbiorem prawdopodobieństw oraz liczbą kodową nie ma zatem konieczności zapamiętywania całego alfabetu (w przypadku kodowania Huffmana alfabet musi być dla dekodera dostępny). Proces kodowania arytmetycznego można podzielić na dwa etapy. W pierwszym zakres [0; 1) jest dzielony na podzakresy. Liczba podzakresów odpowiada liczebności alfabetu źródła, natomiast szerokość jest wprost proporcjonalna do prawdopodobieństwa wystąpienia odpowiadającego mu symbolu. Podział ten może być przeprowadzony z wykorzystaniem dystrybuanty. Jeśli ( a) F S oznacza dystrybuantę zmiennej losowej S charakteryzującą źródło informacji, to przedział skojarzony z symbolem a i będzie miał zakres [ F S ( a i 1 ); F S ( a i )), przy czym F S ( a 0 ) = 0. W tabeli 2.1 podano przykładowe źródło o alfabecie składającym się z 4 symboli i odpowiadający mu podział zakresu [0; 1). 17

Symbol Statystyka źródła Prawdopo- Dystrybuanta P F dobieństwo ( ) a i ( ) S a i Zakresy a 1 0,4 0,4 [0; 0,4) a 2 0,3 0,7 [0,4; 0,7) a 3 0,2 0,9 [0,7; 0,9) a 4 0,1 1 [0,9; 1) Tabela 2.1 Podziału zakresu. Drugim etapem kodowania arytmetycznego jest generowanie liczby kodowej. Proces konstruowania liczby kodowej polega na cyklicznym zawężaniu zakresu [d; g), zwanego przedziałem kodu, odpowiednio do kolejnych symboli pobieranych ze źródła danych. Na początku przedział kodu [d; g) jest definiowany jako [0; 1). Każdy symbol pobrany ze źródła danych modyfikuje ten przedział poprzez jego zacieśnianie; każdy nowy przedział kodu zawiera się w przedziale wcześniejszym. Jeśli przez a i jest oznaczony dany symbol, to nowe granice przedziału kodu wyznacza się ze wzorów: * * * * * * d d + ( g d ) F S ( a ), g d + ( g d ) ( ) * d, = i 1 = F S a i, przy czym kodu. Na rysunku 2.9 są pokazane kolejne etapy kodowania arytmetycznego ciągu symboli {a 2, a 3, a 1, a 2 } w oparciu o dane przedstawione w tabeli 2.1. Pierwszym kodowanym symbolem jest a 2, stąd nowe granice przedziału kodu mają wartość: * g oznaczają odpowiednio poprzedni dolny oraz górny próg przedziału d = 0 + ( 1 0) 0,4 = 0, 4, = 0 + ( 1 0) 0,7 = 0, 7 g. W wyniku zakodowania kolejnego symbolu ( a 3 ) granice przyjmują postać: d = 0,7 + ( 0,7 0,4) 0,9 = 0, 67, = 0,7 + ( 0,7 0,4) 0,7 = 0, 61 g. Po zakodowaniu ostatniego symbolu przedział kodowy ma wartość [0,6196; 0,6286). Kodem jednoznacznie identyfikującym dany ciąg symboli jest dowolna liczba należąca do otrzymanego przedziału kodowego. Najczęściej tą liczbą jest dolny próg przedziału kodu lub jego środek. Do jednoznacznego zdekodowania liczby kodowej potrzebna jest informacja o prawdopodobieństwach oraz długości ciągu (w podanym przykładzie równej 4). 18

Rys. 2.9 Kolejne etapy kodowania arytmetycznego. Dekodowanie liczby kodowej jest procesem równie prostym jak kodowanie, choć ma niejako odwrotny sens. Dekodowanie to iteracyjny proces odczytywania kolejnego symbolu na podstawie liczby kodowej i jej modyfikacja. Modyfikacja liczby kodowej polega na eliminacji wpływu ostatnio zdekodowanego symbolu na wartość tej liczby, co odpowiada w pewnym sensie stopniowemu rozszerzaniu przedziału kodowego. Operację modyfikacji liczby kodowej lk wyznacza wzór: * FS ( ai 1) ( a ) F ( a ) lk lk =, F S i * przy czym przez lk oznaczono poprzednią liczbę kodową, natomiast a i jest ostatnio zdekodowanym symbolem. S i 1 19

Rozdział 3 Standard JPEG 2000 W połowie lat osiemdziesiątych grupa specjalistów z ITU oraz ISO (znana jako Joint Photographic Experts Group) została powołana do opracowania standardu kompresji obrazów. Owocem tych prac jest format kompresji JPEG, który w 1992 roku został oficjalnym standardem międzynarodowym. W wyniku ekspansji technik komputerowych w kolejne dziedziny nauki okazało się, że standard JPEG ma kilka poważnych ograniczeń, które uniemożliwiają jego szersze zastosowanie m.in. w medycynie. To sprawiło, że w marcu 1997 rozpoczęto prace nad nowymi metodami kompresji. W wyniku tych prac powstał standard JPEG 2000 [8, 9, 10, 13]. Standard JPEG 2000 dzieli się na następujące części: część 1, główny algorytm kompresji obrazów, część 2, rozszerzenia (m.in. dodatkowe transformacje, profile kolorów itp.), część 3, algorytm kompresji sekwencji obrazów (Motion JPEG 2000), część 4, test kompatybilności, część 5, oprogramowanie odniesienia (m.in. biblioteka JasPer), część 6, format pliku dla danych złożonych, część 7, (prace nad tą częścią zostały wstrzymane), część 8, bezpieczeństwo danych, część 9, sieciowe protokoły dostępu do danych, część 10, obrazy 3D, część 11, dostęp zdalny. Niniejsza praca opiera się na częściach 1 (kompresja) oraz 5 (oprogramowanie). Wykorzystano także pewne elementy części 2. Cechą charakterystyczną standardu JPEG 2000 jest to, że umożliwia on kompresję obrazów o dowolnej geometrii; tzn. składających się z komponentów o różnych wymiarach i różnej ilości bitów na próbkę. Liczba komponentów jest ograniczona do 2 14 (16384); natomiast ich maksymalna szerokość i wysokość to 2 32-1 próbki (przekracza 4 miliardy próbek). Liczba bitów na próbkę jest ograniczona do 38 bitów (ponad 4 bajty). Drugą wyjątkową cechą standardu jest progresywna dekompresja (według postępującej jakości, rozdzielczości, położenia lub kolejnego komponentu). Jednak cechą najbardziej wyróżniającą JPEG 2000 spośród innych standardów jest elastyczność dostępu do skompresowanego obrazu. Standard umożliwia dostęp do wybranego komponentu, fragmentu obrazu, jego wersji niskorozdzielczej lub o ograniczonej jakości, bez konieczności dekompresji całego pliku. Inaczej mówiąc dekoder nie musi odczytywać całego pliku, aby zdekompresować wybraną część obrazu. Wydaje się to szczególnie użyteczne w przypadku zdalnego dostępu do bazy danych zawierającej obrazy o szczególnie dużej objętości (np. obrazy radiografii cyfrowej). Baza może oferować dostęp do obrazów w dowolnej wersji, mimo że każdy 20

obraz będzie zapisany na dysku tylko w jednym pliku (rysunek 3.1). W przypadku żądania udostępnienia obrazu w żądanej wersji, z pliku wycinany jest fragment danych (proces ten nie wymaga dekompresji i może być wykonywany przez parser) i wysyłany do odbiorcy. Taka elastyczność standardu jest możliwa przede wszystkim dzięki zastosowaniu transformaty falkowej (zamiast Fouriera) oraz kodowania arytmetycznego z wykorzystaniem procedury EBCOT. Rys. 3.1 Ten sam obraz w różnych wersjach. Pliki JP2 charakteryzują się także stosunkowo wysoką odpornością na błędy transmisji. Odporność na błędy osiągnięto dzięki niezależnemu kodowaniu i transmisji fragmentów danych (pakietów, które zostaną opisane w następnym podrozdziale). W kolejnych rozdziałach zostanie przedstawiony algorytm kompresji (rozdział 3.1), format pliku JP2 organizujący skompresowane dane (rozdział 3.2) oraz przegląd dostępnych kodeków (rozdział 3.3). 3.1 Schemat kompresji Na rysunkach 3.2 oraz 3.3 przedstawiono schemat blokowy odpowiednio algorytmu kompresji oraz dekompresji; natomiast na rysunku 3.4 postać danych w kolejnych krokach procesu kompresji. Rys. 3.2 Kompresja. 21

Rys. 3.3 Dekompresja. Rys. 3.4 Postać danych na kolejnych etapach kompresji. Pierwszym etapem kompresji jest formatowanie danych polegające na umiejscowieniu poszczególnych komponentów obrazu na siatce odniesienia (ang. reference grid) oraz podziale ich na części kafelki (ang. tile). Zastosowanie siatki umożliwia dokonywanie prostych operacji na obrazie skompresowanym (m.in. obrót o wielokrotność 90 stopni) oraz kompresję obrazów o komponentach o różnej wielkości (co jest istotne z punktu widzenia zastosowań w medycynie). Podział obrazu na kafelki ma na celu zmniejszenie zapotrzebowania na pamięć, umożliwia przyspieszenie kodowania (dzięki możliwości równoczesnego kodowania wielu kafelków) oraz daje dostęp do fragmentów obrazu bez konieczności dekompresji całości (należy zaznaczyć, że taka lokalna dekompresja jest możliwa także w inny sposób, który zostanie przedstawiony w dalszej części rozdziału). Po podziale obrazu wszystkie jego części są dalej przetwarzane niezależnie. Po podziale każdy kafelek jest poddawany transformacji kolorów (cel stosowania transformaty i sposób jej przeprowadzenia został opisany w rozdziale 22

2.1.1). W standardzie zastosowano transformację YCbCr (YCC) w wersji odwracalnej (YCC R ) oraz nieodwracalnej (YCC I ). Transformacja może być zastosowana tylko w przypadku, kiedy obraz zawiera co najmniej 3 komponenty, przy czym 3 pierwsze muszą mieć taką samą wysokość, szerokość oraz liczbę bitów na próbkę. Po transformacji kolorów wszystkie komponenty są dalej przetwarzane niezależnie. Transformacja falkowa została opisana w rozdziale 2.1.2. W standardzie zastosowano dwie rodziny filtrów. Do kompresji stratnej stosuje się parę filtrów Daubechies; w przypadku transformaty prostej filtr dolnoprzepustowy jest rzędu 9, natomiast górnoprzepustowy rzędu 7 (stąd transformatę opartą na tych filtrach oznacza się jako 9/7). W tabeli 3.1.1 przedstawiono współczynniki tych filtrów dla transformaty prostej (analiza) oraz odwrotnej (synteza). Współczynniki filtrów analizy Współczynniki filtrów syntezy t h t (filtr g t ( filtr h ~ t (filtr g ~ t (filtr dolnoprzepustowy) górnoprzepustowy) dolnoprzepustowy) górnoprzepustowy) 0 0.6029490182363579 1.115087052456994 1.115087052456994 0.6029490182363579 ±1 0.2668641184428723-0.5912717631142470 0.5912717631142470-0.2668641184428723 ±2-0.07822326652898785-0.05754352622849957-0.05754352622849957-0.07822326652898785 ±3-0.01686411844287495 0.09127176311424948-0.09127176311424948 0.01686411844287495 ±4 0.02674875741080976 0.02674875741080976 Tabela 3.1.1 Współczynniki filtru 9/7. W procesie kompresji bezstratnej stosowana jest para filtrów Le Galla (filtr dolnoprzepustowy jest rzędu 5, górnoprzepustowy rzędu 3). W tabeli 3.1.2. zamieszczono współczynniki tych filtrów. Współczynniki filtrów analizy Współczynniki filtrów syntezy t h t (filtr g t ( filtr h ~ t (filtr g ~ t (filtr dolnoprzepustowy) górnoprzepustowy) dolnoprzepustowy) górnoprzepustowy) 0 6/8 1 1 6/8 ±1 2/8-1/2 1/2-2/8 ±2-1/8-1/8 Tabela 3.1.2 Współczynniki filtru 5/3. Transformacja falkowa jest przeprowadzana z wykorzystaniem algorytmu lifting. Proces kwantyzacji został przedstawiony w rozdziale 2.2. Proces ten nie służy do kontroli stopnia kompresji (kontrolę taką zapewnia drugi proces kwantyzacji nazwany sukcesywną aproksymacją, który zachodzi w dalej opisanym procesie kodowania EBCOT), a jedynie wstępnego ograniczenia dynamiki. W standardzie JPEG 2000 zastosowano kwantyzator równomierny. Mimo że współczynnik r nie został jednoznacznie przez normę zdefiniowany, zaleca się stosowanie wartości 1/2. Krok kwantyzacji jest inny dla każdego poziomu dekompozycji, zależy od liczby bitów na próbkę w obrazie oryginalnym oraz od żądanego stopnia kompresji. W przypadku kompresji bezstratnej kwantyzacja nie jest przeprowadzana. Po kwantyzacji dane zostają podzielone na dzielnice (ang. precinct), a te z kolei na bloki kodowe (ang. code block). Każdy blok kodowy to zbiór płaszczyzn bitowych 23

(ang. bit plane), które są niezależnie kodowane w koderze arytmetycznym (opisanym w rozdziale 2.3). W wyniku zakodowania jednego bloku kodowego powstaje zbiór pakietów (ang. packet). Każdy pakiet należy do danego poziomu jakości warstwy (ang. layer). Warstwa jest zbiorem wszystkich pakietów z danego poziomu jakości. Zbiór wszystkich pakietów (uzupełniony nagłówkiem z informacjami o obrazie oraz parametrach kompresji) tworzy strumień kodowy (ang. code stream) obraz w postaci skompresowanej (plik zawierający taki strumień ma zazwyczaj rozszerzenie JPC). Drugi, oprócz kwantyzacji, mechanizm regulacji średniej bitowej polega na usuwaniu niektórych pakietów z kodu. Opisana procedura kodowania nosi nazwę EBCOT (ang. Embedded Block Coding with Optimized Truncation). Ze względu na dowolny wzajemny porządek poszczególnych pakietów w strumieniu kodowym (organizacja kodu), możliwe jest kodowanie progresywne. Informacja może się zwiększać poprzez stopniowy przyrost jakości rekonstrukcji (co oznacza grupowanie pakietów należących do tej samej warstwy; progresja LRCP), przyrost rozdzielczości (grupowanie pakietów poszczególnych poziomów dekompozycji; RLCP, RPCL), powiększenie zdekodowanego obszaru (grupowanie pakietów poszczególnych dzielnic lub kafelków; PCRL) bądź dekodowanie kolejnych komponentów (grupowanie pakietów w obrębie komponentów; CPLR). Jeśli obraz został skompresowany z progresją RPCL, to w strumieniu kodowym pakiety zostały zgrupowane według poziomów dekompozycji (rozdzielczości, R PCL resolution) od najwyższego poziomu dekompozycji (najniższa rozdzielczość) do najniższego (rozdzielczość oryginalna). Każda taka grupa składa się z podgrup pakietów ułożonych według położenia ( R P CL position), czyli należących do kolejnych (w porządku rastrowym) dzielnic. Analogicznie, proces przyporządkowania pakietów powtarza się względem komponentów ( RP C L component) oraz, na końcu, warstw ( RPC L - layer). Oczywistą zaletą przedstawionej organizacji danych jest łatwa modyfikacja geometrii obrazu (poprzez usuwanie odpowiednich pakietów) bez potrzeby dekompresji. Region zainteresowania (ROI, ang. region of interest) jest tworzony po przeprowadzeniu transformacji falkowej. Etap ten polega na przeskalowaniu współczynników należących do ROI współczynniki te są niejako wysuwane do góry względem pozostałych (metoda maxshift), w wyniku dominują w bardziej znaczących płaszczyznach bitowych, i w procesie kodowania trafiają do warstw, które są w procesie dekompresji dekodowane wcześniej. 3.2 Struktura pliku JP2 Jak już wspomniano skompresowany obraz w standardzie JPEG 2000 jest ciągiem pakietów, które tworzą strumień kodowy. Strumień ten może być zapisany do pliku z rozszerzeniem JPC i odczytany przez dekompresor. Plik taki nie może jednak przechowywać żadnych dodatkowych informacji (np. opisu obrazu). W standardzie JPEG 2000 zdefiniowano format JP2, który w elegancki sposób rozwiązuje powyższy problem grupuje dane różnego typu w jednym pliku. Struktura pliku JP2 to ciąg pudełek (ang. box) rysunek 3.4. Niektóre z nich mogą zawierać inne pudełka i są nazywane super pudełkami (ang. superbox). Początek 24

pierwszego pudełka stanowi pierwszy bajt pliku. Pudełko jest zbiorem danych składającym się z trzech części: długości (4 bajtowej liczby określającej łączną długość całego pudełka), typu (4 bajtowego pola określającego zawartość pudełka) oraz danych. Rys. 3.4 Struktura pliku JP2. Część pudełek jest wymagana i musi się znaleźć w pliku JP2 (m.in. sygnatura, nagłówek, strumień kodowy ); część jest opcjonalna (m.in. dane XML ). Generalnie porządek pudełek w pliku jest dowolny, jest jednak kilka wyjątków ( sygnatura musi być pierwszym pudełkiem w pliku, typ pliku musi się znajdować zaraz za pudełkiem sygnatura, natomiast nagłówek nie powinien się znajdować za strumieniem kodowym ). Każdy plik JP2 może zawierać dowolną liczbę pudełek strumień kodowy, dane XML lub innych zdefiniowanych na potrzeby konkretnej aplikacji. 3.3 Przegląd dostępnych kodeków Obecnie dostępnych jest wiele kodeków programów/bibliotek do kompresji lub dekompresji plików formatu JPC/JP2. W większości są to kodeki programowe, jakkolwiek jest także kilka rozwiązań sprzętowych. 3.3.1 Kodeki programowe Poniżej przedstawiono w kolejności alfabetycznej większość aktualnie dostępnych kodeków programowych wraz z krótką charakterystyką. Ze względu na to, że standard JPEG 2000 jest stosunkowo młody, wydaje się, że większość programów jest nie do końca opracowana. Regułą jest, że programy nie potrafią obsługiwać obrazów z dowolną liczbą komponentów o dowolnych rozmiarach i bitach na próbkę, nie pozwalają na stosowanie regionu zainteresowania (co może szczególnie dziwić w przypadku programów przeznaczonych do zastosowań profesjonalnych, w tym także w medycynie). Ze względu na stosunkowo częste uaktualniania, nie zdecydowano się na dokładną charakterystykę każdego produktu. Wyjątkiem jest biblioteka JasPer, 25

która zostanie jednak scharakteryzowana w rozdziale 4, przy okazji omawiania programu JPER 2000. Aware JPEG 2000 Codec Autor Aware, Inc. Opis SDK dla środowiska Windows. Dostępna aplikacja demonstracyjna. Cena Nieznana. Strona http://www.aware.com/index.htm Almacom J2000 Autor Almacom. Opis Biblioteka dostępna w wersji źródłowej w języku C, dostępne źródła przykładowych programów konsolowych do kompresji oraz dekompresji w języku C oraz prostej przeglądarki w języku C#. Cena Produkt bezpłatny. Strona http://j2000.org/ Elecard JPEG-2000 Compressor Autor Elecard, Inc. Opis Aplikacja do Windows (Image Compressor) oraz oprogramowanie w języku Java (dostępne źródła) do dekompresji (Java J2K Decompressor). Aplikacja Image Compressor jest dostępna w wersji demonstracyjnej. Firma opracowała także własny format kompresji oparty na falkach (WLT). Cena Cena programu Image Compressor nie jest znana, oprogramowanie do dekompresji w języku Java jest bezpłatne. Strona http://j2000.org/ JasPer Autor Michael David Adams. Opis Biblioteka dostępna w wersji źródłowej w języku C. Dostępne źródła przykładowych programów konsolowych. Wchodzi w skład części 5 standardu JPEG 2000. Cena Produkt bezpłatny; tylko do zastosowań edukacyjnych i badawczych. Strona http://www.ece.uvic.ca/~mdadams/jasper/ JJ2000 Autor JJ2000 Partners (Canon, EPFL, Ericsson). Opis Biblioteka dostępna w wersji źródłowej w języku Java, dostępne źródła przykładowych programów do kompresji oraz dekompresji w języku Java. Wchodzi w skład części 5 standardu JPEG 2000. Cena Produkt bezpłatny. Strona http://jj2000.epfl.ch/ 26

Kakadu Autor David Taubman. Opis Biblioteka dostępna w postaci skompilowanej (w wersji statycznej oraz dynamicznej). Dostępny zestaw demonstracyjny do środowiska Windows. Cena 100 $ do zastosowań indywidualnych lub edukacyjnych, 500 $ do zastosowań edukacyjnych na wiele stanowisk, 5000 $ do zastosowań komercyjnych. Strona http://maestro.ee.unsw.edu.au/~taubman/kakadusoftware/ LEADTOOLS JPEG2000 Plug-in Autor LEAD Technologies, Inc. Opis LEADTOOLS JPEG2000 Plug-in to wtyczka do zestawów programistycznych (m.in. Raster Imaging, Multimedia Imaging i Medical Imaging) opracowanych przez LEAD Technologies. Zestawy te umożliwiają wygodny dostęp do danych obrazowych i są dostępne z wieloma interfejsami programistycznymi (API, C++ Classes, VCL, ActiveX oraz COM). Firma LEAD opracowała także wtyczkę do edytora Adobe Photoshop (LEAD J2K Photoshop Plug-in). Dostępna jest aplikacja demonstracyjna. Cena LEADTOOLS JPEG2000 Plug-in 995 $, LEAD J2K Photoshop Plug-in 29 $. Strona http://www.leadtools.com/ LuraWave.jp2 Autor Algo Vision LuraTech GmbH. Opis Pod wspólnym szyldem LuraWave.jp2 kryje się zestaw oprogramowania zawierający SDK (w języku C, do środowisk Windows, Unix/Linux i Macintosh), wygodny program GUI do kompresji i dekompresji SmartCompress oraz wtyczki do przeglądarek internetowych, edytora Adobe Photoshop oraz przeglądarki IrfanView. SDK obsługuje region zainteresowania. Firma opracowała także własny format kompresji oparty na falkach (LWF). Cena SDK 2500, SmartCompression Lite bezpłatny, wersja Professional 19,95, wtyczka do Photoshop w wersji Windows 29, w wersji Macintosh 79, wtyczka do IrfanView 9,95, wtyczki do przeglądarek IE i NS bezpłatne. Strona http://www.algovision-luratech.net/ PICTools JPEG2000 Autor Pegasus Imaging Corp. Opis SDK w języku C do środowisk Windows, Solaris i Linux. Dostępny zestaw demonstracyjny. Cena PICTools JPEG2000 do środowiska Windows 4999 $, wersja Enhanced 7999 $, PICTools JPEG2000 do środowiska Solaris 5999 $, wersja Enhanced 8999 $, PICTools JPEG2000 do środowiska Linux 4999 $, wersja Enhanced 7999 $. Strona http://www.pegasusimaging.com/ 27

Power SDK/Compressor/Viewer Autor Image Power, Inc. Opis SDK, program GUI do kompresji i dekompresji obrazów oraz wtyczka do przeglądarek internetowych. Uwaga: nie jest do końca jasne, czy SDK obsługuje format JPEG 2000 (jakkolwiek na pewno obsługuje format graficzny oparty na kompresji falkowej autorstwa Image Power). Cena Nieznana. Power Viewer jest bezpłatny. Strona http://www.imagepower.com/ WISImpressionist Autor WIS Technologies, Inc. Opis Konsolowy program do kompresji oraz dekompresji obrazów standardu JPEG 2000. Jako jeden z niewielu obsługuje kodowanie z wykorzystaniem regionu zainteresowania. Uwaga: pliki generowane przez WISImpressionist nie są zgodne z normą (precyzyjniej: są zgodne z wczesną wersją normy) i nie są czytane przez inne programy. Cena Bezpłatny do zastosowań edukacyjnych, naukowych lub demonstracyjnych. Strona http://www.wis-tech.com/ Zauważono, że pewna część wymienionych programów jest niekompatybilna. Największy zawód sprawiło oprogramowanie firmy Image Power. Aplikacja Power Compressor nie potrafiła odczytać plików skompresowanych przez inne aplikacje (co szczególnie zaskakujące m.in. przez bibliotekę JasPer, która powstała we współpracy z firmą Image Power) i sama generowała pliki nie zawsze dające się odczytać w niektórych innych programach. Zdarzyło się, że pliku skompresowanego przy pomocy aplikacji Apollo (aplikacja demonstracyjna pakietu PICTools JPEG2000) nie był w stanie otworzyć JasPer. Aplikacja firmy WIS generuje pliki niezgodne z normą i nie dające się odczytać przez żaden z innych programów. Dzięki serwisowi MIGRATOR2000, z technologii JPEG 2000 (kompresja, dekompresja, porównanie z formatem JPEG) można skorzystać poprzez sieć Internet (http://public.migrator2000.org), serwis wymaga jedynie bezpłatnej rejestracji. 3.3.2 Kodeki sprzętowe Kodeki sprzętowe mogą znaleźć zastosowanie we wszelkiego rodzaju elektronicznych urządzeniach rejestracji i przetwarzania obrazów (głównie przenośnych, choć nie tylko). W niniejszym rozdziale przedstawiono kilka takich rozwiązań. Amphion CS6510/CS6210 Autor Amphion Semiconductor, Ltd. Opis Para układów scalonych (odpowiednio koder oraz układ transformacji falkowej) do kompresji obrazów o szerokich zastosowaniach. Cena Nieznana. Strona http://www.amphion.com/ 28