Założenia i obszar zastosowań KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG Plan wykładu: Geneza algorytmu Założenia i obszar zastosowań JPEG kroki algorytmu kodowania obrazu Założenia: Obraz monochromatyczny Tablica liczb całkowitych, opisujących jasność punktów obrazu. Obraz barwny Tablice liczb całkowitych (zazwyczaj trzy), opisujące obraz w języku przyjętego modelu barw n.p. dla modelu RGB trzy tablice określające zawartości trzech barw podstawowych. Zastosowanie algorytmu: Kompresja cyfrowych obrazów fotograficznych. Geneza algorytmu JPEG - algorytm kodowania obrazu Joint Photographic Expert Group - 1986 ISO - International Standard Organisation CCITT - Comité Consultatif International de Téléphonie et Télégraphie Standard ISO - 11 1. Konwersja obrazu do modelu luminancjachrominancja (obrazy barwne) 2. Podział obrazu na bloki 3. Obliczenie transformaty kosinusowej dla bloków 4. Kwantyzacja współczynników transformaty 5. Konwersja tablicy współczynników transformaty do postaci wektora 6. Kodowanie entropne wektora współczynników 1
Krok 1 - Konwersja obrazu do modelu YIQ (YUV, YC b C r ) Przykładowo, dla modelu RGB obraz opisany jest przy pomocy trzech tablic: R r, G g, B b Konwersja polega na opisaniu obrazu przy pomocy trzech nowych tablic Y, I, Q, których elementy oblicza się według zależności: y i q 0.229 0.168 0.212 0.58 0.25 0.528 0.114 r 0.321 g 0.311 b Krok 3 - Obliczanie transformaty kosinusowej (DCT) dla bloków Transformata prosta (DCT): F( u,v ) f ( x, y ) C( u )C( v ) 4 1 4 u0 v0 x0 y0 Transformata odwrotna (DCT -1 ): 1 / gdzie C( u ) 1 C( u )C( v f ( x, y )cos )F( u,v )cos 2 dla u 0 i dla u 0 2x 1 2 y 1 u cos v 16 16 2x 1 2 y 1 u cos v 16 16 1 / C( v ) 1 2 dla v 0 dla v 0 Krok 2 Podział obrazu na bloki Własności transformaty kosinusowej Po wykonaniu konwersji obraz jest opisany przy pomocy trzech nowych tablic: Y y, I i, Q q Tablica Y określa tak zwaną luminancję, natomiast U i V chrominancję. Podział obrazu na bloki Tablice Y, U i V po przeskalowaniu tak, że ich elementy stają się liczbami całkowitymi dzieli się na bloki (mniejsze tablice) o rozmiarze 8x8, opisane funkcją. Fragment obrazu płaszczyzna Blok obrazu f ( x, y ) x 0,1,..., y 0,1,..., Blok jako funkcja Transformata DCT funkcji 2
Własności transformaty kosinusowej Funkcja i jej transformata dla obrazu fotograficznego - przykład Fragment obrazu szachownica Blok obrazu = 186 198 1 190 182 1 182 19 19 184 183 16 13 12 15 184 188 182 180 18 14 12 11 166 132 130 139 146 151 169 191 201 131 134 13 140 139 139 139 138 153 15 161 12 1 145 89 49 190 18 192 196 120 43 39 4 16 184 18 112 41 39 43 44 = 1.204 0.132-0.0212-0.0364 0.0023 0.0088 0.0023 0.0002 0.2165-0.158 0.0319 0.0240-0.0012-0.0143-0.0025-0.0002-0.008 0.1324 0.0194-0.0460-0.0065 0.0029 0.0046 0.0001 0.0169-0.0018-0.0613 0.0242 0.0146-0.0103-0.0063-0.0006-0.0315-0.0626 0.052-0.0192-0.0225 0.0000 0.0069-0.0004 0.028 0.0069-0.0122-0.0150 0.0260 0.0086-0.0065 0.0001 0.0123 0.0115-0.0166 0.0300-0.0216-0.005 0.0049 0.0004-0.0005 0.0352 0.0060-0.0166 0.0128 0.0052-0.0039-0.0005 * 1.0e+003 Blok jako funkcja Transformata DCT funkcji Własności transformaty kosinusowej Krok 4 - Kwantyzacja współczynników transformaty DCT Fragment obrazu fotograficznego Blok obrazu F Q ( u,v ) F Q (u,v) Integer F( u,v ) Round Q( u,v ) Q( u,v ) 16 12 14 14 18 24 49 2 11 12 13 1 22 35 64 92 10 14 16 22 3 55 8 95 16 19 24 29 56 64 8 98 24 26 40 51 68 81 103 112 40 58 5 8 109 104 121 100 51 60 69 80 103 113 120 103 61 56 56 62 92 101 1 18 24 4 Q( u,v ) 18 21 26 24 26 56 4 66 24 26 40 58 51 60 61 56 Blok jako funkcja Transformata DCT funkcji dla luminancji Y lub obrazów szarych dla chrominancji U i V 3
Transformata dla obrazu fotograficznego po kwantyzacji - przykład Kodowanie i dekodowanie bloku dwa przykłady = 1.204 0.132-0.0212-0.0364 0.0023 0.0088 0.0023 0.0002 0.2165-0.158 0.0319 0.0240-0.0012-0.0143-0.0025-0.0002-0.008 0.1324 0.0194-0.0460-0.0065 0.0029 0.0046 0.0001 0.0169-0.0018-0.0613 0.0242 0.0146-0.0103-0.0063-0.0006-0.0315-0.0626 0.052-0.0192-0.0225 0.0000 0.0069-0.0004 0.028 0.0069-0.0122-0.0150 0.0260 0.0086-0.0065 0.0001 0.0123 0.0115-0.0166 0.0300-0.0216-0.005 0.0049 0.0004-0.0005 0.0352 0.0060-0.0166 0.0128 0.0052-0.0039-0.0005 * 1.0e+003 Dla obrazu fotograficznego przed kompresją po kompresji i dekompresji f * (x,y) F Q (u,v) = 5 12-2 -2 0 0 0 0 18 15 2 1 0 0 0 0-1 0 1-2 0 0 0 0 1 0-3 1 0 0 0 0-2 -3 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Dla obrazu szachownica przed kompresją po kompresji i dekompresji f * (x,y) Odwrócenie wykonanych operacji - dekodowanie Integer Round (DCT -1 ( F Q (u,v)*q(u,v) )) f * (x,y) Krok 5 - Konwersja tablicy współczynników do postaci wektora F Q (u,v) [DC, AC 1, AC 2,..., AC 63 ] = f*(x,y) = 186 198 1 190 182 1 182 19 19 184 183 16 13 12 15 184 188 182 180 18 14 12 11 166 132 130 139 146 151 169 191 201 131 134 13 140 139 139 139 138 153 15 161 12 1 145 89 49 190 18 192 196 120 43 39 4 16 184 18 112 41 39 43 44 183 186 18 182 16 18 188 198 18 188 196 192 180 169 168 11 169 14 18 15 10 10 16 183 14 140 133 135 148 168 186 19 131 126 126 135 149 153 146 136 150 160 13 18 163 12 82 51 16 190 195 12 125 5 44 31 181 185 168 114 50 19 32 58 Algorytm zig-zag (A. G. Tescher 198) F Q (u,v) = 5 12-2 -2 0 0 0 0 18 15 2 1 0 0 0 0-1 10 1-2 0 0 0 0 1 0-3 1 0 0 0 0-2 -3 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [DC, AC 1,...,AC 63 ] = [5, 12, 18, -1, 15, -2, -2, 2, 10, 1, -2, 0, 1, 1, 0, 0, 0, -2, -3, -3, 1, 0, 0,..., 0] 4
Krok 6 Kodowanie wektora współczynników Kodowanie współczynników DC - algorytm wektor - [DC, AC 1, AC 2,..., AC 63 ] kodowanie DC dla bloków obrazu (tablicy bloków) kodowanie AC 1, AC 2,..., AC 63 dla bloku Kodowanie entropne - długość słowa kodowego odpowiadającego kodowanemu elementowi (symbolowi) jest różna dla różnych elementów. Elementy, które statystycznie występują częściej mają krótsze słowa kodowe. Powoduje to, że średnia długość całego ciągu kodowego jest mniejsza. 1. Zbudować wektor DC = [ DC 0, DC 1, DC 2,..., DC k, DC k+1,..., DC m ] 2. Wyliczyć wektor Δ = [ Δ 0, Δ 1,..., Δ i,..., Δ m ] ze wzoru: Δ 0 = DC 0 Δ i = DC i -DC i-1 i = 1,2,...,m 3. Elementy wektora Δ = [ Δ 0, Δ 1,..., Δ i,..., Δ m ] zakodować przy pomocy tabeli kodu Huffmana (tabela 1): Kodowanie współczynników DC Kodowanie współczynników DC - algorytm W kroku 2 obraz został podzielony na bloki o rozmiarze 8x8 pikseli. DC 0 DC 1 DC 2 blok 0 blok 1 blok 2 DC k DC k+1 blok k blok k+1 DC 2k blok 2k............ DC i -składowa stała dla bloku i, i = 0, 1,..., m m - liczba bloków obrazu Do kodowania składowej stałej stosuje się algorytm DPCM. Tabela 1. Wartość Δ i Size Typowy kod Huffmana Bity dodatkowe dla Size 0 0 00 - -1, 1 1 010 0,1-3,-2, 2, 3 2 011 00,01,10,11 -,,-4,4, 3 100 000,,011,100,,111-15,,-8,8,,15 4 101 0000,,0111,1000,,1111-204, -1024,1024,,204 11 1 1111 1110 000 0000 0000,,111 1111 1111 Kodowanie przebiega następująco: 5
Kodowanie współczynników DC - algorytm Kodowanie współczynników AC Dla kolejnego Δ i określić Size np. przy pomocy wzoru: Size = Integer Round [log 2 ( abs(δ i ) ) +1] Dla wyznaczonego Size z tabeli odczytać odpowiedni kod Huffmana i w zależności od wartości Δ i bity dodatkowe. Kodem Δ i jest ciąg bitów złożony z kodu Huffmana dla Size i bitów dodatkowych. Przykład: Dla kolejnego bloku ciąg współczynników ma postać: [DC, AC 1,...,AC 63 ] = [5, 12, 18, -1, 15, ] Dla poprzedniego bloku składowa stała DC wynosi 1. Przykładowa postać wektora współczynników AC: [ AC 1,...,AC 63 ] = [2, 18, -1, 5, -2, -2, 2, 10, 1, -2, 0, 1, 1, 0, 0,.., 0] Wektor zawiera elementy niezerowe, przedzielone niekiedy ciągami zer. [..., AC i-1, 0,..., 0, AC i, 0,..., 0, AC i+1, 0,... ] Ciąg elementów koduje się przy pomocy następującej zasady. gdzie... Symbol-1 Symbol-2 Symbol-1 Symbol-2... 0,..., 0, AC i = Symbol-1 Symbol-2 Kodowanie współczynników DC - przykład Kodowanie współczynników AC Rozwiązanie: Oblicza się Δ i ze wzoru: Δ i = DC i -DC i-1 = 5 1 = 4 Dla Δ i wyznacza się Size Size = Integer Round [log 2 ( abs(4)) +1] = 3 W tabeli dla Size = 3 kod Huffmana wynosi 100, a bity dodatkowe dla Δ i = 4 mają wartość 011 Ostatecznie kod dla współczynnika Δ i = 5 jest ciągiem bitów 100 011 Symbol-1 Symbol-2 = (Runlength, Size) = (Amplitude) Runlength liczba zer pomiędzy AC i i poprzednim niezerowym AC i-1 Size liczba określająca zakres AC i Amplitude liczba wyrażajaca wartość AC i Do kodowania współczynników AC i używa się podobnie jak dla współczynników DC kodu Huffmana. 6
Kodowanie współczynników AC - algorytm Kodowanie współczynników AC - algorytm 1. Obliczyć Runlength, czyli liczbę zer pomiędzy poprzednim niezerowym AC i-1 a aktualnie kodowanym współczynnikiem AC i 2. Dla kodowanego współczynnika AC i obliczyć Size ze wzoru: Size = Integer Round [log 2 ( abs(ac i )) + 1] 3. Zakodować parę (Runlength, Size) według tabeli kodu Huffmana (tabela 2). Pokazano fragment tabeli zawierający najbardziej prawdopodobne układy (Runlength, Size).Pełna tablica ma 162 wiersze. 4. Zakodować Amplitude (używając wielkości Size obliczonej wkroku2),posługując się tabelą 3. Tabela 3. Size wartość AC i kod Amplitude 0 0 --- 1-1, 1 0, 1 2-3, -2, 2, 3 00, 01, 10, 11 3 -,,-4, 4,, 000,, 011, 100,,111 4-15,,-8, 8,,15 0000,, 0111, 1000,, 1111 11-204,,-1024,1024,,204 000 0000 0000,,111 1111 1111 Kodowanie współczynników AC - algorytm Kodowanie współczynników AC - przykład Tabela 2. (Runlength, Size) Typowy kod Huffmana (Runlength, Size) Typowy kod Huffmana (0,1) 00 (0,6) 1111000 (0,2) 01 (1,3) 1111001 (0,3) 100 (5,1) 1111010 EOB 1010 (6,1) 1111011 (0,4) 1011 (0,) 11111000 (1,1) 1100 (2,2) 11111001 (0,5) 11010 (,1) 11111010 (1,2) 11011 (1,4) 111110110 (2,1) 11100 (3,1) 111010 ZRL 11111111001 (4,1) 111011 EOB same zera do końca bloku ZRL ciąg 16 zer (15 zer i AC i = 0) Przykład: Zakodować zaznaczony fragment wektora współczynników AC dla bloku obrazu [ AC 1,..., AC 63 ] = [ 1, 0, 0, -2, -3, ] Kodowanie jest więc ciąg, 0, 0, -2, (dwa zera i liczba -2) dla AC i = 2 wartość Size wynosi 2, z tabeli 2 dla pary (Runlength, Size) = (2, 2) odczytuje się kod 11111001, z tabeli 3 dla Size = 2 i AC i = -2 odczytuje się kod 01, Ostatecznie ciągowi, 0, 0, -2, odpowiada kod binarny 11111001 01
Koder JPEG (uproszczony) Obraz testowy 256 x 256 x 8 = 524.288 bitów = 64kB Bloki 8x8 danych źródłowych DCT Kwantyzator Koder bitowy Dane skompresowane Tablice kwantyzacji Tablice kodu Huffmana Obraz w formacie BMP (66.616 B) Dekoder JPEG (uproszczony) Kompresja JPEG - porównanie obrazów po kompresji Dane skompresowane Dekoder bitowy Dekwantyzator DCT -1 Bloki 8x8 danych odtworzonych Tablice kodu Huffmana Tablice kwantyzacji Duża kompresja (24.295 B) Średnia kompresja (31.526 B) Mała kompresja (56.956 B) 8
Kompresja JPEG - porównanie szczegółów Obraz oryginalny (66.616 B) Duża kompresja (24.295 B) 9