Algorytmy Kompresji Stratnej

Metody osiągające wysoką kompresję poprzez odrzucanie mniej ważnych informacji: kodowanie transformatowe (DCT), predykcyjne i fraktalne.

Filozofia Niedoskonałości: Potęga Kompresji Stratnej

Podczas gdy kompresja bezstratna jest pomnikiem idealnej wierności danych, jej siostrzana technika, , promuje inną filozofię: pragmatyzm. Algorytmy bezstratne traktują każdy bit danych jako świętość, zapewniając idealne odtworzenie kosztem umiarkowanych współczynników kompresji. Kompresja stratna, w przeciwieństwie, przyjmuje odważne założenie: nie wszystkie dane są sobie równe. Zakłada, że dla pewnych typów informacji, zwłaszcza multimediów przeznaczonych do konsumpcji przez człowieka, możemy odrzucić ogromne ilości danych z niewielkim lub żadnym zauważalnym wpływem na jakość.

To celowe poświęcenie idealnej dokładności umożliwia nowoczesny cyfrowy świat. To magia stojąca za strumieniowaniem filmu 4K przez połączenie internetowe, przechowywaniem tysięcy wysokiej jakości zdjęć na telefonie i uczestnictwem w wideokonferencji w czasie rzeczywistym z kimś po drugiej stronie globu. Algorytmy stratne nie są prymitywnymi narzędziami, które losowo usuwają dane; są to niezwykle zaawansowane systemy, zbudowane na głębokim zrozumieniu ludzkiej percepcji. Skrupulatnie analizują dane, aby określić, czego nasze oczy nie widzą, a czego nasze uszy nie słyszą, a następnie precyzyjnie odrzucają właśnie te informacje. W tej sekcji zbadamy trzy główne rodziny technik kompresji stratnej: kodowanie transformatowe, silnik JPEG i MPEG; kodowanie predykcyjne, które zgaduje przyszłość, by oszczędzać miejsce; oraz kompresję fraktalną, unikalne podejście znajdujące samopodobieństwo w danych.

Kodowanie Transformatowe: Postrzeganie Danych w Nowym Świetle

Kodowanie transformatowe jest prawdopodobnie najważniejszą i najbardziej udaną techniką kompresji stratnej, jaką kiedykolwiek opracowano. Stanowi trzon praktycznie wszystkich nowoczesnych standardów kompresji obrazu, wideo i audio, w tym JPEG, MPEG i MP3.

Podstawowa Idea: Zmiana Domeny

Fundamentalna koncepcja kodowania transformatowego polega na tym, że reprezentowanie danych w postaci surowych wartości (np. jasności pikseli, amplitudy próbki audio) jest często nieefektywne. Zamiast tego często bardziej użyteczne jest reprezentowanie danych w innej dziedzinie matematycznej, takiej jak dziedzina częstotliwości.

Transformata to operacja matematyczna, która konwertuje zbiór danych z jednej reprezentacji na inną bez utraty informacji w samym procesie. Celem jest osiągnięcie nowej reprezentacji, w której informacja jest ustrukturyzowana w sposób znacznie łatwiejszy do skompresowania. Konkretnie, kodowanie transformatowe dąży do dwóch celów:

  • Dekorelacja: W większości rzeczywistych danych, takich jak obrazy, sąsiednie piksele są silnie skorelowane; czerwony piksel prawdopodobnie będzie obok innego czerwonego piksela. Transformata ma na celu usunięcie tych zależności, tak aby nowe wartości (współczynniki) były bardziej niezależne od siebie.
  • Kompakcja Energii: To jest klucz do sukcesu. Dobra transformata skoncentruje większość ważnych informacji lub "energii" sygnału w zaledwie kilku wartościach, zwanych współczynnikami. Pozostała większość współczynników będzie miała bardzo małe, często bliskie zera wartości, reprezentujące mniej istotne szczegóły.

Główny Gracz: Dyskretna Transformata Kosinusowa (DCT)

