Kompresja

Kompresja Obrazów WebP

Nowoczesny format obrazów zoptymalizowany pod kątem sieci z kompresją stratną i bezstratną.

Dlaczego powstał format WebP

Przez wiele lat w sieci używano głównie trzech formatów graficznych: JPEG do fotografii, PNG do grafik z przezroczystością oraz GIF do prostych animacji. Stratna kompresja JPEG dobrze sprawdza się w zdjęciach, lecz może powodować artefakty przy ostrych krawędziach. PNG zachowuje piksele bezstratnie i obsługuje przezroczystość, lecz zdjęcia zapisane w tym formacie mogą zajmować dużo miejsca. GIF używa palety liczącej najwyżej 256 kolorów dla jednej klatki i ma przezroczystość jednobitową.

Wraz ze wzrostem znaczenia szybkości pobierania obrazów potrzebny był format łączący kompresję stratną i bezstratną, przezroczystość oraz animację. Obraz często jest jednym z większych zasobów strony, więc jego format wpływa na transfer i czas renderowania. W 2010 roku Google wprowadziło , zaprojektowany do dostarczania obrazów w sieci.

WebP jako kontener dla kilku trybów kompresji

WebP jest formatem kontenera opartym na i obsługuje kilka sposobów kompresji obrazu. Kontener może zawierać obraz stratny VP8, obraz bezstratny VP8L albo rozszerzony nagłówek VP8X wraz z fragmentami opisującymi dane alfa, animację i metadane. Nagłówki fragmentów określają ich typ i rozmiar, dzięki czemu dekoder może odczytać właściwą część pliku. Klatki animacji mogą korzystać z trybu stratnego lub bezstratnego. Rozszerzony nagłówek VP8X przechowuje flagi funkcji oraz wymiary płótna, natomiast fragmenty EXIF, XMP i ICCP mogą przenosić metadane. W animacji dekoder składa klatki na wspólnym płótnie, uwzględniając ich położenie, czas i sposób aktualizacji obrazu.

Pojedynczy plik .webp.webp może być jednym z następujących:

  • Obraz stratny: Ten tryb konkuruje z JPEG. Przy porównywalnej jakości SSIM obrazy WebP stratne były w badaniu Google o 25-34% mniejsze od JPEG. Zakres dotyczy porównania jakości i rozmiaru, a wynik konkretnego obrazu zależy od treści oraz ustawień. Tryb wykorzystuje kompresję predykcyjną opartą na VP8.
  • Obraz bezstratny: Ten tryb konkuruje z PNG. W badaniu Google obrazy WebP bezstratne były średnio o 26% mniejsze od PNG, przy zachowaniu dokładnych wartości pikseli. Wynik zależy od rodzaju grafiki, kolorów i ustawień kodera. Tryb wykorzystuje osobny zestaw technik kompresji.
  • Obraz z przezroczystością: WebP obsługuje 8-bitowy kanał alfa, czyli 256 poziomów przezroczystości. Kanał alfa opisuje stopień krycia każdego piksela. Może łączyć stratnie skompresowane kanały RGB z bezstratnym kanałem alfa. Połączenie stratnego RGB z bezstratnym kanałem alfa pozwala zachować dokładną maskę przezroczystości przy mniejszym rozmiarze części kolorowej.
  • Obraz animowany: WebP obsługuje animacje. Plik może zawierać wiele klatek w trybie stratnym i bezstratnym, 24-bitowy kolor oraz 8-bitową przezroczystość. Kontener może przechowywać pełną klatkę albo prostokątny obszar zmieniony względem poprzedniej klatki. Każda klatka ma własne położenie, rozmiar i czas wyświetlania.

Analiza 1: kompresja stratna WebP

Stratna kompresja WebP wywodzi się z kompresji wewnątrzklatkowej kodeka VP8, używanego także w WebM. Obraz jest dzielony na bloki, a koder przewiduje zawartość bloku na podstawie sąsiednich pikseli. Do strumienia trafia przede wszystkim różnica między blokiem oryginalnym i przewidywanym. Predykcja ogranicza powtarzalność danych, które pozostają po odjęciu przewidywanego obrazu.

