Badanie kompresji WebP

Wstęp

Porównaliśmy kompresję obrazów WebP i JPEG z wykorzystaniem nowego kodera dostępnego w libwebp. Celem jest przeprowadzenie zestawu łatwych do powtórzenia eksperymentów przy użyciu publicznie dostępnych narzędzi oraz porównanie kompresji obrazu uzyskanej przez WebP i JPEG.

Wcześniejsze badania porównawcze WebP koncentrowały się na ocenie dużej liczby obrazów i były przeprowadzone na źródłach JPEG zindeksowanych z internetu. JPEG to stratny format kompresji, który wprowadza artefakty kompresji do źródła. Poza tym początkowo użyliśmy wartości szczytowego współczynnika sygnału do szumów (PSNR). PNR ma pewne wady, gdy jest używany jako wskaźnik jakości obrazów. Na podstawie opinii społeczności przeprowadzamy eksperymenty z obrazami PNG, w tym z obrazami dostępnymi w kilku standardowych pakietach testowych. W tym badaniu korzystamy z podobieństwa strukturalnego (SSIM) jako wskaźnika jakości. SSIM jest uważany za dane o lepszej jakości wizualnej.

Metodologia

Opisujemy 2 rodzaje ocen. W pierwszym przypadku badamy dodatkową kompresję uzyskaną przez WebP na tym samym poziomie jakości co JPEG. W szczególności generujemy obrazy WebP tej samej jakości (według indeksu SSIM), co obrazy JPEG, a następnie porównujemy rozmiary plików obrazów WebP i JPEG. W drugim przypadku porównujemy wykresy SSIM i bity na piksel (bpp) w przypadku formatów WebP i JPEG. Wykresy te pokazują kompromisowe zniekształcenia szybkości w formatach WebP i JPEG.

Zbiory danych do eksperymentów składają się z obrazów w formacie PNG. Uzyskano te obrazy z publicznie dostępnych standardowych pakietów obrazów testowych oraz dużej kolekcji obrazów w formacie PNG zindeksowanych z internetu.

Każdy eksperyment obejmuje uruchomienie zestawu poleceń. Aby eksperymenty były łatwe do odczytania przez innych, wykorzystywane są wyłącznie publicznie dostępne narzędzia wiersza poleceń. Narzędzia wiersza poleceń używane w tym eksperymencie to:

  • identify i convert to narzędzia wiersza poleceń, które są częścią ImageMagick. Do tej analizy użyliśmy wersji 6.5.7. Do konwersji między formatami PNG i PPM wykorzystaliśmy convert. Do wyodrębnienia informacji o szerokości i wysokości obrazu wykorzystaliśmy funkcję identify.

  • cwebp i dwebp to narzędzia wiersza poleceń będące częścią biblioteki libwebp, którą udostępniliśmy w pierwszym kwartale 2011 r. Użyliśmy wersji 0.1.2 biblioteki. Do kodowania i dekodowania obrazów WebP użyliśmy cwebp i dwebp. Użyliśmy domyślnych parametrów kodowania i dekodowania tych narzędzi.

  • cjpeg i djpeg to narzędzia wiersza poleceń, które są częścią biblioteki libjpeg. Użyliśmy wersji 6b biblioteki. Do kodowania i dekodowania obrazu JPEG używamy cjpeg i djpeg. Do optymalizacji rozmiaru pliku użyliśmy flagi cjpeg z flagą -optimize. Dla pozostałych parametrów ustawimy wartości domyślne.

Jakość obrazu zmierzono za pomocą SSIM. Jak już wspomnieliśmy, SSIM jest ogólnie uważany za lepszy wskaźnik jakości niż PSNR. Do obliczania indeksu SSIM użyliśmy publicznie dostępnej implementacji w C++. Czytelnik może pobrać z repozytorium kodu skrypty Pythona, które były używane w eksperymentach,

Zbiory danych obrazów