Najpopularniejszą transformatą używaną w kompresji stratnej jest . W praktyce algorytmy takie jak JPEG i MPEG stosują DCT nie na całym obrazie naraz, ale na małych, łatwych do zarządzania blokach pikseli, zazwyczaj o rozmiarze 8x8.

DCT 2D pobiera blok wartości pikseli 8x8 (reprezentacja w dziedzinie przestrzennej) i przekształca go w blok współczynników częstotliwości 8x8 (reprezentacja w dziedzinie częstotliwości).

  • Lewy górny współczynnik, Współczynnik DC, reprezentuje średnią jasność lub kolor całego bloku 8x8. Zawiera najwięcej energii.
  • Pozostałe 63 współczynniki to Współczynniki AC. Reprezentują one szczegóły i tekstury w bloku, ułożone od najniższych częstotliwości (grube szczegóły) w pobliżu współczynnika DC do najwyższych częstotliwości (drobne, ostre szczegóły) w prawym dolnym rogu.

Eksplorator DCT 8x8

Zwiększaj liczbę współczynników, aby zobaczyć jak blok po rekonstrukcji zbliża się do oryginału.

Energia zachowana
98.0%
Średni błąd
61.77
PSNR
30.2 dB
Blok oryginalny
52
55
61
66
70
61
64
73
63
59
66
90
109
85
69
72
62
59
68
113
144
104
66
73
63
58
71
122
154
106
70
69
67
61
68
104
126
88
68
70
79
65
60
70
77
68
58
75
85
71
64
59
55
61
65
83
87
79
69
68
65
76
78
94
Współczynniki DCT
-414
-29
6
-46
-21
-62
25
-62
8
-49
11
12
77
8
55
-20
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
Blok odtworzony
61
51
50
71
86
71
57
65
60
56
62
88
104
86
67
72
60
63
78
110
127
103
77
78
60
66
85
119
134
106
77
75
60
62
76
105
117
90
64
66
68
61
62
80
90
70
56
66
85
69
56
63
72
62
63
84
103
80
57
58
67
65
75
104

Kolejność zig-zag powoduje, że niskie częstotliwości są kopiowane najpierw. Wysokie składowe znikają przy niskich ustawieniach suwaka.

Interaktywny blok DCT pokazuje, ile informacji mozna uratowac z niskich czestotliwosci oraz jak wyglada odtworzony obraz po wyzerowaniu pozostalych wspolczynnikow.

Studium Przypadku: Proces Kompresji JPEG

Standard JPEG do kompresji zdjęć jest idealnym praktycznym przykładem procesu kodowania transformatowego.

  1. Krok 1: Transformacja Przestrzeni Barw i Podpróbkowanie Chrominancji: Obraz jest najpierw konwertowany z modelu kolorów RGB (Czerwony, Zielony, Niebieski) na YCbCr. Składowa Y reprezentuje luminancję (jasność), a Cb i Cr reprezentują chrominancję (różnice kolorów). Ponieważ ludzkie oko jest znacznie mniej wrażliwe na drobne szczegóły w kolorze niż w jasności, składowe Cb i Cr są często podpróbkowane, na przykład poprzez zapisanie tylko jednej wartości koloru na każdy blok pikseli 2x2. Jest to pierwszy, wysoce skuteczny krok stratny.
  2. Krok 2: Podział na Bloki i DCT: Każda składowa (Y, Cb, Cr) jest dzielona na bloki 8x8 pikseli. Następnie DCT jest stosowana do każdego bloku indywidualnie, przekształcając 64 wartości pikseli w 64 współczynniki DCT.
  3. Krok 3: Kwantyzacja – Serce Procesu: Tutaj dzieje się magia i faktycznie zachodzi "strata". Każdy z 64 współczynników DCT jest dzielony przez odpowiednią wartość z 64-elementowej tabeli kwantyzacji, a wynik jest zaokrąglany do najbliższej liczby całkowitej.
    Wspoˊłczynnik Skwantyzowany=Wspoˊłczynnik DCTWartosˊcˊ Kwantyzacji+0.5\text{Współczynnik Skwantyzowany} = \lfloor \frac{\text{Współczynnik DCT}}{\text{Wartość Kwantyzacji}} + 0.5 \rfloor
    Wartości w tabeli kwantyzacji są małe dla ważnych współczynników niskoczęstotliwościowych (zachowując je) i znacznie większe dla mniej ważnych współczynników wysokoczęstotliwościowych (agresywnie je redukując). Ten kluczowy krok zamienia wiele małych współczynników AC w zera i zmniejsza precyzję pozostałych, trwale odrzucając informacje. Ustawienie "jakości" w edytorze obrazów (np. od 1 do 100) bezpośrednio kontroluje wartości w tej tabeli. Niższe ustawienie jakości używa większych dzielników, co skutkuje większą utratą danych i mniejszym plikiem.
  4. Krok 4: Kodowanie Entropijne: Blok 64 skwantyzowanych współczynników jest teraz wysoce kompresowalny, ponieważ zawiera wiele zer. Ten blok jest następnie kompresowany w etapie bezstratnym, zazwyczaj łącząc Kodowanie Długości Serii do obsługi długich ciągów zer i kodowanie Huffmana do przypisania krótkich kodów do najczęstszych pozostałych wartości współczynników.

