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 Nezáleží na kapacitě, problém nedostatku místa nakonec vždycky přijde
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?
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
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é
Historie kódování a komprese 1820 Braillovo písmo pole 3x2 bodů písmena, slova 1838 Morseova abeceda Samuel Morse kódování pro telegraf
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
Jednoduché kompresní metody Adam adaptace 3ptace adekvátní 2ekvátní adept 3pt admirál 2mirál afekt 1fekt aféra 2éra agenda 1genda agent 4t 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?
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
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
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
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
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
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
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
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
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
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
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
Vývoj algoritmu LZW84 LZ77 LZ78 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
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
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
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
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
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
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ě
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