440 likes | 676 Views
Bezstratna kompresja obrazów. Bezstratna kompresja obrazów. P rzegląd pojęć i metod Proste algorytmy kompresji obrazów Algorytm Lossless JPEG Algorytm JPEG-LS Inne popularne a lgorytmy ( JBIG, JBIG II , GIF, PNG ). Obraz cyfrowy.
E N D
Bezstratna kompresja obrazów • Przegląd pojęć i metod • Proste algorytmy kompresji obrazów • Algorytm Lossless JPEG • Algorytm JPEG-LS • Inne popularne algorytmy (JBIG, JBIG II, GIF, PNG)
Obraz cyfrowy • Obraz cyfrowy jest dyskretną reprezentacją naturalnego obrazu otrzymaną w wyniku procesu akwizycji bądź wygenerowaną w sposób sztuczny. Obraz najczęściej jest reprezentowany komputerowo jest jako prostokątna tablica pikseli • Piksel, jako element obrazu cyfrowego, reprezentuje odpowiadający mu fragment powierzchni obrazu rzeczywistego. Praktycznie piksel to wektor dyskretnych wartości — składowych barwy fragmentu powierzchni obrazu • Ze względu na liczbę składowych piksela oraz sposób ich reprezentacji i interpretacji obrazy cyfrowe dzielimy na kilka klas obrazów
Klasy obrazów cyfrowych • Obrazy binarne — piksel to bit • 0 — czarny, 1 — biały • Obrazy w stopniach szarości — piksel jest nieujemną liczbą całkowitą • Zakres wartości piksela (liczba stopni szarości, liczba poziomów jasności) na ogół nie przekracza 216 • Przez obraz o głębi jasności N bitów na piksel rozumieć będziemy obraz o liczbie stopni szarości 2N • Zwykle: 0 — czarny, 2N– 1 — biały
Klasy obrazów cyfrowych • Obrazy barwne — piksel to 3-elementowy lub 4-elementowy wektor składowch obrazu w danej przestrzeni barw • RGB • YCrCb • HSV • ... i inne • Obrazy k-spektralne (lub multispektralne) • piksel to k-elementowy wektor, jego poszczególne składowe opisują jasność obrazu w różnych zakresach spektrum elektromagnetycznego (np. podczerwień, zakresy widzialne) • obrazy satelitarne mogą mieć kilkadziesiąt składowych • obraz RGB jest obrazem multispektralnym • obrazy YCrCb, HSV nie są obrazami multispektralnymi
Klasy obrazów cyfrowych • Obrazy z paletą barw— piksel to pojedyncza nieujemna liczba całkowita interpretowana jako numer barwy z pewnej palety barw. • W odróżnieniu od pozostałych klas, dla obrazów z paletą barw przyjmuje się, iż nie ma bezpośredniego związku pomiędzy wartością piksela a jasnością, nasyceniem ani barwą elementu obrazu • Obrazy binarne i obrazy z paletą barw często pozyskiwane są jako odpowiednio obrazy w stopniach szarości oraz barwne, a następnie przekształcane • dithering • progowanie
Cechy obrazów cyfrowych • Obraz jest 2D • Naturalne obrazy zawierają szum • Rozmiar alfabetu źródła jest duży (dla stopni szarości typowo 256 do 65536, dla obrazów barwnych 16777216 do 281474976710656 ) • kosztowne staje się stosowanie zwykłych modeli danych (tym bardziej dla wyższych rzędów modelu) • problemy z adaptacją modelu • Barwa większości pikseli typowego obrazu jest zbliżona do barwy pikseli go otaczających
Kompresja obrazów cyfrowych • Dla obrazów konstruujemy specjalizowane algorytmy kompresji • algorytmy uniwersalne nie sprawdzają się • nie wykorzystują cech charakterystycznych obrazów • stosujemy je, lecz jako element bardziej złożonego algorytmu • kompresja stratna obrazów (za tydzień) • wykorzystuje cechy charakterystyczne obrazów i zmysłu wzroku człowieka • „wizualnie bezstratne” • „diagnostycznie bezstratne” • dlaczego i kiedy stosujemy? • dlaczego (i kiedy) nie?
Kompresja obrazów cyfrowych • Dla obrazów konstruujemy specjalizowane algorytmy kompresji • dodatkowe przydatne cechy algorytmów • (podstawowe to były: współczynnik i złożoności) • kodowanie progresywne/hierarchiczne • podział obrazu na poziomy rozdzielczości, kodowane od najmniejszej • kodowanie „piramidowe” gdy rozdzielczość poziomów rośnie w obu kierunkach • algorytmy LPL (lossy plus lossless) • kodowanie obszarów zainteresowania • dostęp swobodny do wybranego fragmentu obrazu(czyli dekodowanie części obrazu bez dekodowania całości)
Proste algorytmy kompresji obrazów (starsze) • Kodowanie długości sekwencji • Kodowanie konturowe • Kodowanie drzewiaste
Kodowanie długości sekwencji • obraz przeglądamy w kolejności rastrowej (lub innej), tzw. linearyzacja • ciąg pikseli kodujemy algorytmem RLE • stosowany w formacie .TIFF
Kodowanie konturowe • obraz dzielimy na tzw. kontury, czyli spójne obszary składające się z jednakowych pikseli, kodujemy zbiór opisów konturów • opis danego konturu zawiera informacje o barwie pikseli konturu, położeniu konturu w obrazie oraz kształcie konturu, zadanym przez krawędź konturu opisaną tzw. kodem łańcuchowym:PPDDDLLLGPGGPrawo Prawo Dół ...
Kodowanie drzewiaste • Obraz reprezentowany jest przez drzewo czwórkowe • Korzeń drzewa to cały obraz • Dany węzeł odpowiada prostokątnemu fragmentowi obrazu • Jeżeli wszystkie piksele tego fragmentu są identyczne, to węzeł jest liściem, w którym pamięta się barwę pikseli • W przeciwnym przypadku węzeł ma 4 synów, każdy z nich opisuje dokładnie jedną ćwiartkę obrazu odpowiadającego temu węzłowi
Proste algorytmy kompresji obrazów (starsze) • Kodowanie długości sekwencji • Kodowanie konturowe • Kodowanie drzewiaste • Inne ... • Stosowane przede wszystkim dla rysunków i prostych obrazów o małej liczbie barw, obrazów binarnych • Ciąg symboli opisujący obraz zakodowany z użyciem tych metod zwykle nadaje się do dalszej kompresji za pomocą algorytmów statystycznych bądź słownikowych
Nowoczesne metody kompresji obrazów • Algorytmy predykcyjne • na podstawie • modelu obrazu • już przetworzonej części obrazu • znanego otoczenia danego piksela • spróbuj przewidzieć barwę piksela (predykcja) • kompresuj błąd predykcji (różnicę między przewidzianą i rzeczywista barwą) • Algorytmy transformacyjne, kodowanie podpasmowe • obraz przekształć odpowiednią transformatą (DCT, DWT) • kodowania predykcyjnego nie uznaje się za kodowanie transformacyjne • kompresuj macierz współczynników transformaty • stosowane głównie w algorytmach stratnych
Predykcja • Rozkład prawdopodobieństwa jasności pikseli typowego obrazu jest mniej-więcej równomierny • Po predykcji typowo otrzymujemy ciąg symboli (zwany residuum) o rozkładzie Laplace’a (symetryczny rozkład wykładniczy) • łatwiej kodować (Golomb, Golomb-Rice) • łatwiej modelować(nawet dla dużego alfabetu) • lepsze współczynniki
Algorytm Lossless JPEG • Komitet JPEG • powołany w 1986 z inicjatywy organizacji ISO, CCITT oraz IEC aby opracować standardowy algorytm kompresji obrazów, po kilku latach opracowano 2 standardy • tzw „JPEG” ― popularny do dziś transformacyjny algorytm kompresji stratnej • Lossless JPEG― adaptacyjny algorytm bezstratny, przeznaczony do kompresji obrazów w stopniach szarości o głębiach jasności 2-16 bitów na piksel(Lossless JPEG to zaadaptowany algorytmSunset,opracowany w latach 80. przez Langdona, Rissanena Todda)Langdon, G.; Gulati, A.; Seiler, E.: On the JPEG model for lossless image compression. Proceedings DCC'92, 1992, pp. 172-80
Algorytm Lossless JPEG ― predykcja • Obraz przeglądamy w kolejności rastrowej • Dokonujemy predykcji jednym z 8 predyktorów zdefiniowanych w standardzie • użyj ten sam predyktor dla całego obrazu • można wypróbować wszystkie predyktory i wybrać najlepszy
Algorytm Lossless JPEG ― modelowanie • Kontekstem dla PX = Pred(X) ― błędu predykcji piksela X są błędy predykcji sąsiadów górnego PB i lewego PA • Konteksty zgrupowano w kubełki • metoda zastosowana pierwszy raz w algorytmie sunset • ograniczenie złożoności pamięciowej (w Lossless JPEG 25 kubełków) • lepsza adaptacjaproblem „rozmycia kontekstu” (context dilution)
Algorytm Lossless JPEG ― kodowanie • Do wyboru • arytmetyczny koder entropijny (QM-coder) z kontekstowym modelem danych • koder Huffmana z modelem bezpamięciowym • predefiniowana rodzina kodów
Algorytm JPEG-LS • Nowy standard komitetu JPEG dla bezstratnej kompresji obrazów • ITU-T; ISO/IEC: Information technology – Lossless and near-lossless compression of continuous-tone still images – Baseline. ITU-T Recommendation T.87 and ISO/IEC International Standard 14495-1, June 1999. • Z roku 1999, następca algorytmu Lossless JPEG, wyłoniony w drodze konkursu (ogłoszonego w 1996) oparty o algorytm LOCO-I (Weinberger, Seroussi, Sapiro, 1996) • Weinberger, M. J.; Seroussi G.; Sapiro G.: LOCO-I: A low complexity, context-based, lossless image compression algorithm. Proceedings DCC'96, IEEE Comput. Soc. Press, Los Alamitos, California, 1996, pp. 140-9. • Weinberger M. J., Seroussi G., Sapiro G.: The LOCO-I lossless image compression algorithm: Principles and standardization into JPEG-LS. IEEE Trans. Image Processing, August 2000, Vol. 9(8), pp. 1309-24.
C B A X Algorytm JPEG-LS ― predykcja • Predyktor nieliniowy • wykrywanie krawędzi poziomych i pionowych • predyktor prosty lecz skuteczny PredMED(X) = median(A, B, A + B – C) if C ≥ max(A; B) PredMED(X) = min(A; B) else if C ≤ min(A; B) PredMED(X) = max(A; B) else PredMED(X) = A + B − C;
Algorytm JPEG-LS ― kodowanie • Dla obrazu o głębi N bitów • jasność piksela X jest w zakresie [0, 2N– 1] • błąd predykcji Rp = X–Pred(X) jest w zakresie [–2N+ 1, 2N– 1] • ale dla danej wartości predyktora możliwych jest tylko 2N wartości błędu predykcji • można zatem wykonywać obliczenia w arytmetyce modulo 2N kodowanie: Rm = ( X–Pred(X) ) mod 2N dekodowanie: X = ( Rm+Pred(X) ) mod 2N • w JPEG-LS obliczenia „modulo” w przedziale [–2N–1, 2N–1– 1] • operacja zaburza rozkład po dekorelacji • ale zaburza dla typowych obrazów nieznacznie • unikamy „ekspansji alfabetu”
Algorytm JPEG-LS ― kodowanie • Do kodowania zastosowano zmodyfikowaną rodzinę kodów Rice’a, przeznaczoną dla rozkładu wykładniczego (a nie rozkładu Laplace’a) • Konieczne jest mapowanie błędów predykcji • kolejność: 0, –1, 1, –2, 2, –3, 3 ...
Algorytm JPEG-LS ― kodowanie • Zastosowano zmodyfikowaną rodzinę kodów Rice’a • długość kodu ograniczona (do 32 dla głębi obrazu 8 bitów) • (przykład /następny slajd/ dla głębi 4 ograniczenie do 8 bitów) • dlaczego ograniczamy długości słów kodowych?
C B D A X Algorytm JPEG-LS ― modelowanie • Kontekst wyznaczony na podstawie trzech tzw. „gradientów” γ1 = D – B, γ2 = B – C, γ3 = C – A • Konteksty zgrupowano w 365 kubełków
Algorytm JPEG-LS ― modelowanie • Model dedykowany dla rodziny kodów Rice’a • Aby wyznaczyć parametr k kodu Rice’a dla każdego z kontekstów wystarczy pamiętać liczbę błędów predykcji S oraz sumę błędów predykcji A, następnie: k = min{ k’ | 2k’ S ≥ A } for ( k=0; (S<<k)<A; k++ ); • Okresowe dzielenie liczników
Algorytm JPEG-LS ― udoskonalenia • Korekta wartości średniej błędu predykcji • Dla całego obrazu błędy predykcji mają rozkład Laplace’a o wartości średniej 0 • Ale lokalnie dla poszczególnych kontekstów wartość średnia jest jedynie bliska 0 • Dla każdego kubełka adaptacyjnie szacuje się ∆X, czyli wartość średnią błędu predykcji i przed kodowaniem przeprowadza korektę kodujemy:X – PredMED(X) –∆X
Algorytm JPEG-LS ― udoskonalenia • Obszary o stałej jasności • W obrazach, zwłaszcza nie-naturalnych, występują obszary o stałej jasności • Dla takich obszarów • modele projektowane dla typowych obrazów nie sprawdzają się dobrze • kody przedrostkowe są nieefektywne(nie osiągniemy współczynnika lepszego niż 1 bit na piksel) • Można wykrywać takie obszary i kodować je odmiennie niż resztę obrazu, w JPEG-LS: • gdy γ1 = γ2 = γ3 = 0 to przechodzimy do odmiennego trybu kodowania, tzw. „run mode” • ... i kodujemy pojedynczym słowem kodowym liczbę kolejnych pikseli o takiej samej jasności
Algorytm JPEG-LS • Cechy • predykcyjny • dość prosty/szybki • współczynniki kompresji zbliżone do najlepszych • jest wariant „prawie bezstratny: (nearly lossless) • jest wiele rozszerzeń, w tym rozszerzenie o większej złożoności i lepszych współczynnikach oparte na kodowaniu arytmetycznym
Inne algorytmy ― obrazy binarne • CCITT Group 3 (1985) • standard dla faksów, nadal stosowany • kodowanie długości sekwencji białych i czarnych pikseli obrazu przeglądanego w porządku rastrowym • długość sekwencji kodowana za pomocą predefiniowanych kodów przedrostkowych • CCITT Group 4 • uwzględniamy poprzedni wiersz, kodujemy różnice • występuje niebezpieczeństwo propagacji błędu, gdyżtransmisja faksowa odbywa się przez kanał z szumem • co kilka wierszy kodujemy wiersz algorytmem CCITT Group 3
Inne algorytmy ― obrazy binarne • JBIG • adaptacyjny koder arytmetyczny (QM-Coder) • kontekst zbudowany z 10-12 już przetworzonych pikseli (zatem mamy 1024-4096 kontekstów) • tryb progresywny „piramidowy” • obraz w niższej rozdzielczości tworzony jest przez uśrednienie bloków 2x2 piksele obrazu wyższej rozdzielczości • konieczne było zdefiniowanie sposobu uśredniania bloków zawierających po 2 piksele białe i czarne • przy kodowaniu obrazu w wyższej rozdzielczości kontekst zawiera również piksele obrazu niższej rozdzielczości
Inne algorytmy ― obrazy binarne • JBIG2 • znacznie rozszerzony algorytm JBIG • kilka trybów kodowania • algorytmy ze specyfikacji CCITT 3 i 4 • kodowanie arytmetyczne z JBIG • kodowanie słownikowe (słownik symboli-bitmap) – dla kompresji tekstów i półtonów • różne fragmenty obrazu mogą być kodowane różnymi metodami • standard definiuje dekompresor (tylko dekompresor) • dopuszcza się kompresję stratna • koder wybiera jak i które metody zastosować
Inne algorytmy ― obrazy w stopniach szarości • Algorytmy JBIG stosuje się również do obrazów w stopniach szarości po rozbiciu tych obrazów na płaszczyzny bitowedla naturalnego kodu binarnego lub dla kodu Graya 000 001 011 010 110 111 101 100 unsigned gray = binary ^ (binary >> 1); // ^ to xor słowa kodowe kolejnych liczb różnią się dokładnie jednym bitem odległość Hamminga dla dwóch kolejnych słów wynosi 1
Inne algorytmy ― obrazy w stopniach szarości • CALIC (X. Wu i N. Memon 1996) • algorytm predykcyjny, w którym po linearyzacji w kolejności rastrowej, ciąg błędów predykcji kompresuje się arytmetyczne lub koderem Huffmana • algorytm uzyskuje wysokie współczynniki kompresji, jest uznawany za nieoficjalny standard pod tym względem • istnieją algorytmy lepsze, dla typowych obrazów uzyskują o kilka procent lepsze współczynniki i kilka (lub nawet kilkaset) razy mniejszą prędkość • w porównaniu do JPEG-LS, CALIC uzyskuje o kilka procent lepsze współczynniki i 2-5 razy mniejszą prędkość
Inne algorytmy ― obrazy barwne • W obrazach RGB poszczególne składowe obrazu są na ogół silnie skorelowane. Większość algorytmów radzi sobie z tym następująco: • przeprowadza transformację obrazu do innego modelu barw, uzyskując nowy, mniej nadmiarowy zbiór składowych piksela, • YCrCb • YC1C2 • KLT/PCA • koduje poszczególne składowe (np. predykcyjnie) • niezależnie od pozostałych składowych • lub używając już zakodowanych składowych do polepszenia modelowania dla kodowanej składowej
Inne algorytmy ― obrazy barwne • Transformacja przestrzeni barw obrazu do innego modelu, użyta w algorytmie bezstratnym musi być odwracalna • składowe po transformacji zaokrąglamy do liczb całkowitych • Odwracalna transformacja YC1C2 (z JPEG2000) • jest też wersja bez „ekspansji alfabetu” w arytmetyce modulo z rozszerzonego standardu JPEG-LS
Inne algorytmy ― obrazy z paletą • GIF • początkowo wewnętrzny standard opracowanym przez sieć CompuServe • do kompresji obrazów z paletą do 256 barw, oparty o LZW • opatentowany • dodatkowe elementy • seria obrazów (animacja) • progresywny schemat kompresji obrazu, który polega na linearyzacji obrazu w porządku z przeplotem (najpierw co 8 wiersz obrazu poczynając od wiersza 0, po czym co 8 wiersz poczynając od wiersza 4, następnie co 4 wiersz poczynając od 2 wiersza i ostatecznie co 2 wiersz poczynając od wiersza 1)
Inne algorytmy ― obrazy z paletą • PNG • algorytm predykcyjny (4 predyktory do wyboru) oparty o kodowanie słownikowe LZ77 i kody Huffmana (z ograniczoną długością słowa kodowego lub predefiniowane) • wolny od patentów standard WWW Consortium, przeznaczony dla • obrazów z paletą barw • obrazów barwnych i obrazów w stopniach szarości o głębi jasności do 16 bitów na piksel (jednak tutaj nie dorównuje JPEG-LS ani pod względem współczynnika ani szybkości) • tryb progresywny doskonalszy niż w algorytmie GIF
Ciekawostka • Obrazy o rzadkich histogramach • tu PNG może by lepszy od JPEG-LS i CALIC
Ciekawostka • Pakowanie histogramów (histogram packing) • wymaga zakodowania oryginalnego histogramu • może poprawić współczynnik o kilkadziesiąt procent