• benchmark.pl
  • Foto
  • Algorytm Google Guetzli - redukuje rozmiar JPEG o 35% - a ile naprawdę jest wart?
Foto

Algorytm Google Guetzli - redukuje rozmiar JPEG o 35% - a ile naprawdę jest wart?

przeczytasz w 4 min.

Od czasu do czasu słyszymy o magicznych sposobach zmniejszania rozmiaru JPEGów. Czy są istotnie przydatne, czy to jedynie akademickie zabawy z kodem?

Wow! Algorytm, który zmniejsza rozmiar plików o 35% bez utraty jakości? Ten Google Guetzli to jest coś. Lecz czy na pewno coś niesamowitego? Tym razem zamiast hurraoptymistycznie opisywać same korzyści, nieco rzucimy sceptycznym okiem na zagadnienie optymalizacji rozmiaru plików JPEG.

Odpowiedź na powyższe pytania składa się z dwóch części. Po pierwsze, zmniejszenie obciążenia sieci, rozmiaru witryn internetowych, a jednocześnie zachowanie wysokiej jakości publikowanych treści zawsze było i jest w naszym interesie, jak i interesie właścicieli witryn internetowych. Z tej perspektywy algorytm Google Guetzli jak i inne alternatywne rozwiązania są bardzo wskazane i mile widziane.

A jeśli zysk na rozmiarze nie ma tak wielkiego znaczenia i jest inna cena oszczędności? Czy wtedy dojrzymy sugerowaną korzyść? A może istnieją już takie algorytmy i nie ma się czym emocjonować? Te pytania wiążą się z drugą częścią odpowiedzi na pytanie postawione na początku tekstu.

W teorii - algorytm Google Guetzli - plusy i minusy

Algorytm (pliki wykonywalne do pobrania na Githubie) opracowali Robet Obryk, Jurki Alakuijala i ich koledzy z Google Research Europe. Zastosowali oni formuły matematyczne, które w założeniu mają dać mniejszą liczbę artefaktów niż standardowa biblioteka libjpeg przy takim samym rozmiarze pliku.

Autorzy zoptymalizowali procedurę kwantyzacji (etap konwersji, na którym najwięcej zyskuje się na rozmiarze pliku) i wartości spółczynników transformaty DCT w każdym z bloków pikseli. W przypadku Guetzli osiągnięto zmniejszenie rozmiaru plików na poziomie 29-45% (mediana 35%).

Poniższe ilustracje pokazują korzyści jakie daje Guetzli (obrazki pośrodku).

JPEG porównanie
Po lewej mamy oryginał, po prawej obraz skompresowany tradycyjną techniką (libjpeg), a pośrodku wynik działania algorytmu Google.

Zdjęcie przeprocesowane Guetzli istotnie zawiera mniej artefaktów, przejścia pomiędzy kolorami są gładsze, lecz sprawia też wrażenie minimalnie mniej kontrastowego. Niemniej korzyść jest zauważalna przy analizie na poziomie pikseli.

Gdy obraz pomniejszymy tak, by piksele miały skalę odpowiadającą obrazom oglądanym na komputerze, ta różnica już nie jest tak istotna, a to sprawia, że jeszcze bardziej uwidacznia się największa wada algorytmu.

Czyli duże zapotrzebowanie na zasoby sprzętowe. Aż 300 MB pamięci musi być zaalokowane dla obrazka o wielkości 1 Mpix, a sama kompresja trwa znacząco dłużej niż w przypadku tradycyjnego algorytmu JPEG. Pliki JPEG generowane przez Guetzli są kompatybilne ze wszystkimi programami graficznymi oraz przeglądarkami i co najważniejsze samo oprogramowanie jest dostępne bez opłat.

Guetzli komunikat

Oznacza to, że by Guetzli stał się faktyczną konkurencją dla istniejących algorytmów optymalizacji rozmiaru plików (znacie choćby JPEGmini, który można wypróbować on-line), musi sam zostać zoptymalizowany pod względem obliczeniowym.

W praktyce - to działa...

Przykłady udostępnione przez programistów Google to jedno, warto sprawdzić działanie algorytmu na własnej skórze. No może nie dosłownie, ale poniżej przykładowe zdjęcia przetworzone z pomocą różnych algorytmów - zalecam pobranie plików przed porównaniem.

