If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Bezstratna kompresja obrazu

Obrazy są wokół nas, od ikon aplikacji po animowane GIFy i zdjęcia. Pliki graficzne mogą zajmować wiele miejsca, więc komputery używają szeregu algorytmów, aby kompresować te pliki.
Dla najprostszych obrazów, komputery mogą używać algorytmu kompresji zwanego run-length encoding (RLE).

Mapy bitowe

Zanim poznamy kompresję obrazów, zobaczmy jak możemy reprezentować bitowo obraz bez żadnej kompresji.
Oto prosty obraz, 16x16 ikona serca:
Ikona czerwonego serca z białym tłem
Przyliżmy i nałóżmy na wierzch siatkę, tak aby można było dokładnie zobaczyć, które piksele są czerwone, a które białe:
Siatka 16x16 pikseli z ikoną serca. Serce jest wykonane z czerwonych pikseli, a tło to białe piksele.
Ikona serca składa się tylko z dwóch kolorów, czerwonego i białego, więc komputer może przedstawiać w binarnym odwzorowaniu czerwone piksele jako 1 i białe piksele jako 0. Nazywamy to mapą bitową, ponieważ przyporządkowuje się piksele do bitów.
Używając tej metody, ikona serca byłaby przedstawiona tak:
0001100000110000
0011110001111000
0111111011111100
1111111111111110
1111111111111110
1111111111111110
1111111111111110
1111111111111110
0111111111111100
0011111111111000
0001111111110000
0000111111100000
0000011111000000
0000001110000000
0000000100000000
Wyobraźmy sobie, że musisz przeczytać powyższe bity komuś, kto je zapisuje. Po pewnym czasie możesz powiedzieć "pięć zer" zamiast "zero zero zero zero zero". Cóż, komputer może zrobić to samo...

Algorytm kompresji RLE

W kodowaniu RLE, komputer zastępuje każdy wiersz cyframi wskazującymi, ile kolejnych pikseli jest tego samego koloru, zawsze zaczynając od liczby białych pikseli.
Na przykład, pierwszy wiersz zawiera 3 białe piksele, 2 czerwone piksele, 5 białych pikseli, 2 czerwone piksele, następnie 4 białe piksele:
1 100 000 110 000
Byłoby to zapisane w następujący sposób:
3,2,5,2,4
Czwarty wiersz jest ciekawy, ponieważ zaczyna się od piksela czerwonego. Kodowanie RLE rozpoczyna zapis od ilości białych pikseli, więc zapis będzie tak wyglądał:
0,15,1
Sprawdź swoją wiedzę
Oto drugi wiersz mapy bitowej dla serca:
11 110 001 111 000
W jaki sposób ten wiersz mógłby być zapisany w RLE?
Wybierz 1 odpowiedź:

Dekompresja RLE

Gdy komputer używa kodowania RLE, powinien także być w stanie odtworzyć idealnie obraz ze skompresowanej reprezentacji - powinniśmy postępować zgodnie ze strategią komputera.
Spróbujmy. Oto przedstawienie czarno-białej ikony przy użyciu RLE:
4, 9, 3
4, 7, 2, 1, 2
4, 7, 2, 1, 2
4, 9, 3
4, 7, 5
4, 7, 5
5, 5, 6
0, 15, 1
1, 13, 2
Pierwszy wiersz ma 4 białe piksele, a następnie 9 czarnych pikseli, a następnie 3 białe piksele. Wygląda to tak:
Wiersz 16 pikseli, począwszy od 4 białych, następnie 9 czarnych, a następnie 3 białych.
Kolejny wiersz ma 4 białe piksele, następnie 7 czarnych, 2 białe, 1 czarny i 2 białe piksele. Wygląda to tak:
Wiersz 16 pikseli, począwszy od 4 białych, następnie 7 czarnych, następnie 2 białe, potem 1 czarny, a na końcu 2 białe.
Gdy w ten sposób zapiszemy kolejne wiersze, okaże się, że ikona to filiżanka i spodek:
Siatka o szerokości 16 pikseli i wysokości 19 pikseli, w której piksele są wypełnione na czarno w kształcie filiżanki i spodka.
Sprawdź swoją wiedzę
Poniżej przedstawiono kompresję czarno-białej ikony 6x6, używając RLE:
2,2,2
2,2,2
0,6
0,6
2,2,2
2,2,2
Jaki symbol matematyczny przypomina tę ikonę?
Wybierz 1 odpowiedź:

