Def. Kod jednoznacznie definiowalny Def. Kod przedrostkowy Def. Kod optymalny. Przykłady kodów. Kody optymalne

Podobne dokumenty
Kodowanie Huffmana. Platforma programistyczna.net; materiały do laboratorium 2014/15 Marcin Wilczewski

Temat: Algorytm kompresji plików metodą Huffmana

Wstęp Statyczne kody Huffmana Dynamiczne kody Huffmana Praktyka. Kodowanie Huffmana. Dawid Duda. 4 marca 2004

ZADANIE 1. Rozwiązanie:

Kompresja bezstratna. Entropia. Kod Huffmana

0-0000, , , itd

Nierówność Krafta-McMillana, Kodowanie Huffmana

Kompresja danych kodowanie Huffmana. Dariusz Sobczuk

Teoria Informacji - wykład. Kodowanie wiadomości

Definicja. Jeśli. wtedy

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Algorytmy i struktury danych. wykład 8

Algorytmy zachłanne. dr inż. Urszula Gałązka

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 9,

teoria informacji Entropia, informacja, kodowanie Mariusz Różycki 24 sierpnia 2015

Przetwarzanie i transmisja danych multimedialnych. Wykład 3 Kodowanie Shannona Fano i Huffmana. Przemysław Sękalski.

Kody splotowe. Zastosowanie

Kompresja Kodowanie arytmetyczne. Dariusz Sobczuk

Kodowanie informacji

Teoria informacji i kodowania Ćwiczenia

mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 4, strona 1. GOLOMBA I RICE'A

KODY SYMBOLI. Materiały KODA, A.Przelaskowski. Koncepcja przedziałów nieskończonego alfabetu

Złożoność obliczeniowa zadania, zestaw 2

Granica kompresji Kodowanie Shannona Kodowanie Huffmana Kodowanie ciągów Kodowanie arytmetyczne. Kody. Marek Śmieja. Teoria informacji 1 / 35

0 + 0 = 0, = 1, = 1, = 0.

Kody Huffmana. Konrad Wypyski. 11 lutego 2006 roku

Python: JPEG. Zadanie. 1. Wczytanie obrazka

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

pobieramy pierwszą literę komunikatu i wypełniamy nią (wszystkie pozycje tą samą literą) bufor słownikowy.

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Założenia i obszar zastosowań. JPEG - algorytm kodowania obrazu. Geneza algorytmu KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

EGZAMIN MATURALNY Z INFORMATYKI

Algorytmy kompresji. Kodowanie Huffmana, kodowanie arytmetyczne

Algorytmy kodowania entropijnego

Kodowanie i entropia

Niech x 1,..., x n będzie ciągiem zdarzeń. ---

Kodowanie transformacyjne. Plan 1. Zasada 2. Rodzaje transformacji 3. Standard JPEG

Przetwarzanie i transmisja danych multimedialnych. Wykład 5 Kodowanie słownikowe. Przemysław Sękalski.

Kodowanie Shannona-Fano

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 11,

Entropia Kodowanie. Podstawy kompresji. Algorytmy kompresji danych. Sebastian Deorowicz

Teoria informacji i kodowania Ćwiczenia Sem. zimowy 2016/2017

Teoria informacji i kodowania Ćwiczenia Sem. zimowy 2016/2017

Elementy teorii informacji i kodowania

Joint Photographic Experts Group

Algorytmy i struktury danych

Maszyna Turinga języki

Temat 7. Dekodery, enkodery

Podstawy kompresji danych

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Techniki multimedialne

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Konkursy w województwie podkarpackim w roku szkolnym 2016/2017

Podstawowe pojęcia. Teoria informacji

Krzysztof Leszczyński Adam Sosnowski Michał Winiarski. Projekt UCYF

1.1. Pozycyjne systemy liczbowe

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Matematyka dyskretna - 7.Drzewa

Wybrane metody kompresji obrazów

Kodowanie informacji. Kody liczbowe

AKD Metody słownikowe

Kodowanie i kompresja Tomasz Jurdziński Studia Wieczorowe Wykład Kody liniowe - kodowanie w oparciu o macierz parzystości

Wstęp do Programowania potok funkcyjny

Architektura komputerów

Wygra Polska czy Brazylia, czyli o tym jak zwięźle zapisywać informacje

Edytor tekstu MS Word 2010 PL. Edytor tekstu MS Word 2010 PL umożliwia wykonywanie działań matematycznych.

Kody Tunstalla. Kodowanie arytmetyczne

Hierarchia Chomsky ego Maszyna Turinga

Ćwiczenie nr 4: Kodowanie arytmetyczne, range coder

teoria informacji Kanały komunikacyjne, kody korygujące Mariusz Różycki 25 sierpnia 2015

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