Najpierw obrazy zawierające tekst. Analiza pokazuje, że algorytm Guetzli faktycznie się sprawdza. Standardowa bibliotek JPEG radzi sobie znacznie słabiej. Algorytm Google wypada podobnie jak algorytm zapisu JPEGów stosowany w Photoshopie.

Jednak nie wszystkie różnice są tak istotne. Przy analizie pliku piksel w piksel zauważymy, że Guetzli inaczej traktuje kontrastowe krawędzie (co da się zauważyć też na oryginalnych przykładach). Lepiej radzi sobie przy kompresji drobnych szczegółów i monochromatycznych obiektów, w większej skali już nie jest tak wybitny.

Poniżej porównanie oryginalnego JPEGa z tekstem i kolorowymi blokami. Pliki kompresowane były tak, by uzyskać podobny rozmiar jak w Guetzli (w JPEGmini nie było takiej opcji).

Plik JPEG oryginalny
Plik JPEG 95%
Plik JPEG mini
Plik JPEG Adobe WWW 65
Plik JPEG Guetzil 85

Plik w rozmiarze 100%. Kolejno - oryginalny plik JPEG (91 kB) - JPEG 95% (44,4 kB) - JPEG Mini (70 kB) - JPEG Adobe WWW 65% (42 kB) - JPEG Google Guetzli 85% (41 kB)

Plik JPEG wycinki
Powiększenie wycinków. Kolejno - Oryginalny plik JPEG - JPEG 95% - JPEG Mini - JPEG Adobe WWW 65% - JPEG Google Guetzli 85%

A teraz przykładowe zdjęcia z aparatu. To kompletnie inny typ danych, z którym dużo łaskawiej obchodzą się nawet agresywne techniki zapisu JPEGów. Algorytm Google daje zauważalnie lepsze wyniki niż tradycyjna kompresja JPEG, jednak by je w pełni docenić trzeba poświęcić nieco uwagi zdjęciu. JPEGmini daje niewielkie pliki, ale z większą liczbą artefaktów niż algorytm Google Guetzli.

I jako model, dyżurny kot - wycinek oka i sierści na czole (należy oglądać w powiększeniu),

Sierść kot - porównanie
Kolejno oryginał (395,2 kB), dla zwykłego kompresora JPEG (85%, 102 kB), JPEGmini (narzucona z góry jakość zapisu, 69 kB), Adobe WWW JPEG (85%, 236 kB) i Google Guetzli JPEG (85%, 86 kB).

Oko kot - oryginal
Kadr, który był kompresowany

Oko kot - porównanie
Kolejno oryginał (1,2 MB), dla zwykłego kompresora JPEG (85%, 266 kB), JPEGmini (narzucona z góry jakość zapisu, 219 kB), Adobe WWW JPEG (85%, 662 kB) i Google Guetzli JPEG (85%, 227 kB).

oraz widziane z daleka wieżowce (zdjęcie przetworzone). Różnice są niewielkie, kluczowy jest tutaj rozmiar wynikowy. Każda z technik, poza Adobe WWW JPEG, w pewnym stopniu wygładziła obraz. Najwięcej artefaktów w postaci bloków pikseli dał JPEGmini, ale niewiele mniej niż Google Guetzli, który z kolei wygrał rozmiarem pliku. Wady kompresji widoczne są dopiero przy kilkukrotnym powiększeniu.

Wieżowiec porównanie
Kolejno oryginał (270 kB), dla zwykłego kompresora JPEG (85%, 72 kB), JPEGmini (narzucona z góry jakość zapisu, 76 kB), Adobe WWW JPEG (85%, 164 kB) i Google Guetzli JPEG (85%, 59 kB)

Wieżowiec porównanie zbliżenie
Powiększenie fragmentu kompresowanego zdjęcia

...lecz cena jest wysoka

W przypadku oryginalnych plików JPEG jak najwyższa jakość jest wskazana. Każda konwersja stratna (są też algorytmy bezstratne) wpływa negatywnie na jakość pliku JPEG nawet jeśli stosujemy bardzo zachowawcze ustawienia.

Biorąc pod uwagę oszczędności w rozmiarze pliku jakie daje Google Guetzli i jego darmowość jest to algorytm wart uwagi. Algorytm w Photoshopie jest bardzo dobry, ale też płatny.

