1 / 23

Materiały pochodzą z Platformy Edukacyjnej Portalu szkolnictwo.pl

Materiały pochodzą z Platformy Edukacyjnej Portalu www.szkolnictwo.pl.

jaimie
Télécharger la présentation

Materiały pochodzą z Platformy Edukacyjnej Portalu szkolnictwo.pl

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Materiały pochodzą z Platformy Edukacyjnej Portalu www.szkolnictwo.pl Wszelkie treści i zasoby edukacyjne publikowane na łamach Portalu www.szkolnictwo.pl mogą być wykorzystywane przez jego Użytkowników wyłącznie w zakresie własnego użytku osobistego oraz do użytku w szkołach podczas zajęć dydaktycznych. Kopiowanie, wprowadzanie zmian, przesyłanie, publiczne odtwarzanie i wszelkie wykorzystywanie tych treści do celów komercyjnych jest niedozwolone. Plik można dowolnie modernizować na potrzeby własne oraz do wykorzystania w szkołach podczas zajęć dydaktycznych.

  2. Kodowanie Huffmana, kodowanie arytmetyczne Algorytmy kompresji

  3. Kodowanie arytmetyczne • Kodowanie arytmetyczne to metoda kodowania źródłowego dyskretnych źródeł sygnałów, stosowana jako jeden z systemów w bezstratnej kompresji danych. Została wynaleziona przez amerykańskiego profesora Petera Eliasa około 1960 roku. • Ideą tego kodu jest przedstawienie ciągu wiadomości jako podprzedziału przedziału jednostkowego P – [0,1) wyznaczonego rekursywnie na podstawie prawdopodobieństw wystąpienia tych wiadomości generowanych przez źródło. • Ciąg kodowy reprezentujący kodowane wiadomości jest binarnym zapisem wartości z wyznaczonego w ten sposób przedziału. Peter Elias 1923-2001

  4. Kodowanie arytmetyczne • Pojedyncze słowo kodowe jest przyporządkowane każdemu możliwemu zbiorowi wiadomości ze źródła. • Każde słowo kodowe może być traktowane jako jednostronnie domknięty podprzedział przedziału [0,1). • Poprzez przypisanie każdemu słowu kodowemu wystarczająco dużo znaczących bitów, można odróżnić jeden podprzedział od innego i w ten sposób zdekodować ciąg bitów, przypisując mu zbiór wiadomości wygenerowanych przez źródło.

  5. Algorytm kodowania Dany jest zbiór symboli S – {x1, x2, …} oraz stowarzyszony z nim zbiór prawdopodobieństw p – {p1, p2, …}. Jeden z symboli jest wyróżniony - jego wystąpienie oznacza koniec komunikatu, zapobiegając wystąpieniu niejednoznaczności; ewentualnie zamiast wprowadzenia dodatkowego symbolu można przesyłać długość kodowanego ciągu. Na początku dany jest przedział P – [0,1), który dzielony jest na podprzedziały o szerokościach równych kolejnym prawdopodobieństwom pi. Kolejnym podprzedziałom (ozn. Ri) odpowiadają symbole ze zbioru. Algorytm kodowania: • dla kolejnych symboli xi • określamy, który podprzedział bieżącego przedziału odpowiada danej literze xi - wynikiem jest Ri • bierzemy nowy przedział P:= Ri – następuje zawężenie przedziału • dzielimy ten przedział na podprzedziały tak aby zostały zachowane proporcje szerokości podprzedziałów • zostaje zwrócona liczba jednoznacznie wskazującą przedział (najczęściej dolne ograniczenie, albo średnia dolnego i górnego ograniczenia).

  6. Kodowanie arytmetyczne – przykład 1 Rozważmy kodowanie zbioru wiadomości: AADB@

  7. Kodowanie arytmetyczne – przykład 1 cd. Kodujemy A i otrzymujemy przedział [0.0; 0.2) Drugą liczbę A kodujemy i otrzymujemy przedział [0.0; 0.04) Kodujemy D i otrzymujemy przedział [0.028; 0.036) Kodujemy B i otrzymujemy przedział [0.0296; 0.0328) Kodujemy @ i otrzymujemy przedział [0.03248; 0.0328) Przedział lub dowolna liczba z niego reprezentuje kodowany zbiór wiadomości • dla ustalonej długości tekstu n, każdy ciąg jest odwzorowany na przedział rozłączny z przedziałami odpowiadającymi innym ciągom. Gwarantuje to jednoznaczność kodowania • wygenerowanie znacznika dla konkretnego ciągu nie wymaga wyznaczania bądź pamiętania znaczników innych ciągów • nadajemy dowolną liczbę z ostatniego zawężonego zakresu • żeby można było otrzymać zakodowane wiadomości, dekoder musi znać model źródła i nadaną liczbę

  8. Dekodowanie arytmetyczne – przykład 1 cd. • Dekodowanie składa się z serii porównań odebranej liczby z zakresami reprezentującymi wiadomości ze źródła • W prezentowanym przykładzie liczba ta może wynosić np. 0.03248, 0.0325 lub 0.0327. Ponieważ należy ona do przedziału [0.0; 0.2) dekoder rozpoznaje pierwszą wiadomość jakoA, co zawęża przedział do [0.0; 0.2). • Dekoder jest w stanie wywnioskować, że następna wiadomość zawęzi przedział na jeden z możliwych sposobów: do [0.0; 0.04) dlaA, do [0.04; 0.12) dlaB, do [0.12; 0.14) dlaC, do [0.14; 0.18) dla D i [0.18; 0.2) dla@. • Ponieważ odebrana liczba mieści się w przedziale [0.0; 0.04), zatem podejmuje decyzję, że następna nadana wiadomość toA. • Procedura kontynuowana jest aż do określenia wszystkich wiadomości w nadanym zbiorze.

  9. Wady kodowania arytmetycznego • dekoder musi wiedzieć, kiedy zakończyć proces. Są możliwe dwa rozwiązania • zakończenie wiadomością „stop” (@ w przykładzie) – to rozwiązanie jest najbardziej preferowane • koder musi przesłać liczebność zbioru kodowanych wiadomości • w praktycznej realizacji kodera i dekodera niezbędna jest precyzja i złożoność wykonywanych operacji • podczas kodowania są ograniczone pojemności rejestrów (możliwe jest przepełnienie) • występują błędy w dekodowaniu

  10. Zastosowanie kodowania arytmetycznego Kodowanie arytmetyczne najczęściej wykorzystywane jest w formatach: • JBIG • JPEG / MPEG • JPEG-2000 • H.263 • H.26L • PPM • DMM

  11. Kodowanie arytmetyczne – przykład 2 Rozważmy kodowanie zbioru wiadomości: bac Dla każdego znaku komunikatu przypisujemy podprzedział przedziału [0,1). Dla każdego komunikatu przedział ten nazywa się przedziałem komunikatu

  12. Kodowanie arytmetyczne – przykład 2 cd. Kodujemy komunikat: bac Wynikowy przedział to [0,27; 0,3)

  13. Dekodowanie arytmetyczne – przykład 3 Dekodujemy liczbę 0.49, znamy początkowe przedziały i długość komunikatu 3: Wynikowy komunikat to bbc

  14. Algorytm kodowania Huffmana Kodowanie Huffmana to jedna z najprostszych i łatwych w implementacji metod kompresji bezstratnej. Została opracowana w 1952 roku przez Amerykanina Davida Huffmana. Algorytm Huffmana jest wykorzystywany w wielu profesjonalnych metodach kompresji tekstu, obrazów i dźwięków, również w połączeniu z innymi metodami. Redukcja wielkości danych przy stosowaniu tego algorytmu wynosi ok 50 %. W przypadku obrazów i dźwięków kodowane są nie same znaki np. piksele, ale również miejsca między kolejnymi znakami. David Huffman 1925-1999

  15. Cechy algorytmu Huffmana • generuje kod zero-jedynkowy • kod każdego znaku nie jest początkowym fragmentem kodu innego znaku • generowany kod jest kodem prefix-free (0, 1), który pozwala na jednoznaczne dekodowanie • jest tworzony tak, aby średnia długość kodu znaku była możliwie najkrótsza – w tym celu wykorzystuje się informację o częstości występowania znaku w tekście. W celu wykorzystania algorytmu Huffmana musimy zbudować jego reprezentację w postaci drzewa. Charakterystycznymi cechami drzewa są: • oznaczenia drzewa 0 i 1 • znaki dla których tworzymy kod znajdują się w liściach drzewa 0 1 a 0 1 c g

  16. Algorytm Huffmana przykład Prześledźmy teraz działanie algorytmu Huffmana na przykładzie sześciu wybranych liter. W kółkach mamy częstotliwość występowania w języku polskim napisanej niżej litery. 8,71 1,29 3,45 3,10 7,90 4,63 W celu zbudowania drzewa Huffmana ze zbioru usuwamy dwie najmniejsze częstotliwości czyli w naszym przypadku 1,29 i 3,10. Na ich miejsce wstawiamy ich sumę 1,29 + 3,10 = 4,39 i podczepiamy wierzchołki z usuniętymi częstotliwościami pod nowy wierzchołek. 4,39 8,71 3,45 1,29 3,10 7,90 4,63

  17. Algorytm Huffmana przykład 7,84 Ponownie ze zbioru usuwamy dwie najmniejsze częstotliwości czyli 3,45 i 4,39. Łączymy je i otrzymujemy. 3,45 4,39 D 8,71 1,29 3,10 7,90 4,63 12,47 7,84 4,63 R Następnym krokiem jest dodanie do siebie 4,63 i 7,83 po czym otrzymujemy: 3,45 4,39 D 8,71 1,29 3,10 7,90

  18. Algorytm Huffmana przykład Kolejne dwie najmniejsze częstotliwości to 7,90 i 8,71, po czym otrzymaliśmy 2 drzewa: 12,47 7,84 4,63 R 16,61 3,45 4,39 D 8,71 7,90 1,29 3,10

  19. Algorytm Huffmana przykład Na końcu dodajemy dwie ostatnie częstotliwości – 13,47 i 16,61. Ostatecznie otrzymujemy jedno drzewo. 16,61 12,47 7,84 4,63 8,71 7,90 R 3,45 4,39 D 1,29 3,10

  20. Algorytm Huffmana przykład Po otrzymaniu jednego drzewa należy każde rozgałęzienie odpowiednio oznaczyć 0 lub 1. Każdą lewą gałąź 0, a prawą 1 (lub odwrotnie). 1 0 16,61 12,47 0 0 1 1 7,84 4,63 8,71 7,90 0 1 R 3,45 4,39 0 1 D 1,29 3,10

  21. Algorytm Huffmana przykład – kodowanie, dekodowanie Posiadając tabelę możemy łatwo zakodować dowolne kombinacje liter (wyrazy). Np.: W analogiczny sposób dokonujemy dekodowania zakodowanego ciągu znaków, np.: 10110111101000. Dzięki temu, że kod jest prefiksowy łatwo można podzielić ten ciąg 0 i 1 na odpowiednie kody liter : Odkodujmy ciąg znaków: 1011001000010101100

  22. Kodowanie Huffmana podsumowanie • kodowanie Huffmana stanowi kanon kompresji • jest adaptowane dla każdego tekstu • długości ciągów kodowych dobierane są do statystyki źródła wiadomości • kodowanie opiera sie o częstość występowania znaków • wykorzystywane w: • kodowaniu faksów • standardzie kompresji: • JPEG • MPEG-1 • MPEG-2

  23. Bibliografia • Drozdek A.: Wprowadzenie do kompresji danych, WNT 1999 • K. Sayood , Kompresja danych. Wprowadzenie, 1. READ ME, Warszawa, 2002 • W. Skarbek, Multimedia . Algorytmy i standardy kompresji, Akademicka Oficyna Wydawnicza PLJ, Warszawa, 1998 • P. Wróblewski : Algorytmy, struktury danych i techniki programowania, Helion, Gliwice 2001 • http://pl.wikipedia.org/wiki/ • http://en.wikipedia.org/wiki/ • http://www.ucsc.edu/currents/99-00/10-18/inmemoriam.html

More Related