Dekoder po prostu odwraca ten proces: odczytuje dane skompresowane bezstratnie, wykonuje dekwantyzację (mnożenie przez te same wartości z tabeli, chociaż oryginalna precyzja jest utracona), stosuje odwrotną transformatę DCT, aby odzyskać blok pikseli, i składa obraz z powrotem w całość.

Kodowanie Predykcyjne: Zgadywanie Następnego Piksela

Kodowanie predykcyjne to kolejna potężna technika stratna, szczególnie skuteczna dla danych, w których kolejne wartości są silnie skorelowane, na przykład w falach dźwiękowych.

Podstawowa Idea: Przesyłanie Tylko Różnicy

Zamiast kodować pełną wartość każdej próbki w sygnale audio, koder predykcyjny dokonuje świadomego przypuszczenia co do wartości następnej próbki, opierając się na próbkach poprzednich. Następnie oblicza różnicę, czyli błąd predykcji, między swoim przypuszczeniem a wartością rzeczywistą. Ten błąd jest zwykle bardzo małą liczbą. Sprytna część polega na tym, że koder przesyła tylko tę małą wartość błędu.

Proces staje się stratny, gdy błąd predykcji jest kwantyzowany przed transmisją. Używając ograniczonej liczby bitów do reprezentacji błędu, jego precyzja jest zmniejszana. Na przykład bardzo małe błędy mogą zostać zaokrąglone do zera, co w efekcie stwierdza, że predykcja była "wystarczająco dobra". Dekoder śledzi ten sam proces predykcji, odbiera skwantyzowany błąd i dodaje go do własnej predykcji, aby zrekonstruować przybliżenie oryginalnej próbki.

Eksplorator kodowania predykcyjnego (DPCM)

Ustaw krok kwantyzatora i wybierz predyktor, aby zobaczyć jak pętla śledzi wolno zmieniający się sygnał.

Szac. bity/próbka
7 bps
Maks błąd
2.0
Końcowy dryft
-1.0
nOryginałPredyktorBłądKwantyzacjaOdtworzenie
01280128128128
113012824132
213513234136
314013644140
414214024144
514714434148
6146148-20148
715014824152
815415224156
915815624160
1016016000160
1116116010160
Oryginał: 161
Odtworzony: 160

W DPCM enkoder i dekoder mają ten sam predyktor. Do sieci trafia tylko błąd po kwantyzacji.

Zmien krok kwantyzatora i predyktor, aby zobaczyc jak zmienia sie blad oraz odtwarzany sygnal w petli DPCM.

