Kompresja Obrazów
Przyjrzenie się popularnym formatom obrazów i ich technikom kompresji: JPEG i GIF.
Wprowadzenie do Kompresji Obrazów
W naszym cyfrowym świecie obrazy są wszędzie. Od rodzinnych zdjęć przechowywanych w naszych telefonach po grafikę tworzącą strony internetowe, obrazy cyfrowe są fundamentalną częścią tego, jak komunikujemy się i przechowujemy wspomnienia. Jednak surowe, nieskompresowane obrazy są niewiarygodnie duże. Pojedyncza fotografia o wysokiej rozdzielczości może zajmować dziesiątki megabajtów przestrzeni. Przechowywanie tysięcy takich zdjęć szybko zapełniłoby każdy dysk twardy, a wysłanie tylko jednego z nich przez wolne łącze internetowe mogłoby zająć kilka minut.
W tym miejscu z pomocą przychodzi kompresja obrazów. to sztuka i nauka zmniejszania plików graficznych, co pozwala nam przechowywać więcej obrazów i szybciej je udostępniać. Podstawową ideą wszelkiej kompresji jest identyfikacja i redukcja w danych obrazu. Mogą to być powtarzające się wzory, duże obszary tego samego koloru lub szczegóły, których ludzkie oko prawdopodobnie nie zauważy. Techniki stosowane do osiągnięcia tego celu dzielą się na dwie podstawowe kategorie: kompresję bezstratną i stratną.
Fundamentalny Podział: Kompresja Bezstratna a Stratna
Wybór między kompresją bezstratną a stratną jest najważniejszą decyzją w obróbce obrazów cyfrowych, ponieważ definiuje kompromis między rozmiarem pliku a doskonałą wiernością oryginałowi. Każde podejście służy innemu celowi i jest odpowiednie dla różnych typów obrazów.
Kompresja Bezstratna: Perfekcyjna Rekonstrukcja
jest jak idealne pakowanie próżniowe dla danych. Wyciska całą niepotrzebną przestrzeń bez zmiany zawartości. Kiedy dekompresujesz plik skompresowany bezstratnie, otrzymujesz z powrotem dokładnie te same, identyczne dane, od których zacząłeś, bit po bicie. Żadna informacja nigdy nie jest tracona.
Osiąga się to poprzez znajdowanie statystycznej redundancji w danych. Na przykład, zamiast przechowywać "niebieski, niebieski, niebieski, niebieski, niebieski", algorytm bezstratny może zapisać "(niebieski, 5 razy)". Inna technika polega na tworzeniu słownika wspólnych wzorców i zastępowaniu ich krótszymi kodami. Rozważmy fragment wiersza:
Jakżeż ja się uspokoję –
Pełne strachu oczy moje,
Pełne grozy myśli moje,
Algorytm bezstratny mógłby zauważyć powtarzające się frazy "Pełne" oraz "moje" i zastąpić ich kolejne wystąpienia krótkim wskaźnikiem mówiącym "odwołaj się do wcześniej użytego słowa". Oszczędza to miejsce bez zmiany znaczenia. Stopień kompresji w dużej mierze zależy od samych danych; dane wysoce powtarzalne kompresują się dobrze, podczas gdy dane losowe kompresują się słabo.
Kiedy używać: Kompresja bezstratna jest niezbędna, gdy każdy pojedynczy bit danych jest krytyczny i nie może być zmieniony. Zastosowania obejmują pliki tekstowe, programy komputerowe, obrazy medyczne (jak skany MRI) oraz diagramy techniczne, gdzie precyzja jest najważniejsza. Popularne bezstratne formaty obrazów to PNG i GIF.
Kompresja Stratna: Inteligentna Aproksymacja
stosuje bardziej agresywne podejście. Osiąga znacznie mniejsze rozmiary plików, trwale wyrzucając dane. Kluczem jest to, że stara się odrzucić informacje, których nasze zmysły najprawdopodobniej nie zauważą.
Metoda ta opiera się na : naukowym zrozumieniu, jak ludzkie oko i mózg postrzegają świat. Na przykład, jesteśmy znacznie bardziej wrażliwi na zmiany jasności niż na subtelne zmiany koloru. Algorytm stratny może to wykorzystać, przechowując informacje o jasności z dużą precyzją, a informacje o kolorze w sposób bardziej zgrubny. Wynikiem jest plik, który nie jest idealną kopią, ale ma nadzieję być "percepcyjnie bezstratny", co oznacza, że wygląda tak samo dla ludzkiego obserwatora. Stopień kompresji można regulować za pomocą ustawienia "jakości", co pozwala na kompromis między rozmiarem pliku a wiernością wizualną.
Kiedy używać: Kompresja stratna jest idealna dla obrazów fotograficznych, wideo i audio, gdzie idealna dokładność bit po bicie nie jest wymagana, a niewielka utrata jakości jest akceptowalną ceną za ogromne zmniejszenie rozmiaru pliku. Najsłynniejszym stratnym formatem obrazu jest JPEG.
Format GIF: Potęga Palety Kolorów
GIF, czyli Graphics Interchange Format, to jeden z najstarszych i najtrwalszych formatów graficznych w internecie. Jego długowieczność wynika z prostoty i unikalnych cech, przede wszystkim wsparcia dla animacji. Kompresja GIF to dwuetapowy proces, który sprytnie łączy techniki stratne i bezstratne.
Krok 1: Indeksowana Paleta Kolorów (Część Stratna)
Cechą definiującą plik GIF jest użycie indeksowanej palety kolorów. Zamiast przechowywać pełną wartość koloru (zazwyczaj 24 bity, reprezentujące ponad 16 milionów kolorów) dla każdego piksela, plik GIF najpierw tworzy małą, niestandardową tablicę kolorów zwaną paletą. Paleta ta może zawierać maksymalnie 256 kolorów.
To tutaj zachodzi początkowa i najważniejsza kompresja (i utrata danych). Jeśli oryginalny obraz zawiera tysiące lub miliony kolorów (jak fotografia), koder GIF musi przeprowadzić . Analizuje on oryginalny obraz i wybiera "najlepsze" 256 kolorów do jego reprezentacji. Wszystkie inne kolory w oryginalnym obrazie są następnie mapowane do ich najbliższego odpowiednika w nowej, ograniczonej palecie. Ten krok jest z natury stratny, ponieważ tracone są subtelne gradienty i odcienie. Jednak dla obrazów, które już mają niewiele kolorów, jak logo czy diagramy, ten krok może być praktycznie bezstratny.
Po ustaleniu palety, każdy piksel w obrazie nie jest już reprezentowany przez pełną wartość koloru, ale przez prostą 8-bitową liczbę (), która służy jako indeks do jego koloru w palecie.
Krok 2: Kompresja LZW (Część Bezstratna)
Po przekonwertowaniu obrazu na strumień indeksów kolorów, stosowany jest prawdziwy algorytm kompresji bezstratnej. GIF używa algorytmu Lempel-Ziv-Welch (LZW). LZW to metoda kompresji oparta na słowniku. Skanuje ona strumień indeksów pikseli i buduje słownik powtarzających się sekwencji. Kiedy napotyka sekwencję, którą już widział, zamiast całej sekwencji, wyprowadza krótki kod wskazujący na wpis tej sekwencji w słowniku. Jest to bardzo skuteczne w przypadku obrazów z dużymi obszarami jednolitego koloru, ponieważ może reprezentować długi ciąg identycznych indeksów za pomocą zaledwie kilku kodów.
Cechy Specjalne i Zastosowania
- Animacja: Najsłynniejsza cecha GIF-a to zdolność do przechowywania wielu klatek w jednym pliku, wraz z informacjami o czasie, tworząc proste, zapętlone animacje, które są wszechobecne w internecie.
- Przezroczystość: GIF obsługuje prostą, binarną przezroczystość. Jeden kolor w palecie można oznaczyć jako przezroczysty, co pozwala na prześwitywanie tła strony internetowej. Nie obsługuje częściowej przezroczystości (kanałów alfa).
- Przeplot: GIF z przeplotem ładuje się w kilku przebiegach. Niskiej jakości wersja pojawia się szybko i stopniowo staje się ostrzejsza w miarę pobierania kolejnych danych, co poprawia odczuwalną szybkość ładowania.
Eksplorator palety GIF
Zmniejszaj liczbę dostępnych kolorów, aby zobaczyć pojawiające się pasma i posteryzacje w scenie testowej.
Piksele są kwantyzowane z użyciem 4x4 macierzy Bayera, podobnie jak w enkoderze GIF.
Dla dużych palet pokazujemy tylko pierwsze 24 odcienie.
Format JPEG: Mistrzostwo Percepcji dla Fotografii
JPEG (nazwa pochodzi od jego twórcy, Joint Photographic Experts Group) jest najpopularniejszym na świecie formatem kompresji stratnej i nie bez powodu. Został specjalnie zaprojektowany do kompresji obrazów o ciągłych tonach, takich jak fotografie, gdzie subtelne zmiany koloru i jasności są powszechne. Algorytm JPEG to mistrzowskie zastosowanie zasad psychowizualnych w celu osiągnięcia bardzo wysokich współczynników kompresji przy zachowaniu doskonałej jakości wizualnej.
Proces kompresji JPEG można rozumieć jako wieloetapowy potok:
- Transformacja Przestrzeni Kolorów:
Obraz jest zazwyczaj konwertowany z przestrzeni kolorów RGB (Czerwony, Zielony, Niebieski) do przestrzeni luminancji/chrominancji zwanej YCbCr. Powoduje to rozdzielenie informacji o jasności (Y, czyli Luma) od informacji o kolorze (Cb i Cr, czyli Chroma). Robi się to, ponieważ ludzkie oko jest znacznie bardziej wrażliwe na drobne szczegóły w jasności niż na drobne szczegóły w kolorze.
- Podpróbkowanie Chrominancji (Downsampling):
Wykorzystując tę cechę ludzkiego wzroku, składowe koloru (chrominancja) są podpróbkowywane. Oznacza to, że ich rozdzielczość jest zmniejszana, co w praktyce sprowadza się do przechowywania informacji o kolorze dla bloków pikseli, a nie dla każdego pojedynczego piksela. Powszechnym schematem jest , gdzie blok pikseli dzieli tę samą wartość Cb i Cr, podczas gdy każdy z nich zachowuje swoją indywidualną wartość Y. Ten krok sam w sobie może znacznie zmniejszyć rozmiar pliku przy niewielkim lub zerowym widocznym wpływie.
- Dyskretna Transformata Kosinusowa (DCT):
Obraz jest dzielony na małe bloki pikseli . Każdy blok jest następnie przetwarzany przez . DCT nie zmienia samych wartości pikseli, ale reprezentuje je w inny sposób, jako kombinację 64 współczynników częstotliwości. Pierwszy współczynnik, współczynnik DC, reprezentuje średnią jasność/kolor bloku. Pozostałe 63 współczynniki AC reprezentują szczegóły i tekstury w bloku, od łagodnych gradientów po ostre krawędzie.
- Kwantyzacja:
To główny stratny krok i serce kompresji JPEG. Każdy z 64 współczynników DCT jest dzielony przez odpowiednią wartość z 64-elementowej , a wynik jest zaokrąglany do najbliższej liczby całkowitej. Wartości w tej tablicy są starannie dobrane: małe liczby są używane dla ważnych współczynników niskoczęstotliwościowych (jak średni kolor), zachowując je z dużą precyzją. Znacznie większe liczby są używane dla współczynników wysokoczęstotliwościowych, reprezentujących drobne szczegóły. To agresywne dzielenie i zaokrąglanie powoduje, że większość współczynników wysokoczęstotliwościowych staje się zerami, co skutecznie odrzuca informacje o najdrobniejszych szczegółach, których oko najprawdopodobniej nie zauważy. Ustawienie "jakości" pliku JPEG bezpośrednio modyfikuje wartości w tej tablicy.
- Kodowanie Entropijne (Bezstratne):
W ostatnim etapie, wynikowe skwantyzowane współczynniki są kompresowane za pomocą algorytmu bezstratnego. Współczynniki są najpierw odczytywane w porządku zygzakowatym, aby zgrupować wiele współczynników o wartości zero razem. Ten długi ciąg zer jest następnie efektywnie kompresowany przy użyciu (RLE). Na koniec cały strumień symboli jest kompresowany za pomocą kodowania Huffmana, aby uzyskać ostateczny, mały plik JPEG.
Eksplorator jakości JPEG
Przesuwaj suwak, aby zobaczyć jak mocna kwantyzacja zmniejsza plik i wprowadza znane artefakty.
Symulacja zmniejsza rozdzielczość sceny, podkreśla granice bloków 8x8 i dodaje lekkie dzwonienie jak w JPEG.
Krzywa przedstawia szacowany współczynnik kompresji dla typowego zdjęcia 12 MP zapisanego jako JPEG.