Predykcja blokowa

Koder dzieli obraz na makrobloki, zazwyczaj 16×1616 \times 16 pikseli. Dla każdego bloku używa wartości z wcześniej zakodowanych bloków powyżej i po lewej stronie. VP8 definiuje własny zestaw trybów predykcji dla makrobloku i jego części. Koder porównuje tryby i wybiera ten, który daje najmniejszy błąd, łatwiejszy do dalszej kompresji.

Dla części obrazu związanej z jasnością (lumą), makroblok jest dalej dzielony na mniejsze podbloki 4×44 \times 4. Dla każdego z tych małych bloków koder może wybrać jeden z kilku trybów predykcji:

  • Predykcja pionowa: Wypełnia blok, kopiując w dół rząd pikseli znajdujący się bezpośrednio nad nim. Działa dobrze dla krawędzi i wzorów pionowych.
  • Predykcja pozioma: Wypełnia blok, kopiując w poprzek kolumnę pikseli znajdującą się bezpośrednio po jego lewej stronie. Skuteczne dla krawędzi poziomych.
  • Predykcja DC: Oblicza średnią wartość pikseli z rzędu powyżej i kolumny po lewej stronie, i wypełnia cały blok tym jednym średnim kolorem. Używane dla płaskich, jednolitych obszarów.
  • Tryb TrueMotion: Bardziej złożony tryb, który używa dwuwymiarowego gradientu opartego na górnych i lewych sąsiadach do wypełnienia bloku, odpowiedni dla płynnych przejść.
  • Dostępnych jest również kilka dodatkowych trybów kątowych do przewidywania wzorów diagonalnych.

Po predykcji koder oblicza blok rezydualny, czyli różnice między pikselami bloku oryginalnego i przewidywanego. Trafna predykcja sprawia, że wiele wartości rezydualnych jest bliskich zeru.

Transformacja, kwantyzacja i kodowanie

Blok rezydualny jest następnie przetwarzany w sposób podobny do JPEG. Transformacja grupuje informację o zmianach, kwantyzacja ustala poziom utraty szczegółów, a kodowanie entropijne zapisuje wynik w strumieniu VP8. Współczynniki o niskiej częstotliwości opisują wolne zmiany jasności, natomiast współczynniki o wysokiej częstotliwości odpowiadają drobnym krawędziom i teksturom:

  1. Transformacja: Blok rezydualny jest poddawany , która przekształca próbki we współczynniki częstotliwości.
  2. Kwantyzacja: To krok stratny. Współczynniki są dzielone przez wartości kwantyzacji i zaokrąglane. Szczegóły o wysokiej częstotliwości mogą zostać zaokrąglone do zera.
  3. Kodowanie entropijne: Rzadki zbiór współczynników jest kodowany bezstratnie w końcowym strumieniu bloku zgodnie ze specyfikacją VP8. Kodowanie boolowskie wykorzystuje prawdopodobieństwa symboli podczas zapisu bitów.

Analiza 2: kompresja bezstratna WebP

Bezstratny tryb WebP korzysta z osobnego strumienia VP8L, niezależnego od stratnego VP8. Odtwarza dokładne wartości pikseli i wykorzystuje zestaw technik przeznaczonych do bezstratnej kompresji obrazów. Wartość koloru piksela pozostaje taka sama po dekodowaniu, także dla kanału alfa. Tryb ten nadaje się do ikon, zrzutów ekranu i grafik, w których zmiana pojedynczego piksela byłaby istotna.

Predykcja i transformacje

