Kompresja stratna i bezstratna

Kompresja bezstratna umożliwia odtworzenie oryginalnej (niezmienionej) postaci informacji pierwotnej z danych skompresowanych. W przypadku zastosowania kompresji stratnej nie da się natomiast odzyskać danych w postaci oryginalnej.

Od razu nasuwa się pytanie: czy stosowanie kompresji stratnej ma jakikolwiek sens, skoro trzeba liczyć się z tym, że po zdekodowaniu danych nie odzyskamy części informacji? Otóż zależy to od rodzaju danych.

Jeśli skompresujemy stratnie kod źródłowykod źródłowykod źródłowy programu, czyli symbole i słowa zapisane zgodnie z zasadami jakiegoś języka programowania, to po zdekompresowaniu otrzymamy bezwartościowy ciąg znaków. Z tego właśnie powodu tekstów nie kompresuje się stratnie. To samo dotyczy plikówplikplików wykonywalnych programów – każdy zapisany w nich bit jest istotny.

Mechanizmy kompresji stratnej można natomiast zastosować w celu zmniejszenia objętości plików graficznych, materiałów audio oraz wideo. Skompresowany obraz lub dźwięk nie odwzorowuje idealnie oryginału, jednak niedoskonałości powinny być albo niezauważalne, albo akceptowalne. W przypadku obrazów, filmów lub dźwięku ocena jakości informacji po skompresowaniu zależy od indywidualnych cech widza bądź słuchacza; te z kolei nie dają się precyzyjnie zmierzyć.

Korzystając z metod kompresji stratnej w celu zmniejszenia rozmiaru pliku musimy być jednak gotowi na pewne ustępstwa związane z pogorszeniem jakości. Oto przykład:

Rk7jmgEkQH5MG
Źródło: domena publiczna.

Obraz wyżej powstał w wyniku przekształcenia oryginału do postaci binarnej, złożonej z pikseli mających dwa kolory: czarny i biały. Grafika ma rozmiary 322 na 480 pikseli. Żeby ją zapisać, wystarczy 154 560 bitów. Wynika to z faktu, że kolor każdego piksela opisujemy za pomocą bitu 0 lub 1, a zapamiętać musimy (322 ⋅ 480) punktów składających się na obraz. W wersji „oryginalnej”, czyli w tym konkretnym przypadku w formacie BMP, objętość pliku wynosi 154 560 bajtów (kolor każdego piksela jest opisywany za pomocą 8 bitów - co łącznie umożliwia zapisanie 256 różnych kolorów).

Ważne!

Mona Lisa może zostać znaleziona w formacie dużo dokładniejszym niż tylko w 256 kolorach, ze względu na to, że była dygitalizowana wielokrotnie w różnych momentach historii informatyki, a format BMP umożliwia dużo dokładniejsze zapisanie kolorów, nawet do 24 bitów na pojedynczy piksel.

Format BMP jest najbardziej „surowym” formatem dostępnym podczas zapisu plików graficznych. Przy okazji zajmuje również najwięcej przestrzeni dyskowej, jednakże odczytać go można bez użycia żadnych dodatkowych algorytmów.

Przykład, którym się posłużyliśmy, jest mocno przejaskrawiony. Oddaje on jednak istotę kompresji stratnej zastosowanej w celu zmniejszenia objętości plików graficznych. Polega ona na takim uproszczeniu zapisu, aby wynikowy obraz wyglądał mniej więcej tak samo, jak w postaci nieskompresowanej.

Taki mechanizm się sprawdza: nawet po niemal całkowitym pozbawieniu obrazu kolorów wciąż bez trudu możemy rozpoznać, że jest to Mona Lisa. W rzeczywistości metody kompresji stratnej są o wiele bardziej subtelne niż te, których efekt oglądamy na czarno‑białej grafice wyżej. Uzyskiwane rezultaty też są znacznie lepsze.

Algorytm kompresji stratnej jest wykorzystywany m.in. w plikach o formacie JPG. W przypadku tego formatu sąsiadujące z sobą piksele są przekształcane w taki sposób, aby miały taki sam kolor. Im większa ma być jakość skompresowanego obrazu, tym mniejsze muszą być grupy pikseli, których barwy są zmieniane.

Ważne!

