Technologie Informacyjne i Komunikacyjne
Wykład 6
Kompresja danych, zapis obrazu
Jan Suffczyński
Jan.Suffczynski@fuw.edu.pl
Plan wykładów
Data Temat wykładu
1 15-10-2020 Technologia półprzewodnikowa stojąca za działaniem komputera (I) 2 29-10-2020 Technologia półprzewodnikowa stojąca za działaniem komputera (II) 3 26-11-2020 Systemy zapisu danych, kodowanie znaków
4 10-12-2020 Sztuczna inteligencja/deep learning
5 07-01-2021 Wprowadzenie do języka Wolfram Mathematica 6 21-01-2021 Cyfrowy zapis dźwięku i obrazu
28-01-2021 Test pisemny
Materiały z wykładu
• http://www.fuw.edu.pl/~jass/TIK2020.html
• Użytkownik: student
• Hasło: student (także do nagrań na vimeo)
Plan wykładu
Wprowadzenie
Kompresja danych
• Zasady kompresji
• Metody kompresji
– Kompresja bezstratna. Przykład: metoda Huffmana – Kompresja stratna. Przykład: JPEG
Sposoby kodowania obrazu
• Grafika rastrowa
• Grafika wektorowa
2010 2015 2020
Liczba godzin nagrań wideo przesyłanych na YouTube na minutę
2007 2010 2013 2019
Liczba godzin
Kompresja danych - fizyczna
Dysk IBM Model 350, 5 MB, 1956
Dysk twardy, 250 MB, 1979
Pamięć typu „flash”, 32 GB, 2020
• Ogromne ilości danych w postaci cyfrowej produkowane każdego dnia
+
• Potrzeba efektywnych metod gromadzenia,
przechowywania i indeksowania, przeglądania i wymiany tych danych
kompresja
Kompresja – software’owa
Początki
• Pismo spółgłoskowe –
zapisywane tylko (!) spółgłoski (języki: arabski, aramejski,
fenicki, hebrajski, syriacki)
• W alfabecie Braile’a , 6 bitów (64 kombinacje, zapis liter, cyfr i znaków przestankowych)
- skrótowe kodowanie
najczęściej występujących krótkich słów
Kompresja
• Kompresja: zmiana sposobu zapisu danych prowadząca do zmniejszenia liczby bitów koniecznych do zapisu
– Kompresja bezstratna: z postaci skompresowanej można odtworzyć całkowitą informację wejściową. Polega na zastąpieniu powtarzających się sekwencji danych innymi, krótszymi sekwencjami.
– Kompresja stratna: z postaci skompresowanej nie można uzyskać wyjściowego zestawu danych. Polega na usunięciu (utracie) części informacji, a następnie zastosowaniu
kompresji bezstratnej.
Kompresja
Współczynnik kompresji = |x| / |y|, gdzie |x| to długość x
Kompresja bezstratna, gdy x = x’
Pozwala odtworzyć oryginalną zawartość danych
Kompresja stratna, gdy x ≠ x’
nieodwracalna! Nie jest możliwe odzyskanie danych w oryginalnej postaci.
Koder Dekoder
x y x’
dane
przed kompresją
dane
skompresowane
dane
po dekompresji
Wydajność kompresji
• Miary wydajności kompresji
– Ile bitów po kompresji na bajt przed kompresją
• 8 bitów/ bajt brak kompresji
• 2 bity / bajt ¼ oryginalnego rozmiaru (czyli współczynnik kompresji)
– Miara procentowa, czyli stopień kompresji
Kompresja 75% ¼ oryginalnego rozmiaru
Kompresja możliwa dzięki
• Powtarzalności elementów danych
– Metody słownikowe – Metody statystyczne
• Zaniedbaniu niektórych informacji dzięki wykorzystaniu efektów związanych z cechami ludzkiej percepcji
– Wrażliwość ludzkiego ucha niska w niektórych obszarach częstości
– Ludzkie oko „uśrednia” obraz
Kompresja bezstratna
• Zastosowania: teksty, kod programu (wykonywalny); ostatni etap w kompresji stratnej
• Najprostsza metoda to tzw. kodowanie długości serii (ang. Run Length Encoding, RLE):
– sekwencja oryginalna: aaaabbbbbb – bajtów: 10 x 1= 10
– sekwencja skompresowana: 4a6b – bajtów: 4 x 1 = 4
– stopień kompresji: 1- 4/10 = 60%
• Metody słownikowe – poszukiwanie dokładnych wystąpień danego ciągu znaków odpowiadających np. słowom i zastępowanie ich mniejszą liczbą bitów niż jest potrzebna na zakodowanie niezwiązanych znaków tworzących słowo.
Kompresja bezstratna
• Metody statystyczne: im częściej występuje dany znak, tym mniejszej liczby bitów używa się do jego zapisu
• Przykład metody statystycznej - kodowanie Huffmana
Kodowanie Huffmana
Założenia:
• Kodowanie różnych symboli bitami o różnym rozmiarze
• Wykorzystanie statystycznego rozkładu występowania symboli
• Metoda wydajna, gdy prawdopodobieństwo wystąpienia różnych symboli jest różne
• Mniejsza liczba bitów do reprezentacji częstych symboli
• Większa liczba bitów do reprezentowania rzadkich symboli
A A B A
A A B A
Wg. www.ubc.ca / huffman.ppt
Kodowanie Huffmana - przykład
• Spodziewany rozmiar kompresji
– Oryginalnie 1/82 + 1/42 + 1/22 + 1/82 = średnio 2 bity / symbol
– Kod. Huffmana 1/83 + 1/42 + 1/21 + 1/83 = średnio 1.75 bitu / symbol
Symbol A B C D
Częstość 13% 25% 50% 12%
Oryginalny Zapis
00 01 10 11
2 bity 2 bity 2 bity 2 bity Kodowanie
Huffmana
110 10 0 111
3 bity 2 bity 1 bit 3 bity
Procedura
o Obliczanie częstotliwości występowania symboli w pliku o Tworzenie tzw. drzewa binarnego reprezentującego
"najlepsze" kodowanie
o Użycie drzewa binarnego do zakodowania (=
wytworzenia) skompresowanego pliku
o Dla każdego symbolu, określenie tzw. ścieżki od korzenia do liścia
o Rozmiar kodowania = długość ścieżki
o Zapis drzewa binarnego
Kodowanie Huffmana - algorytm
Huffman Code – Creating Tree
• Algorithm
– Place each symbol in leaf
• Weight of leaf = symbol frequency
– Select two trees L and R (initially leafs)
• Such that L, R have lowest frequencies in tree
– Create new (internal) node
• Left child L
• Right child R
• New frequency frequency( L ) + frequency( R )
– Repeat until all nodes merged into one tree
Huffman Code Data Structures – Example 1
• Binary (Huffman) tree
– Represents Huffman code – Edge code (0 or 1)
– Leaf symbol
– Path to leaf encoding – Example
• A = „110”, B = „10”, C = „0”, D =„111”
• Priority queue
– To efficiently build binary tree
1
1 0
0 D
C B
A
0 1
Symbol A B C D Częstość 13% 25% 50% 12%
Huffman Tree Construction 1 – Example 2
3 5 8 2 7
A C E H I symbol
number of occurences
Huffman Tree Construction 2
3 2 5 8 7
5
A H C E I
Huffman Tree Construction 3
3
5
8 2
7
5
10 A
C
H E I
Huffman Tree Construction 4
3
5
8 2
7
5
10
15 A
C
H E I
Huffman Tree Construction 5
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
E = 01
I = 00
C = 10
A = 111
H = 110
Huffman Coding Example
• Huffman code
Example:
• Input
– ACE
• Output
– (111)(10)(01) = 1111001
E = 01
I = 00
C = 10
A = 111
H = 110
Huffman Code Algorithm - decoding
– Read compressed file & binary tree – Use binary tree to decode file
• Follow path from root to leaf
Huffman Decoding 1
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
1 111001
Huffman Decoding 2
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
11 11001
Huffman Decoding 3
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
111 1001
A
Huffman Decoding 4
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
111 1001
A
Huffman Decoding 5
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
111 1001
AC
Huffman Decoding 6
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
1111001
AC
Huffman Decoding 7
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
1111001
ACE
Huffman Decoding 7
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
1111001
ACE
1100110111
Huffman Decoding 7
3
5 8
2
5 7
10 15
25 1
1 1
1
0
0 0
0 A
C E
H
I
1111001
ACE
1100110111
HECA
Konwersja stratna – algortym kompresji JPEG
CPU
Podział na bloki 8 x 8 Konwersja koloru
DCT
Kwantyzacja Zigzag reordering
Kodowanie Obraz
Obraz.jpg
Działanie algorytmu JPEG
Działanie algorytmu JPEG
Podział na bloki 8 x 8 pikseli
Przykładowy blok 8 x 8 pikseli
Działanie algorytmu JPEG
RGB Działanie algorytmu JPEG - konwersja koloru s. YCC
Y = Jasność
Cb = Zawartość niebieskiego Cr = Zawartość czerwonego
• Dla ludzkiego oka ważniejsza jest precyzja
konturów (= kontrast jasności) niż precyzja kolorów
• Konwersja przestrzeni kolorów:
[R,G,B] dla piksela -> [Y, Cb, Cr] dla piksela
Convert RGB to YCC
8x8 pikseli
1 piksel = 3 kolory (R,G,B)
Próbkowanie = (1,1,1)
Y – luminancja
Cb – różnica między luminancją a niebieskim (Y-B) Cr – różnica między luminancją a czerwonym (Y-R)
Y' w [0,1]
Cb w [-0.5, 0.5]
Cr w [-0.5, 0.5]
R', G', B' w [0, 1]
Cr Cr
Cr Cr
Cb Cb
Cb Cb
Y Y
Y Y
Cb
Cr
Obniżenie rozmiaru (downsampling)
Y wciąż określane dla każdego piksela, ale Cb i Cr dla bloku pikseli 2 x 2
Y Y
Y Y Rozmiar danych
zmniejsza się dwukrotnie
Procedura DCT (discrete cosine transform)
G(k) - transformata
Procedura DCT (discrete cosine transform)
Przesunięcie od [0, 255]
do [-128, 127]
Wynik DCT
Znaczenie każdej pozycji
w macierzy DCT
Kwantyzacja
Wynik DCT
Macierz kwantyzacji dobierana w zależności od oczekiwanego stopnia kompresji
Wynik kwantyzacji
Oryginał Po usunięciu wysokich częstości Po usunięciu niskich częstości
Zigzag reordering lub kompresja RLE (Run Length Encoding)
197 10 0 0 23 5 0 0 9 0 0 0 0 0 0 0
RLE dałoby : 197 10 0 0 23 5 0 0 9 EOB
0 1 5 6 2 4 7 12 3 8 11 13 9 10 14 15 Po przekształceniu typu zygzag:
197 10 23 9 5 EOB RLE daje:
Przykładowa macierz
Zigzag reordering lub kompresja RLE (Run Length Encoding)
197 10 0 0 23 5 0 0 9 0 0 0 0 0 0 0
RLE dałoby : 197 10 0 0 23 5 0 0 9 EOB
0 1 5 6 2 4 7 12 3 8 11 13 9 10 14 15 Po przekształceniu typu zygzag:
197 10 23 9 5 EOB RLE daje:
Przykładowa macierz
Kolejność odczytywania
komórek
Grafika rastrowa – gdy obraz zapisywany w postaci macierzy punktów, reprezentujących kolory poszczególnych punktów obrazu.
Jakość wynikowego obrazu zależy od liczby punktów, na które podzielony jest cały obraz.
Grafika wektorowa (obiektowa) - gdy obraz zapisywany w postaci figur (brył) geometrycznych i ich umiejscowienia w przestrzeni.
Skalowalna - dowolne powiększenie obrazu nie powoduje efektów rozmycia.
Kodowanie obrazu
Podstawowe formaty plików graficznych:
obraz wektorowy obraz rastrowy
Raster vs wektor
Grafika Rastrowa Wektorowa
Głębokość detali duża mała
Rozmiar pliku duży mały
Precyzja edycji duża mała
Edytowalność nie tak
Skalowanie brak pełne
Efekty (np. cień) tak nie
Formaty graficzne
Grafika rastrowa – formaty stratne:
JPEG (Joint Photographic Experts Group) najpopularniejszy format plików graficznych z kompresją stratną
TIFF (Tagged Image File Format) - popularny format plików graficznych udostępniający wiele rodzajów kompresji
Grafika rastrowa – formaty bezstratne:
PNG (Portable Network Graphics) GIF (Graphics Interchange Format)
BMP (BitMap) oraz TIFF (bez kompresji) Grafika Wektorowa
SVG (Scalable Vector Graphics) - format oparty na języku XML;
promowany jako standard grafiki wektorowej
Macromedia Flash – były, najpopularniejszy format grafiki wektorowej Adobe Animate
PS i EPS – PostScript i Encapsulated PS - uniwersalny format, będący obecnie standardem w zastosowaniach poligraficznych PDF - Portable Document Format
Czy zawsze więcej pikseli znaczy lepiej?
PPI (Pixels Per Inch) - liczba pikseli na cal długości wyświetlacza.
Model telefonu Prod. d w x h rozdzielczość PPI
Sony Xperia Z5 Premium 2015 5.5″ 12.93 square inches
(4.8″x2.7″) 3840×2160, UHD-1 801.06 Samsung Galaxy S6 2015 5.1″ 11.11 square inches
(4.4″x2.5″) 2560×1440, QHD 575.92 Apple iPhone X 2017 5.8″ 12.8 square inches
(5.3″x2.4″) 2436×1125 462.63 Apple iPhone 4 2010 3.5″ 5.65 square inches
(1.9″x2.9″) 640×960 329.65
Rozdzielczość ekranów a zdolność rozdzielcza ludzkiego oka
Im wyższa wartość PPI, tym lepiej, aż do
osiągnięcia zdolności rozdzieczej ludzkiego oka
w h
w, h - liczby pikseli w dwóch kierunkach ekranu d – przekątna w calach