Jak można „odchudzać” obrazy?

Jak można „odchudzać” obrazy?
Ryszard Tadeusiewicz Fot. Naukowiec AGH, absolwent myślenickiego LO

W poprzednim felietonie pisałem o obrazach cyfrowych (że są – rastrowe i wektorowe), ale ponieważ temat grafiki komputerowej jest obszerny (i ładny – bo kto nie lubi obrazków?), więc będę go kontynuował.

Dziś opowiem Państwu o kompresji obrazów cyfrowych. Kompresja w ogólnym sensie to metoda zmniejszenia objętości jakiegoś zasobu informacji. Oryginalnie na przykład ten tekst tutaj ma objętość 15 kilobajtów (jednostek ilości informacji), ale stosując odpowiednie metody przy jego przechowywaniu na dysku albo przy przesyłaniu Internetem – można tę objętość zmniejszyć (do około 70% objętości pierwotnej), żeby było taniej (przy gromadzeniu w bazie danych) albo szybciej (przy przesyłaniu).

Oczywiście przy takim malutkim pliku, jak ten tekst, nie ma to znaczenia, ale czasem kompresję stosujemy do plików naprawdę dużych – i wtedy warto się postarać, by ową kompresję skutecznie wprowadzić.

Takimi plikami o dużej objętości są głównie obrazy, i o ich kompresji trochę Państwu opowiem.

Typowy obraz (na przykład zdjęcie o dobrej jakości) ma objętość kilku gigabajtów. To naprawdę dużo. Do zapisanie cyfrowo jednego bajtu potrzeba 8 bitów (takich miejsc w pamięci, gdzie może być zarejestrowana jedynka albo zero – podstawowy składnik każdej informacji cyfrowej). Gigabajt to (w przybliżeniu) miliard bajtów. Do zapisania takiej informacji potrzeba naprawdę dużo pamięci!

Wymyślono wiele sposobów kompresji obrazów cyfrowych. Najprostsza do wyjaśnienia jest metoda RLE (Run-Length Encoding ). Wykorzystuje ona fakt, że na typowych obrazach zwykle wiele sąsiadujących ze sobą pikseli ma tę samą wartość. Jeśli na przykład jeden piksel zapisał wiadomość, że w tym oto miejscu obrazu jest fragment błękitnego nieba – to bardzo prawdopodobna jest sytuacja, że piksele leżące obok niego też rejestrują taką samą wartość. Zamiast więc zapisywać wartości wszystkich tych pikseli na zasadzie: „niebieski, niebieski, niebieski…” wystarczy zapisać: „238 niebieskich”. O wiele mniejsza objętość, a informacja ta sama!

Opisana metoda kompresji RLE należy do kategorii tak zwanych kompresji bezstratnych, ponieważ po kompresji i przesłaniu obrazu do odbiorcy – można ze skompresowanego pliku odtworzyć ten obraz, który był poddany kompresji, z dokładnością do najdrobniejszych szczegółów. Jest to po prostu dokładnie ten sam obraz, który mieliśmy pierwotnie!

Metody kompresji bezstratnej (a jest ich wiele!) bywają stosowane, ale stopień kompresji (zysk) większy jest przy metodach stratnych.

Metoda stratna oznacza, że obraz po skompresowaniu i odtworzeniu traci niektóre ze swoich właściwości, jest po prostu zubożony. Ale wzrok człowieka nie wykrywa tych subtelnych utraconych właściwości obrazu, a stopnień kompresji może być w tym przypadku znacznie wyższy. Popularną metodą kompresji stratnej jest algorytm JPEG. Obrazy skompresowane tym algorytmem mają w nazwie pliku rozszerzenie JPG. Teraz wiemy już, co to oznacza!