Wśród najpopularniejszych formatów stratnych kompresji plików graficznych, możemy wyróżnić rodzinę formatów opartych o algorytm JPEG, czyli JPG, JPEG, JPE, JFIF, czy format HEIC, który jest określany przez niektórych jako „następca” formatów opartych o algorytm JPEG.

Najpopularniejszymi formatami kompresji bezstratnej są formaty gif oraz png.

W algorytmach stratnych bardzo często również zmniejsza się ilość kolorów, z których nasz kompresowany obraz jest zbudowany.

Przykład 1

Na obrazie widać cztery niebieskie kwadraty. Co najmniej jeden z nich ma nieco inny odcień. Spróbuj go wskazać.

Rhmy1cU9qEVb4
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Nie da się wykluczyć, że monitor, na którym oglądasz ten obrazek, nie będzie nawet w stanie pokazać różnic w kolorach. Nie ma też znaczenia, który kwadrat wskażesz – każda odpowiedź będzie poprawna. Każdy kwadrat ma inny odcień.

Skoro nie jesteśmy w stanie rozróżnić barw, w pewnych przypadkach może się okazać, że dobrym wyjściem jest zapisanie prostej informacji „cztery kwadraty tego samego koloru” zamiast przechowywać dane na temat barwy każdego kwadratu osobno.

Innym sposobem kompresji stratnej, który możemy zastosować w warunkach domowych, jest zmniejszanie rozmiaru obrazu. Jeśli na stronie internetowej grafika ma być pokazywana w rozdzielczości 300 na 400 pikseli, to nawet jeśli rozmiary oryginały wynoszą 3000 na 4000 punktów, nie uzyskamy lepszej jakości, a zużyjemy zbyt wiele zasobów komputera.

R7VJeut3qDECm
Źródło: domena publiczna.

Jeśli zmniejszymy pokazany obraz, posługując się programem graficznym, wciąż będziemy w stanie go rozpoznać.

RtDCLMGtzPdY6
Źródło: domena publiczna.

Ponieważ jest to jednak operacja stratna, po zwiększeniu rozmiarów miniaturowej grafiki uzyskamy następujący efekt:

RO05mskZXZ8OU
Źródło: domena publiczna.

Jak pokazaliśmy, korzystanie z algorytmów kompresji stratnej powoduje utratę istotnych informacji. Warto zaznaczyć, że dotyczy to przekształcania grafiki rastrowej. Grafika wektorowa jest dowolnie skalowalna, ponieważ zawiera tylko opis matematyczny obiektów, które mają się pojawić na obrazie.

Wspomnieliśmy wcześniej o algorytmie kompresji stratnej wykorzystywanym w plikach JPG. Sprawdźmy, jakie efekty przynosi zastosowanie go w praktyce. Zapiszemy ten sam obraz zmieniając jakość wynikowej grafiki.

Oczekiwaną jakość podaje się programowi graficznemu jako parametr, który wpływa na realizację algorytmu kompresji. Wartość 100 oznacza praktycznie bezstratny zapis, a 0 – utratę bardzo dużej części informacji.

Poniżej zamieszczamy „oryginalny” obraz Bitwa pod Grunwaldem zapisany w formacie PNG. Przed kompresją grafika zapisana jako mapa bitowa (BMP) zajmowała 11,1 MB, po kompresji zajmuje 2,83 MB.

RqOPwf2Z84e5S
Źródło: domena publiczna.

Zapiszemy Bitwę pod Grunwaldem w postaci pliku JPG, ustalając jakość na 50. Obraz w tym formacie zajmuje 557 kB. Oto efekt kompresji:

RaJogCiU43WA8
Źródło: domena publiczna.

Być może jesteśmy w stanie dostrzec artefaktyartefaktartefakty, które pojawiają się na skutek zastosowania algorytmu kompresji (zależy to od monitora i ustawionego powiększenia), jednak oryginał i obraz skompresowany są praktycznie nierozróżnialne.

R1cxANXBDYDTL
Źródło: domena publiczna.

Obraz wyżej został skompresowany z jakością ustawioną na 20. Artefakty wciąż bardzo trudno jest zauważyć (o ile w ogóle da się to zrobić). Grafika zajmuje 272 kB.

