1 / 28

Kompresní algoritmy

Kompresní algoritmy. Opakování. Co je to kódování? Jaký je rozdíl oproti šifrování? Jak pracuje Shanon-Fanovo kódování? Jak pracuje Huffmanovo kódování?. Problém komprese. Balení věcí do skříně nebo batohu Úspora úložného prostoru Zjednodušení transportu

mari
Download Presentation

Kompresní algoritmy

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. Kompresní algoritmy

  2. Opakování • Co je to kódování? Jaký je rozdíl oproti šifrování? • Jak pracuje Shanon-Fanovo kódování? • Jak pracuje Huffmanovo kódování?

  3. Problém komprese • Balení věcí do skříně nebo batohu • Úspora úložného prostoru • Zjednodušení transportu • Nezáleží na kapacitě, problém nedostatku místa nakonec vždycky přijde

  4. Komprese dat • Komprese a komprimace jsou synonyma • Kompresní algoritmus transformuje řetězec S1 délky d1 na řetězec S2 délky d2 • Požadujeme, aby: • d2<d1 • I(S1) = I(S2), kde I je informační hodnota • Jak to udělat?

  5. Jak to udělat? • Základní myšlenka: Vyhledáme nadbytečné informace, které vypustíme. • Viz teorie informace z minulé přednášky • Příklad: qu v angličtině • Jiná myšlenka: Vypustíme nějaké informace tak, “aby to nebylo poznat“. • Text lze komprimovat 1:2, obrázky 1:50, video až 1:1000

  6. Vlastnosti kompresních algoritmů • Ztrátovost / bezeztrátovost komprese • Kompresní poměr k = d2/d1 (k<=1) • někdy udáván v procentech • kompresní zisk: z = 1 – k • Metody lze rozdělit na: • statické x adaptivní • symetrické x asymetrické • proudové x blokové

  7. Historie kódování a komprese • 1820 Braillovo písmo • pole 3x2 bodů • písmena, slova • 1838 Morseovaabeceda • Samuel Morse • kódování protelegraf

  8. Historie kódování a komprese • 1800 Baudotův kód • 5bitový kód pro telegraf • písmena, znaky • přepínač LTRS/FIGS • Dvacáté století • s rozvojem IT jde i rozvoj kompresních algoritmů • Huffmann, Shannon, Lempel, Ziv, Welch

  9. Jednoduché kompresní metody • Komprese slovníku • opakující se písmena nahradíme číslem vyjadřující jejich počet • 54 zn.  44 zn. • Jaký je kompresní poměr a zisk?

  10. Metoda potlačení nul • Jedna z nejstarších, v kombinaci s jinými dodnes používaná • V souboru se vyskytují sekvence stejných znaků (mezery) • Sekvenci nahradíme indikátorem a číslem • Dekomprese: načteme-li indikátor, přečteme číslo a vypíšeme příslušný počet nul • Efektivní až při sekvenci tří nul • Posunutá stupnice => při 8bitovém kódování 258 až nul v jednom znaku

  11. Metoda potlačení nul – příklad • Vstupní text: AB---CAB----B-A-------CB • Výstupní text: ABI0CABI1B-AI4CB • Řetězec 24B zkomprimován na 16B • Dekomprese: Při načtení I přečteme číslo (x) a vypíšeme x+3 nul • I se nesmí vyskytovat v textu

  12. Metoda bitové mapy • Potlačení výskytu často opakovaného znaku (nuly) • Ke každé osmiznakové sekvenci vytvoříme bitovou mapu výskytu nul • Ukládáme vždy bitovou mapu a sekvenci nenulových znaků • V souboru musí být alespoň 1/8 nul

  13. Metoda bitové mapy – příklad • Vstupní text: AB-CA--C • Bitová mapa:11011001 • Výstupní text: <11011001>ABCAC • Řetězec 8B zkomprimován na 6B • Při dekompresi se doplňují nuly podle bitové mapy, ostatní znaky podle textu

  14. Proudové kódování – RLE • Run Length Encoding (kódování délkami sekvencí) • Vylepšení metody potlačení nul • Označme an posloupnost znaku a délky n • Každou posloupnost an nahradíme sekvencí Ian • Příklad • Vstupní text: abbbbcccaaaaaaaabbbb • Výstupní text: aIb4cccIa8Ib4 • Řetězec 20B zkomprimován na 13B • Efektivní pro n>3

  15. RLE s posunutou stupnicí • Náhradu sekvence an provádíme jen při n>3 • Na výstup umístíme Ia(n-3) • V 1B až 258 opakování (místo 255) • Příklad • Vstupní text: abbbbcccaaaaaaaabbbb • Výstupní text: aIb1cccIa5Ib1 • Řetězec 20B zkomprimován na 13B

  16. RLE bez indikátoru komprese • Znak I se nesmí vyskytovat v textu – nevýhoda • Každou sekvenci an pro n>=3 nahradíme sekvencí aaa(n-3) • Dekomprese: Při načtení trojice stejných znaků načteme číslo – počet zbývajících znaků • Nepotřebujeme indikátor komprese • Při n=3 dochází k expanzi!!! aaa0

  17. Využití algoritmu RLE • V grafických a zvukových souborech s malými změnami • malá barevná hloubka, jednoduchá kresba • záznam hlasu • Hlavní algoritmus: *.PCX • Pomocný algoritmus: *.JPG • Faxy • většina faxu je bílá, ojediněle černý bod

  18. Kódování delta • U některých typů dat nastává lineární růst (pokles) • hudba, animace • První byte uložíme tak, jak je • Každý další byte je kódován jako rozdíl (delta) oproti předcházejícímu bytu • Příklad • Vstupní soubor: 10 12 14 16 15 22 32 • Delta kódování: 10 2 2 2 -1 7 10

  19. Kódování delta – použití • Sekvence stejných znaků jsou nahrazeny sekvencemi nul • Kromě toho získáme nové sekvence stejných znaků • následné kódování RLE má větší efekt • Použití zejména v audioformátech

  20. Algoritmus LZW84 • Lempel – Ziv – Welch • Vylepšení LZ78 (Lempel – Ziv 1978) • Slovníkový algoritmus pro bezeztrátovou kompresi • Použitý ve formátech GIF, TIFF a PDF • Do roku 2004 chráněn patentem • Dnes již překonaný • Čím delší text, tím lepší kompresní poměr

  21. Vývoj algoritmu LZW84 • LZ77 • Používá klouzavé okno, v něm hledá opakující se sekvence • Vstup: Leze leze po železe • Výstup: Leze l[2,3] po že[5,4] • LZ78 • Místo klouzavého okna tvoří vlastní slovník • Slovník narůstá a je třeba jej vyprazdňovat

  22. LZW komprese forall c do add c to dictionary w = ‘’ while read(c) do if wc is in dictionary then w = wc else add wc to dictionary write code(w) w = c endif done

  23. LZW dekomprese read(k) write(dictionary_entry(k)) w = k while read(k) do if k is in dictionary then entry = dictionary_entry(k) else entry = w + w[0] endif write(entry) add w+entry[0] to dictionary w = entry done

  24. Předpřipravení dat pro kompresi • Úkolem těchto algoritmů je modifikovat data tak, aby měla následná komprese lepší poměr • typicky se jedná o vhodnou reverzibilní permutaci • Burrows-Wheelerova transformace • Move-to-front transformace

  25. Burrows-Wheelerova transformace • Příprava textu pro RLE • Výsledný text má stejnou délku • plus znak začátku a konce • ale lépe se komprimuje • Algoritmus transformace: • přidej k textu znak začátku a konce • vytvoř tabulku všech posuvů daného textu • seřaď řádky podle abecedy • na výstup zapiš poslední sloupec

  26. Burrows-Wheelerova transformace • Zpětná transformace • opakuj tolikrát, kolik je znaků ve vstupním textu • vezmi aktuální tabulku a před první sloupec vepiš vstupní text • seřaď řádky aktuální tabulky podle abecedy • výsledkem je původní tabulka • vezmi řádek začínající znakem začátku řádku

  27. Move-to-front transformace • Příprava textu tak, aby častější symboly byly kódovány nižšími čísly • Proudové zpracování • Algoritmus transformace • Začínáme se seřazenou abecedou (tabulkou) • Zapíšeme index symbolu na vstupu • V tabulce indexů právě použitý symbol přesuneme na začátek • Kódování je reverzibilní • zpětná transformace probíhá stejně

  28. Další algoritmy • PPM (Prediction by Partial Matching) • adaptivní statistická metoda • předpověď následujících dat na základě předchozích • CM (Context Mixing) • kombinace více statistických metod

More Related