Niestety algorytm istotnie ma bardzo duże wymagania. Dla przetworzenia pliku z topowej lustrzanki o rozmiarze 36 Mpix potrzebujemy 10 GB wolnej pamięci (plik 12 Mpix wymaga około 3,3 GB). Konwersja jest także długotrwała - może trwać nawet kilka minut przy dużych plikach.

Dlatego na obecnym etapie Google Guetzli to bardziej ciekawostka niż rzecz warta zainteresowania. Gdyby był tak szybki jak tradycyjna biblioteka JPEG to nie pozostałoby nic tylko go rekomendować. A tak ze względu na otwarty kod, skorzystają z niego przede wszystkim osoby chętne do eksperymentowania z algorytmem i mające dużo czasu.

Bo przekonwertowanie biblioteki tysięcy zdjęć potrwa „wieczność”, a w przypadku treści internetowych różnica tak bardzo w oczy się nie rzuca. Lepiej szybciej skompresować słabszym algorytmem niż tracić czas, a nawet poświęcić nieco jakość. Szczególnie, że…

…nie tylko enkoder JPEG decyduje o tym jak odbieramy obrazy

Duży wpływ na to jak będzie wyglądało zdjęcie na ekranie naszego komputera ma jego rozmiar w pikselach. Im większa rozdzielczość tym mniejszą uwagę będziemy zwracać na niedoskonałości kompresji, szukając innych wyjaśnień. To jak dobrze wyświetla kolory nasz monitor też nie jest bez znaczenia. Wiele artefaktów zauważymy tylko przy dobrej rozdzielczości tonalnej.

Poza tym istotne jest jakiej aplikacji używamy do przeglądania zdjęć. Może trafić się taka, która będzie „psuła” zdjęcia próbując je rzekomo „poprawić”. Zwłaszcza gdy zechcemy skalować obraz i powiększać go ponad 100%. Szczególnie wtedy widać różnice pomiędzy narzędziami. Artefakty widziane na powiększonych JPEGach nie musza być artefaktami wynikającymi z działania algorytmu kompresującego. Mogą być artefaktami algorytmu skalującego obraz w używanej przez nas przeglądarce zdjęć.

I jeszcze jedna kwestia - internet. Dane przesyłane do i pobierane z internetu czasem są dodatkowo optymalizowane o czym „przypadkiem” zapominamy. Najlepszym przykładem jest Facebook, który jest znany z tego jak potrafi „zmasakrować” wgrywane do galerii zdjęcia. I tak nasza walka o 35% zysk może okazać się stratą czasu.

Źródło: Google, Inf. własna

Komentarze

6
Zaloguj się, aby skomentować
avatar
Komentowanie dostępne jest tylko dla zarejestrowanych użytkowników serwisu.
  • avatar
    Kenjiro
    4
    Wszystko by było pięknie i wspaniale, gdyby popularne programy do obróbki grafiki, jak np. Photoshop generowały odpowiednio skompresowane pliki, ale nawet SaveForWeb w jakości 8 generuje pliki o 20-30% większe niż lepsza jakościowo kompresja z XnView. Skoro giganci mają w pompie wynik, to czemu się dziwić, że ludzie takie obrazy wrzucają później w sieć.
    • avatar
      Atak-Snajpera
      0
      Co ten algorytm robi w te pare minut?!
      Ten pomysł reaktywacji dziadka jpega jest bez sensu. Jak już koniecznie chcą zwiększać efektywność kompresji to już lepiej wykorzstać algorytmy z HEVC czy nawet starszego AVC. Nie dość że proces kompresji przebiegnie w mniej niż sekundę to jeszcze będzie ~1.5x-2x mniejszy rozmiar przy porównywalnej jakości.
      • avatar
        apuk666
        0
        Ja tam zauważyłem, że fajnie skuteczny jest format .DDS i z niego głównie korzystam. Ktoś coś więcej? Bo z minusów tego formatu wyszukałem się tylko tego, że kompresuje się go na stałe bez możliwości edycji.
        • avatar
          sooger
          0
          Przeprowadzam własne testy w tym zakresie i dochodzę do wniosków, że autorzy pisząc 35% to chyba asekuracyjnie napisali taką liczbę, spokojnie można uzyskiwać kompresję nawet 50-60% w zależności od konkretnego przypadku.

          Dla Guetzli stworzyłem GUI na Windows, które ułatwi optymalizację:
          http://techformator.pl/xguetzli-windows-gui-for-guetzli-perceptual-jpeg-encoder/