RQvwuWcSOIjM6
Źródło: domena publiczna.

Dopiero dla jakości 5 różnica jest zauważalna gołym okiem (ze względu na liczne artefakty pojawiające się na obrazie). Grafika takiej jakości zajmuje jednak tylko 84,7 kB.

Metodę kompresji należy dostosować do danych, których objętość chcemy zmniejszyć. Przykład Bitwy pod Grunwaldem prowadzi do wniosku, że nie zawsze jest sens przesyłać obrazy w najwyższej jakości, ponieważ różnice między oryginałem a grafiką skompresowaną nie zawsze będą zauważalne.

Dźwięk również może być kompresowany w sposób stratny. W tym przypadku również idziemy na drobne kompromisy, ale w pewnych przypadkach różnice jakości powinny być niewychwytywalne.

Kompresowanie dźwięku polega na usuwaniu tych jego składowych (np. harmonicznych o pewnych częstotliwościach), których człowiek nie jest w stanie usłyszeć, lub które słyszy gorzej. Jednym z formatów stratnych wykorzystywanych do zapisywanie dźwięku jest MP3. Inną metodą kompresji plików dźwiękowych jest choćby decymacja, polegająca na usuwaniu informacji, o co n‑tej próbce, pobranej z sygnału. Temat kompresji dźwięku jest złożoną dziedziną, której nie będziemy jednak dokładniej omawiać.

Metody kompresji bezstratnej, omawiane w poprzednich e‑materiałach, mogą być oczywiście również używane do zmniejszania objętości materiałów dźwiękowych, filmów i obrazów. Jednak są one raczej używane przez twórców tych dzieł lub archiwizatorów.

Dla zainteresowanych

Odpowiednikiem plików o formacie bmp dla plików dźwiękowych, jest format plików wav, który zawiera w sobie spróbkowanypróbkowanie sygnałuspróbkowany „surowy” sygnał dźwiękowy.

Używanie metody kompresji stratnej nie wyklucza stosowania metod bezstratnych. Przykładowo, algorytm Huffmana wykorzystywany jest w algorytmie  kompresji JPG.

W przypadku zastosowania kompresji bezstratnej osiągamy mniejsze współczynniki kompresji. Wynika to z faktu, że entropia źródła informacji (obrazu, dźwięku albo filmu) nie może przekroczyć pewnego poziomu, zależnego od częstości występowania danej informacji. Inaczej mówiąc, istnieje pewien poziom kompresji bezstratnej, po którego przekroczeniu zaczęłoby brakować symboli służących do zapisu informacji. Przykładowo - jeżeli mamy trzy dowolne informacje, to niemożliwe będzie zapisanie ich na jednym bicie, ponieważ fizycznie nie będzie to możliwe z powodu, że średnia ilość informacji przypadająca na pojedynczą wiadomość (bit), będzie większa niż liczba wiadomości (bitów). Jeżeli jednak niektóre informacje zostaną usunięte, poziom entropii dla kodowania stratnego spadnie i częstości występowania innych informacji się zwiększy, co spowoduje, że będzie możliwe zapisanie pozostałych informacji w potencjalnie krótszy sposób.

Pozostałe materiały z serii

6,6,6,66,6,6,6

Słownik

artefakt
artefakt

w informatyce: pozostałości, wady (lub skutki uboczne), wynikające z przetworzenia obrazu z wykorzystaniem jakiegoś algorytmu

kod źródłowy
kod źródłowy

zapis programu komputerowego zgodny z zasadami określonego języka programowania; kod źródłowy może zostać skompilowany lub wykonany przez interpreter

plik
plik

uporządkowany zbiór danych o skończonej długości, mający własną nazwę, odróżniającą go od innych zbiorów

entropia
entropia

miara uporządkowania; średnia ilość informacji, przypadająca na pojedynczą wiadomość ze źródła informacji

próbkowanie sygnału
próbkowanie sygnału

jest to rejstrowanie wartości sygnału analogowego w określonych, w domyśle równych, odstępach czasu (czyli z określoną częstotliwością). Zgodnie z twierdzeniem Shannona‑Nyquista-Kotielnikowa, żeby spróbkować poprawnie sygnał o największej częstotliwości składowej n, to próbkować musimy z dwukrotnie wyższą częstotliwością.