Ta technika, znana jako Różnicowa Modulacja Impulsowo-Kodowa (DPCM), jest niezwykle powszechna w kodekach mowy i kompresji audio. Jest skuteczna, ponieważ sąsiednie próbki audio są prawie zawsze bardzo podobne pod względem wartości, co sprawia, że błąd predykcji jest mały i wysoce kompresowalny.

Kompresja Fraktalna: Poszukiwanie Samopodobieństwa

Kompresja fraktalna to fascynujące i matematycznie piękne, choć mniej powszechne, podejście do stratnej kompresji obrazu. Opiera się na matematycznej teorii fraktali.

Podstawowa Idea: Opisywanie Obrazu za Pomocą Samego Siebie

Algorytm kompresji fraktalnej analizuje obraz, aby znaleźć części, które wyglądają jak pomniejszone, przekształcone wersje innych, większych części tego samego obrazu. Na przykład mała chmura może wyglądać jak pomniejszona wersja większej chmury gdzie indziej na niebie. Mały fragment paproci może przypominać ogólną strukturę całego liścia.

Proces kodowania nie przechowuje danych o pikselach. Zamiast tego tworzy listę przekształceń matematycznych. Dla każdego małego regionu obrazu (bloku docelowego), algorytm znajduje większy region (blok źródłowy) i zestaw instrukcji (transformację afiniczną obejmującą skalowanie, obrót oraz dopasowanie jasności/kontrastu), która sprawia, że blok źródłowy wygląda jak blok docelowy. Skompresowany plik to po prostu ten zbiór "instrukcji kopiowania".

Dekodowanie to proces iteracyjny. Zaczyna się od dowolnego obrazu początkowego (np. pustego szarego ekranu) i wielokrotnie stosuje zapisaną listę przekształceń. Twierdzenie o gwarantuje, że po kilku iteracjach proces ten zbiegnie się do stabilnego obrazu – zrekonstruowanego oryginału (lub jego bliskiego przybliżenia).

Mocne i Słabe Strony

Kompresja fraktalna ma pewne unikalne właściwości:

  • Bardzo Wysokie Współczynniki Kompresji: Możliwe jest osiągnięcie bardzo dużej redukcji rozmiaru, zwłaszcza w przypadku naturalnych, teksturalnych obrazów.
  • Niezależność od Rozdzielczości: Kluczowa zaleta. Ponieważ plik przechowuje zasady, a nie piksele, obraz można dekodować w dowolnej rozdzielczości, często generując wiarygodnie wyglądające szczegóły przy powiększeniu, unikając blokowości powiększonego JPEG-a.
  • Niezwykle Wolne Kodowanie: Proces wyszukiwania najlepiej pasujących bloków jest niezwykle wymagający obliczeniowo, co sprawia, że kodowanie jest niesamowicie powolne.

Ze względu na bardzo długi czas kodowania i historyczne kwestie patentowe, kompresja fraktalna pozostała technologią niszową i nie zdobyła tak dużej popularności jak metody oparte na transformatach, takie jak JPEG.

Wnioski: Synergia Technik

Kodowanie transformatowe, predykcyjne i fraktalne reprezentują główne filozoficzne podejścia do stratnej redukcji danych. Nowoczesne systemy często łączą te idee. Najbardziej zaawansowane kodeki wideo są na przykład hybrydami. Używają kodowania transformatowego (DCT) do kompresji informacji przestrzennych wewnątrz klatki, ale stosują również wysoce zaawansowaną formę kodowania predykcyjnego zwaną kompensacją ruchu, aby wykorzystać czasowe podobieństwa między klatkami. To właśnie ta potężna synergia technik pozwala na niesamowitą wydajność kompresji, którą widzimy dzisiaj, umożliwiając przechowywanie i strumieniowanie wysokiej jakości multimediów przy użyciu ułamka danych, które byłyby w innym przypadku wymagane. Wybór i dostrojenie tych algorytmów zawsze wiąże się z delikatną równowagą, wymieniając bity na poziom jakości, który ostatecznie jest oceniany nie przez komputer, ale przez nasze własne oczy i uszy.

    Algorytmy Kompresji Stratnej | Teleinf Edu