Systemy liczenia. 333= 3*100+3*10+3*1

KOMPRESJA OBRAZÓW STATYCZNYCH - ALGORYTM JPEG

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Języki formalne i automaty Ćwiczenia 4

Algorytmy i Struktury Danych

ARCHITEKTURA KOMPUTERÓW Liczby zmiennoprzecinkowe

Podstawy Automatyki. Wykład 9 - Podstawy matematyczne automatyki procesów dyskretnych. dr inż. Jakub Możaryn. Instytut Automatyki i Robotyki

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Laboratorium ochrony danych

Podstawy Informatyki

Bramki logiczne Instrukcja do ćwiczeń laboratoryjnych

7a. Teoria drzew - kodowanie i dekodowanie

Detekcja i korekcja błędów w transmisji cyfrowej

Instrukcje dla zawodników

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Modulacja i kodowanie. Labolatorium. Kodowanie źródłowe Kod Huffman a

Kodowanie informacji

1. Operacje logiczne A B A OR B

Kodowanie predykcyjne

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Algorytmy i struktury danych

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Sieci neuronowe - projekt

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Pracownia Komputerowa wyk ad VII

Kompresja obrazów w statycznych - algorytm JPEG

Kodowanie i kompresja Streszczenie Studia dzienne Wykład 12,

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Transkrypt:

Załóżmy, że mamy źródło S, które generuje symbole ze zbioru S={x, x 2,..., x N } z prawdopodobieństwem P={p, p 2,..., p N }, symbolom tym odpowiadają kody P={c, c 2,..., c N }. fektywność danego sposobu kodowania można określić jako ef. Kod jednoznacznie definiowalny ef. Kod przedrostkowy ef. Kod optymalny Przykłady kodów L N = p c sr i i i= =? =? Kody optymalne Idea: symbole (litery) występujące częściej powinny otrzymać kody krótsze, a symbole występujące rzadziej dłuższe. lfabet Morse a (połowa XIX)

Kodowanie Huffmana lgorytm konstrukcji drzewa Huffmana. dla każdej litery utwórz reprezentujące ją drzewo - złożone tylko z jednego węzła (korzenia). W korzeniu tego drzewa umieść nazwę litery i prawdopodobieństwie jej wystąpienia. 2. znajdź dwa drzewa t i t 2 z najmniejszą wartością wskaźnika prawdopodobieństwa. 3. połącz te drzewa w jedno drzewo w korzeniu nowego drzewa wpisz sumę prawdopodobieństw p i p 2. Lewym poddrzewem nowego drzewa jest drzewo t, prawym t 2. Nadaj etykietę lewej gałęzi łączącej korzeń nowego drzewa z korzeniem drzewa t, nadaj etykietę prawej gałęzi łączącej korzeń nowego drzewa z korzeniem drzewa t 2. 4. jeśli istnieją przynajmniej dwa drzewa wróć do punktu 2. 5. w tym momencie istnieje tylko jedno drzewo, a wszystkie symbole umieszczone są w jego liściach. Utwórz kod dla każdego symbolu przechodząc z korzenia do liścia i łącząc etykiety gałęzi, po których przechodzisz. Przykład: ane są symbole i częstości ich wystąpień. Należy zaprojektować drzewo Huffmana i skonstruować kod....5.2.45.2.5.2.45.2.5.2.45.....2.35...5.2.45.35.2.5.2.45...2.55.35.45.55.35.2.45...5.2.2.5..

.2...55.5.35.2.45.2.55.35.5.2.45.. zaprojektowane słowa kodowe: Średnia długość kodu L śr = 3.+3.+3.5+3.2+.45 =2. zaprojektowane słowa kodowe: Średnia długość kodu L śr = 4.+4.+3.5+2.2+.45 =2. Rzecz ciekawa dwa różne drzewa dają taką samą średnią długość kodu! Przykład: kodowanie i dekodowanie: Zakodować ciąg danych używając kodu z lewej części powyższej tablicy Kod() =,,,, Przecinki postawiono tylko dla zwiększenia czytelności Zdekodować ciąg: Procedurę dekodowania rozpoczynamy od korzenia, czytamy pierwszy bit () i dochodzimy do liścia zawierającego symbol. zytamy drugi bit i znowu rozpoczynając od korzenia idziemy w prawo, potem trzeci bit prowadzi nas do liścia z symbolem, itd.