WebP Lossless stosuje predyktory do obliczania wartości rezydualnych. Specyfikacja przewiduje predykcję dla bloków obrazu oraz wybór transformacji zależny od danych. Może używać różnych predyktorów w różnych częściach obrazu, dopasowując transformację do lokalnej zawartości. Po transformacji wartości są zapisywane z użyciem kodowania prefiksowego, a dekoder odwraca kolejne kroki w odwrotnej kolejności.

Pamięć kolorów i dopasowywanie wzorców

WebP Lossless wykorzystuje kilka technik dopasowanych do różnych rodzajów powtarzalności:

  • Dopasowywanie wzorców (LZ77): Koder wyszukuje powtarzające się sekwencje pikseli i zastępuje je krótszymi odwołaniami wstecznymi. Odwołanie przechowuje położenie i długość powtórzenia.
  • Pamięć kolorów: Koder utrzymuje pamięć ostatnio używanych kolorów. Gdy kolor piksela znajduje się w pamięci, może zapisać krótki indeks zamiast pełnej wartości. Jest to przydatne w obrazach z ograniczoną, powtarzającą się paletą.
  • Transformacja przestrzeni kolorów: Koder może zastosować odwracalną transformację kanałów R, G i B, na przykład transformację odejmowania zielonego. Może także użyć transformacji predykcyjnej i indeksowania kolorów. Ujednolicenie danych kanałów ułatwia dalszą kompresję.

Koder WebP Lossless może dobierać te techniki do obrazu, a dane są organizowane w blokach, aby decyzje mogły zależeć od lokalnej zawartości. W badaniu Google uzyskano średnio mniejszy rozmiar niż dla PNG, przy zachowaniu bezstratnego odtworzenia pikseli. Nie oznacza to stałej redukcji dla każdego obrazu, ponieważ fotografia i grafika o ograniczonej palecie mają różne rozkłady danych oraz poziomy powtarzalności.

Przezroczystość i animacja w WebP

WebP łączy kompresję obrazu z obsługą przezroczystości i animacji, które w starszych formatach wymagały odrębnych ograniczeń.

Stratny kolor i bezstratna przezroczystość

WebP może przechowywać kanały kolorów RGB w stratnym strumieniu opartym na VP8, a w osobnym strumieniu bezstratnym. Kanał alfa może zawierać wartości od całkowitej przezroczystości do pełnego krycia. Pozwala to niezależnie dobrać sposób kodowania koloru i maski przezroczystości.

PNG było częstym wyborem dla obrazów wymagających przezroczystości. WebP może przechowywać kolor stratnie, a maskę przezroczystości bezstratnie, co pozwala zachować dokładną maskę przy mniejszym rozmiarze danych kolorowych. Rozwiązanie sprawdza się między innymi w zdjęciach produktów i logo z cieniami. W przypadku fotografii dobór jakości kanału RGB nadal wpływa na widoczne artefakty, dlatego kanał alfa nie usuwa ograniczeń kompresji stratnej koloru.

Animacje WebP

Animowany GIF był używany do prostych animacji, lecz ograniczał się do 256 kolorów i mniej wydajnej kompresji. Animowany WebP obsługuje większą głębię koloru, przezroczystość i oba tryby kompresji. Kontener przechowuje informacje potrzebne do kolejności klatek, ich czasu oraz sposobu aktualizacji obrazu. Możliwość przechowywania różnych typów klatek pozwala połączyć w jednej animacji klatki o różnym charakterze.

  • Pełny kolor: Animowany WebP obsługuje kolor 24-bitowy, czyli miliony kombinacji kolorów zamiast 256.
  • Przezroczystość: Animacja może używać 8-bitowego kanału alfa i częściowej przezroczystości.
  • Wydajna kompresja: Plik może zawierać klatki stratne i bezstratne. Dla klatki można zapisać cały obraz albo prostokątny obszar zmieniony względem poprzedniej klatki. Prostokątny obszar ogranicza dane, gdy zmienia się tylko fragment animacji. W porównaniu Google na badanym zbiorze animowane WebP stratne były o 64% mniejsze od GIF, a bezstratne o 19%.

Powiązane artykuły