Wybraliśmy zbiory danych, aby ocenić standardowe kolekcje obrazów testowych oraz duży zbiór obrazów. Poniżej znajduje się lista zbiorów danych używanych w eksperymentach.

  1. Lenna: popularny obraz Lenny (512 x 512 pikseli).

  2. Kodak: 24 obrazy z pakietu obrazów Kodak true color.

  3. Tecnick: 100 obrazów z kolekcji dostępnej na stronie Tecnick.com. Wykorzystaliśmy 100 oryginalnych obrazów w kolorach RGB w oryginalnym rozmiarze.

  4. Image_crawl: (Indeksowanie obrazów): aby przetestować dużą liczbę obrazów, pobraliśmy losową próbkę obrazów w formacie PNG z bazy danych indeksowania internetu Wyszukiwarki grafiki Google. Większość zindeksowanych obrazów PNG to ikony, grafiki, wykresy, zeskanowane dokumenty itp. Jednak większość obrazów w standardowych kolekcjach testowych przypomina zdjęcia, a nie obrazy wygenerowane komputerowo. Aby ujednolicić zbiór danych w przypadku standardowych zestawów testów, przestosowaliśmy algorytm wykrywania twarzy do obrazów w formacie PNG. W ramach tego eksperymentu wzięliśmy pod uwagę tylko te obrazy (około 11 000), które przeszły ten test.

Eksperyment 1: WebP a JPEG przy takim samym indeksie SSIM

W ramach tego eksperymentu generujemy obrazy JPEG i WebP przy porównywalnych wartościach SSIM i mierzymy proporcje rozmiarów plików. Etapy eksperymentu są następujące:

  1. Skompresuj źródłowy obraz PNG do pliku JPEG za pomocą parametru jakości Q i zapisz SSIM między źródłowym obrazem PNG a skompresowanym obrazem JPEG.

  2. Skompresuj ten sam obraz źródłowy do formatu WebP, używając parametru jakości, który zapewnia jak najwierniej opisany powyżej zarejestrowane działanie SSIM.

Wykonaliśmy powyższe 2 kroki na wszystkich obrazach w zbiorze danych, a następnie zmierzyliśmy średni rozmiar pliku i SSIM w przypadku obrazów JPEG i WebP.

W tabelach poniżej znajdziesz wyniki tego eksperymentu dla trzech różnych wartości (50, 75 i 95) parametru jakości JPEG Q. Parametry jakości 50 i 95 odpowiadają za kompresję obrazu odpowiednio przy niskich i wysokich szybkościach transmisji bitów. Dodaliśmy też parametr jakości JPEG 75, ponieważ jest on ogólnie zalecanym poziomem jakości dla obrazów JPEG.

Tabela 1. Średni rozmiar plików WebP i JPEG dla tego samego indeksu SSIM odpowiadającego JPEG Q=50

Lena Kodak Tecnik Image_crawl
WebP: średni rozmiar pliku
(średni rozmiar SSIM)
17,4 KB
(0,841)
31,0 KB
(0,898)
92,4 KB
(0,917)
6,5 KB
(0,901)
JPEG: średni rozmiar pliku
(średni rozmiar SSIM)
23,5 KB
(0,840)
42,7 KB
(0,897)
124,6 KB
(0,916)
9,9 KB
(0,899)
Stosunek rozmiaru pliku WebP do JPEG 0.74 0,72 0.74 0.66

Tabela 2. Średni rozmiar plików WebP i JPEG dla tego samego indeksu SSIM odpowiadającego JPEG Q=75

Lena Kodak Tecnik Image_crawl
WebP: średni rozmiar pliku
(średni rozmiar SSIM)
26,7 KB
(0,864)
46,5 KB
(0,932)
139,0 KB
(0,939)
9,9 KB
(0,930)
JPEG: średni rozmiar pliku
(średni rozmiar SSIM)
37,0 KB
(0,863)
66,0 KB
(0,931)
191,0 KB
(0,938)
14,4 KB
(0,929)
Stosunek rozmiaru pliku WebP do JPEG 0,72 0,70 0.73 0,69

Tabela 3. Średni rozmiar plików WebP i JPEG dla tego samego indeksu SSIM odpowiadający JPEG Q=95