Implementacja tablicowa. utwórz tablicę o 2N- pozycjach, gdzie N jest liczbą symboli 2. znajdź dwa symbole s i i s j o najmniejszej wadze i zerowej wartości pola Link 3. w drugiej części tablicy w pierwszej wolnej komórce utwórz nowy symbol s ij i zapisz sumę wag symboli s i i s j. 4. w polu Link zapisz numer nowo utworzonego symbolu 5. w polu P symbolu s i wpisz, a w pole P symbolu s j wpisz. 6. jeśli są co najmniej dwa symbole z pustym polem Link wróć do punktu 2 7. rozpoczynając od symbolu (pozycje: :N) idziemy do korzenia (pozycja 2N-) korzystając z pola Link i zapisując wartości z pola P to daje ścieżkę od symbolu do korzenia. 8. utworzone ciągi zapisujemy w odwróconej kolejności otrzymując zapis ścieżki od korzenia do symbolu. Przykład: Stosując algorytm tablicowy konstrukcji drzewa Huffmana zbudować optymalny kod dla symboli występujących z częstością jak w poprzednim przykładzie. tap. Id 2 3 4 5 6 7 8 9 P...5.2.45 Link tap 2: symbole i 2, utworzono 6 Id 2 3 4 5 6 7 8 9 P.5.2.45.2 Link 6 6 tap 2: symbole 3 i 6, utworzono 7 Id 2 3 4 5 6 7 8 9 P.2.45.35 Link 6 6 7 7 tap 2: symbole 4 i 7, utworzono 8 Id 2 3 4 5 6 7 8 9 P.45.55 Link 6 6 7 8 7 8 tap 2: symbole 5 i 8, utworzono 9 koniec konstrukcji drzewa Id 2 3 4 5 6 7 8 9 P Link 6 6 7 8 9 7 8 9 Słowa kodu otrzymane w wyniku wykonania powyższego algorytmu Symbol Utworzony ciąg Kod

Szybki algorytm dekodowania (tablicowy) Tworzymy tablicę o rozmiarze 2 N, gdzie N jest długością najdłuższego kodu Huffmana. Z konstrukcji (przez drzewo H) wynika, że kod H jest kodem przedrostkowym, tzn. kod żadnego symbolu nie jest prefiksem kodu innego symbolu. Z tego faktu wynika możliwość szybkiego dekodowania przy użyciu odpowiednio wypełnionej tablicy: indeks wartość symbol długość 2 3 4 5 6 7 8 2 9 2 2 2 2 3 3 3 4 4 5 4 Symbol Kod Kod() = lgorytm budowy tablicy dekodera la każdego symbolu s i o kodzie c i o długości l i tworzymy 2 (N-li) liczb Idx(k), które traktujemy jako indeksy Idx(k) do tablicy T. Wartości tych indeksów wynoszą Idx(k)=(c i << (N-l i)) + k, k=: 2 (N-li) -, gdzie << oznacza bitowe przesunięcie w lewo (równoważnie: Idx(k)= 2 (N-li) c i + k, k=: 2 (N-li) -). W pierwszą kolumnę wiersza Idx(k) tablicy T wpisujemy nazwę symbolu (s i), a w drugiej kolumnie długość kodu tego symbolu (l i). W powyższym przykładzie N=4, dla symbolu o kodzie b otrzymujemy Idx(k) = b <<2 + k = b + k, k=:3, Idx()= b, Idx()= b, Idx(2)= b, Idx(2)= b, oraz T[ b, ]=, T[ b, 2]=2 T[ b, ]=, T[ b, 2]=2 T[ b, ]=, T[ b, 2]=2 T[ b, ]=, T[ b, 2]=2 Proces dekodowania polega na utrzymywaniu bufora zawierającego N bitów i traktowaniu go jako indeksu do tablicy. Po odczytaniu symbolu i jego długości przesuwamy zawartość bufora w lewo o tyle pozycji jak była odczytana długość kodu, na zwolnione miejsce wprowadzamy nowe bity ze strumienia wejściowego. Laboratorium. la źródła S generującego symbole z prawdopodobieństwem P = [.,.2,.7,.2,.4,.4,.7,.4,.49]; zaprojektować kod optymalny Huffmana stosując algorytm tablicowy. Sprawdzić, czy otrzymany kod jest kodem przedrostkowym. 2. la ciągu współczynników lena.cof uzyskanych w wyniku transformacji T i kwantyzacji obrazu lena.bmp wyznaczyć optymalny kod stosując metodę Huffmana. Następnie zakodować ten ciąg w formie binarnej. Przed przystąpieniem do projektowania kodu należy wyznaczyć częstotliwości występowania poszczególnych współczynników. Proponowaną metodą jest założenie tablicy hist w której będziemy zliczać liczbę wystąpień danego symbolu. Na początku tablica jest pusta, po znalezieniu symbolu nie należącego do tablicy należy go do niej wstawić. Przydatne funkcje Matlaba, to: dec2bin, bin2dec, bitand, bitor, bitshift, bitxor, bitget.