Współczynnik kompresji

Stwierdziliśmy, że kodowanie RLE może zaoszczędzić miejsce w czasie przechowywanie prostych obrazów - ale ile miejsca?
Aby się tego dowiedzieć, napisałem program do kodowanie czarno-białej mapy bitowej metodą RLE. Niniejsza tabela przedstawia wyniki dla trzech ikon serca rosnącego rozmiaru:
ObrazWymiaryNieskompresowanepo RLEOszczędność miejsca
Mała czarno-biała ikona serca
16x1625622810.9%
Średnia czarno-biała ikona serca
32x32102453248.0%
Duża czarno-biała ikona serca
128x12816384289882.3%
Spójrz na kolumnę końcową, oszczędność miejsca. Zauważyłeś zależność? Zaoszczędziliśmy znacznie więcej miejsca, ponieważ rozmiar wzrasta z powodu znacznie dłuższego powtarzającego się kolor (przebiegu).
A co z obrazami o tym samym rozmiarze? Ta tabela podsumowuje wyniki kompresji trzech dużych ikon za pomocą RLE:
ObrazWymiaryNieskompresowanepo RLEOszczędność miejsca
Duża czarno-biała ikona serca
128x12816384289882.3%
Duża czarno-biała ikona kaduceusza (węża na słupie ze skrzydłami)
128x12816384829849.4%
Duża czarno-biała ikona korony
128x12816384873046.7%
Teraz widzisz, dlaczego wybrałem ikonę serca jako mój przykład: bardzo dobrze się kompresuje, dzięki wielu seriom czarnego lub białego koloru. Kompresja RLE nadal zmniejsza o połowę rozmiar innych ikon, ale nie oszczędza aż tyle miejsca.
W niektórych przypadkach RLE nie może w ogóle zaoszczędzić miejsca...

Limity RLE

A co z tą ikoną 16x16?
Ikona złożona z losowych kolorów dla każdego piksela.
Powiększmy, abyśmy mogli zobaczyć każdy piksel:
Siatka 16x16 pikseli. Każdy piksel jest losowym kolorem.
Każdy piksel tej ikony jest innego koloru, nie da się tego skrócić.
Kodowanie RLE nie potrafi skompresować takiego obrazka. Ten przykład stworzyłem specjalnie do tego artykułu (wygenerowany przez ten program), wydaję się więc nie być to takie powszechne.
Jak się okazuje, zdjęcia są podobne do tej ikony - prawdziwy świat jest wypełniony detalami nie dającymi się tak skrócić.
Strona drużyny Khan Academy zawiera to piękne zdjęcie psa patrzącego na ekran komputera:
Zdjęcie psa wpatrującego się uważnie w ekran komputera.
Przy normalnej rozdzielczości wygląda na to, że istnieją bloki o podobnym kolorze, jak na futrze psa lub szary kolor na ekranie komputera.
Przybliżmy widok do pikseli:
Siatka pikseli powiększająca obszar pyska psa spoglądającego na ekran komputera. Piksele są niebieskie i pomarańczowe, ale mają dużą liczbę odcieni niebieskiego i pomarańczowego.
Teraz widzisz, że nawet pozornie prosty ekran komputerowy jest rozległym zestawem podobnych kolorów. Kodowanie pikseli RLE nie zrobi zbyt wiele, aby zmniejszyć rozmiar pliku.

Zastosowanie dla RLE

Kompresja RLE była bardzo popularną techniką, kiedy większość obrazów komputerowych była ikonami z ograniczoną paletą kolorów.
W dzisiejszych czasach nasze obrazy są bardziej złożone i nie zawierają tyle obszaru tego samego koloru.
Gdzie jest obecnie używany RLE? Faksy nadal używają RLE do kompresji wysyłanych dokumentów, ponieważ muszą one zapisywać tylko czarno-białe litery. Obrazy JPEG używają RLE na końcowym etapie kompresji, ale najpierw używają bardziej złożonego algorytmu do kompresji danych fotograficznych. Poznamy to wkrótce.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️Masz pytania związane z tym zagadnieniem? Możesz zadać swoje pytanie poniżej!

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.