Lena Kodak Tecnik Image_crawl
WebP: średni rozmiar pliku
(średni rozmiar SSIM)
74,3 KB
(0,910)
118,0 KB
(0,978)
356,0 KB
(0,970)
23,4 KB
(0,969)
JPEG: średni rozmiar pliku
(średni rozmiar SSIM)
104 KB
(0,907)
162 KB
(0,976)
492 KB
(0,970)
31,3 KB
(0,968)
Stosunek rozmiaru pliku WebP do JPEG 0.71 0.73 0,72 0,75

Na podstawie powyższych tabel widać, że WebP zapewnia 25–34% większy wzrost kompresji niż JPEG przy takim samym lub nieco lepszym indeksie SSIM.

Eksperyment 2: wykresy SSIM i BPP w formatach WebP i JPEG

Przyjrzymy się wynikom związanym ze zniekształceniami w przypadku formatów JPEG i WebP. W szczególności analizujemy wykresy między formatami SSIM i bit na piksel (bpp) w formatach JPEG i WebP. Pobieram źródłowy obraz PNG i kompresujemy go do formatu JPEG i WebP, używając wszystkich możliwych wartości jakości (0–100). Następnie dla każdej wartości jakości analizujemy wartości SSIM i bpp w przypadku formatów JPEG i WebP. Liczby podane poniżej pokazują porównanie wykresów SSIM i BPP dla 3 obrazów wybranych z 3 używanych przez nas publicznych zbiorów danych.

Rysunek 1. SSIM a BPP dla Lenny

ssim vs. bpp

Rysunek 2. Porównanie funkcji SSIM i BPP w przypadku koduim19.png ze zbioru danych Kodak

SIM vs. bpp na Kodim19

Rysunek 3. Porównanie danych SSIM i BPP w przypadku RGB_OR_1200x1200_061.png ze zbioru danych Tecnick

SIM vs. bpp dla RGB_OR_1200x1200

Ponadto sprawdziliśmy przeciętne zachowanie SSIM w porównaniu z wykresem bpp w przypadku zbiorów danych Kodak i Tecnick. Aby utworzyć wykres średniego zachowania, kompresujemy wszystkie obrazy w zbiorze danych do formatu WebP i JPEG, wybierając spośród 100 różnych wartości jakości. Następnie dla każdej wartości jakości tworzymy wykres średniej wartości SSIM i bpp. Zbiór danych indeksowania obrazów składa się z heterogenicznych obrazów, które nie nadają się do tej agregacji danych. Poniższe wykresy przedstawiają średnie zachowanie SSIM i bpp odpowiednio w przypadku zbiorów danych Kodak i Tecnick.

Rysunek 4. Porównanie funkcji SSIM z BPP w przypadku zbioru danych Kodak

SIM vs. bpp dla Kodak

Rysunek 5. Porównanie danych SSIM i BPP w przypadku zbioru danych Tecnick

ssim vs. bpp dla zbioru danych Tecnick

Ogólnie na podstawie powyższych wykresów widać, że WebP wymaga mniej bitów na piksel niż JPEG do uzyskania takiego samego indeksu SSIM.

Podsumowanie

W badaniu porównano kompresję WebP w porównaniu z JPEG. Zaobserwowaliśmy, że średni rozmiar pliku WebP jest o 25–34% mniejszy w porównaniu z rozmiarem pliku JPEG z odpowiednim indeksem SSIM. Wykresy SSIM i bpp pokazują, że WebP wymaga mniej bitów na piksel niż JPEG dla tego samego indeksu SSIM. Te wyniki wskazują, że WebP może znacznie poprawić kompresję w porównaniu z JPEG.


1 Huynh-Thu, P.; Ghanbari, M. (2008). „Zakres ważności PSNR w ocenie jakości obrazu/filmu”. Electronics Letters 44: 800-801.doi:10.1049/el:20080522.

2 Z. Wang, A. C. Bovik, H. R. Sheikh, E. P. Simoncelli, „Image Quality Assessment: From errorMeasure to structurallnościity” (Ocena jakości obrazu: od pomiaru błędów do podobieństwa strukturalnego), Image Processing, IEEE Transactions, Volumes 13, Issue 4, str. 600-612, 2004.