Adattömörítés
Definíció Az adat az, ami az információt hordozza, megjeleníti. Az adatátvitel során elküldött adatokat szimbólumok sorozatának is tekinthetjük. A tömörítés az a művelet, melyben az egy bizonyos információt megjelenítő adatmennyiséget csökkentik. Az adattömörítés során az adatállomány redundanciája csökken, ezzel csökken az állomány mérete is.
Miért van szükség adattömörítésre? Adatátvitelkor törekedni kell az adatok mennyiségének csökkentésére, mert a számítógép-hálózatokat működtető szervezetek az átvitt adatok mennyiségével arányos költséget számolnak fel. A véges adatátviteli sebesség is az adattömörítésre ösztönöz.
Redundanciák Ugyanazt az információt különböző mennyiségű adat hordozhatja anélkül, hogy annak megjelenítése megváltozna. Redundáns egy adathalmaz, ha annak mennyisége több, mint amennyire az információ hordozásához és megjelenítéséhez szükséges lenne.
Redundanciák - Az adathalmazok szerkezetével kapcsolatos redundancia információfüggetlen, mivel ez nem befolyásolja az információ megjelenítését. - Az információk megjelenítésével kapcsolatos redundanciák információfüggőek, mert szorosan kötődnek az információkhoz.
A redundanciák típusai Kódolási redundancia – Az adathalmazt alkotó adategységek szerkezetével kapcsolatos, ezért információfüggetlen. Képi redundancia, pszichovizuális redundancia – Az adatok által hordozott képpel kapcsolatos, ezért információfüggő. Pszichoakusztikus redundancia – Az ember hallásával kapcsolatos, ezért szintén információfüggő.
Kódolási redundancia A kódolási redundancia azt jelenti, hogy az információt hordozó adathalmazban az adatkódoknak kevesebb variációja fordul elő, mint amennyit a kódok mérete lehetővé tenne. Példák: - A CD-k esetében a biztonságosabb letapogatás érdekében a 8 bitből álló kódot 14 biten jelenítik meg. - Olyan fekete-fehér kép, amelyben a képpontokat egy bájton ábrázolják. Mivel csak kétféle képpont fordul elő, elegendő lenne a képpont értékeket egy biten tárolni.
Kódolási redundancia A kódolási redundancia megszüntetése nem okoz a hordozott információban veszteséget, tehát a tömörített adathalmazból az eredeti visszaállítható.
Képi redundancia Egy képben lehetnek belső összefüggések (kontextusok), melyek kihasználása esetén a kép az adathalmazban található adatoknál kevesebb adattal is megjeleníthető.
Képi redundancia Példák: - Ha egy képen több azonos színű objektum van, akkor hatékonyan kódolható az objektumot határoló vonalnak és az objektum színének megadásával. - Képsorozatoknál, ha az egymást követő képek csak kismértékben térnek el egymástól, akkor az egyes képek hatékonyan kódolhatóak a képek közötti változások megadásával. - Ha egy képen szabályos alakzatok vannak, akkor a képek igen hatékonyan kódolhatóak az alakzatokat meghatározó függvénykapcsolatok leírásával.
Pszichovizuális redundancia A képeken sok olyan információ lehet, amit az emberi szem nem képes érzékelni. A nem látható információ kiiktatása adattömörítés. A pszichovizuális redundancia kihasználásán alapuló tömörítés mindig információveszteséggel jár.
Pszichovizuális redundancia Példák: - 24 bites színmélység esetén, minden egyes képpont kb. 17 millió szín valamelyikét veheti fel. Ennyi színt az emberi szem nem képes látni, sem a monitorok megjeleníteni, elegendő a legjellemzőbb, egymástól élesen elkülönülő színeket megjeleníteni, vagyis csökkenteni a színmélységet. - Ha a képen látható objektumok zajosak, elmosódottak, akkor zajszűréssel csökkenthető a látás szempontjából felesleges információ mennyisége.
Pszichoakusztikus redundancia A hangállományokban sok olyan adat lehetséges, amit az emberi fül nem érzékel, de rontja a hallható hangok minőségét. A nem hallható információ a hangállományból kiiktatható, ezzel adattömörítés érhető el.
A tömörítéssel szemben támasztott elvárások A tömörített és az eredeti adathalmaz mennyiségének a hányadosa (a tömörítési arány) a lehető legkisebb legyen. A tömörítő algoritmus használja ki a tömörítendő adathalmaz belső sajátosságait. A tömörítő algoritmus legyen hatékony, azaz a tömörítést és a kibontást egyszerűen lehessen a gyakorlatban megvalósítani. Az algoritmus illeszkedjék a már meglévő rendszerekhez, és ne lépje túl azok kötöttségeit. Veszteséges tömörítések esetén a minőség ne romoljon számottevően.
Tömörítési arány A tömörítési arány azt fejezi ki, hogy milyen mértékben csökkent a tömörített állomány mérete az eredeti állomány méretéhez képest. Az esetenként használt tömörítés a tömörítési arány szinonimája. Az 1 : 10 tömörítési arány megfelel a 10-szeres tömörítésnek.
Szimmetria Szimmetrikus egy tömörítés, ha a tömörítési és a kibontási műveletnek kb. egyforma az időigénye. Aszimmetrikus tömörítésnél általában a tömörítés vesz több időt igénybe, mint a kibontás. A legtöbb tömörítés aszimmetrikus.
Tömörítési eljárások Két fajta tömörítési eljárás ismert: - Veszteségmentes tömörítés - Veszteséges tömörítés
A veszteségmentes tömörítés után a tömörített állományból az eredeti állomány visszaállítható, a kibontott állomány szükség esetén újra tömöríthető. A tömörítési arány általában 5:1 és 10:1 között van. A veszteséges tömörítés után a tömörített állományból az eredeti állomány nem állítható vissza, egy kibontott állomány újbóli tömörítésekor további veszteségek lépnek fel. A tömörítési arány jóval nagyobb (akár 100:1 nagyságrendű).
A veszteségmentes tömörítés Alkalmazási területe: - Programok tömörítése - Adatbázisok tömörítése - Szöveges állományok tömörítése - Bizonyos multimédiás adatállományok tömörítése - Valós idejű hardveres vagy szoftveres tömörítések a híradástechnikában
Egy állomány veszteségmentes tömöríthetősége a redundancia fokától függ. Példák: - A legtöbb beszélt nyelv a világon nagyfokú redundanciával rendelkezik, mivel egyes betűk és szavak meghatározott minták alapján ismétlődnek egy adott szövegben, ezért a szöveges állományok jól tömöríthetők. - A legtöbb programnyelv szintén nagyfokú redundanciával rendelkezik, a relatíven kisszámú utasítás következtében.
Adattömörítési módszerek Ezek a módszerek - a szimbólumkészletek végességére, - a szimbólumok relatív gyakoriságára - és/vagy a szövegkörnyezet ismeretére alapulnak.
Futamhossz-kódolás RLE-algoritmus (Run Length Encoding) - Elsődlegesen BMP formátumú képek tömörítésére lett kifejlesztve, de alkalmazzák fax- és szövegkódolásra is. - Főként 0-kat tartalmazó hosszú bináris füzérek tárolására használják. Minden k-bites szimbólum azt adja meg, hogy mennyi 0 volt a bináris füzérben az egymás után következő 1-esek között.
Példa: bemeneti kódsorozat 3 3 6 12 5 7 |000| 1 | 000| 000000| 1 |000000000000| 1|00000| 1|0000000| A 0 részsorozatok hossza: 3, 3, 6, 12, 5, 7. Ha 3 bites szimbólumokként (bináris számokként) kódoljuk a 0 részsorozatok hosszát a következő kimeneti bitsorozatot kapjuk: 12 7 3 3 6 {7 5 0} 5 {7 0} |011| | 011| |110| |111 101 000| |101| |111 000| Ez 29%-os megtakarítást jelent. Az ilyen elven működő algoritmusokat környezetfüggő kódolásnak is nevezik.
- A tömörítés során megszámolják az ismétlődő adatokat majd ezt a számot az ismétlődő adat elé írják, utána pedig az ismétlendő adatot. Az eredeti állomány ebből veszteségmentesen visszaállítható. Példa: Az eredeti mondat: "yaaaaaaaaaaaaaaaaasssssssiiiiiiinnnnnn" A tömörített változat: "1y17a7s7i6n" A tömörített változat nyilvánvalóan kevesebb tárolási helyet foglal.
Darabszám-kódolás Pl. a felkiáltó jel legyen az ismétlődés jelző. Ha egy adathalmazban sok egymás után következő azonos szimbólum fordul elő, célszerű egy külön szimbólumot fenntartani az ismétlődés jelölésére, és utána következik az ismétlődő szimbólum, míg az azt követő számérték jelzi az ismétlődő szimbólumok számát. Pl. a felkiáltó jel legyen az ismétlődés jelző. Ekkor !A30 azt jelenti, hogy 30 darab A betű következik egymás után.
Szimbólumsor-helyettesítés: gyakori azonos szimbólumsor helyett egy speciális szimbólum használata. Pl. a tabulátor, amely 8 szóközt ér. Minta helyettesítés: gyakori szimbólumsorozat helyettesítésére speciális szimbólumot alkalmaznak.
Statisztikai kódolás a kódhossz a kód előfordulási gyakoriságától függ. Pl. a Morse ABC, amelyben az angol szövegek leggyakoribb betűjének az „e”-nek a kódja a pont. A szintén gyakori „t” -nek pedig a vonás.
LZ adaptív szótár-alapú algoritmus LZ – Lempel és Ziv, az algoritmus megalkotói - A legtöbb tömörítőprogram ezen az algoritmuson alapul, de multimédiás formátumokban is alkalmazzák, pl. a GIF képformátumban.
Legyen a tömörítendő adathalmaz a következő mondat: - Az eljárás lényege egy példán keresztül: Legyen a tömörítendő adathalmaz a következő mondat: "Ask not what your country can do for you - ask what you can do for your country." (John F. Kennedy, 1961) A mondat 61 betűből , 16 szóközből, egy gondolatjelből és egy pontból áll, ez összesen 79 tárolandó adat. - A redundancia: „ask” , „what” , „your” , „country" , „can" , „do" , „for" , „you" Ezek a szavak kétszer fordulnak elő a mondatban, ha a kis- és a nagybetűket figyelmen kívül hagyjuk, a mondat fele redundáns.
A szótár létrehozása: Az ismétlődő adatokat „szótárba” katalogizáljuk, akár egy számozott lista formájában. Esetünkben: 1. ask 2. what 3. your 4. country 5. can 6. do 7. for 8. you Az eredeti mondaton alkalmazva ezt a helyettesítést, a következő eredményt kapjuk: "1 not 2 3 4 5 6 7 8 - 1 2 8 5 6 7 3 4." Ez mindenképpen rövidebb mint az "Ask not what your country can do for you - ask what you can do for your country." A szótárat tárolni kell a tömörített állománnyal együtt, különben az eredeti üzenet nem rekonstruálható!
Az LZ algoritmus „adaptív része” – Az ismétlődő minták keresése - Különálló szavak helyett ismétlődő részletek is katalogizálhatók, gyakran sokkal jobb hatásfokú így a tömörítés (de bonyolultabb az algoritmus). Esetünkben, néhány lehetséges minta: "Ask not what your country can do for you - ask what you can do for your country." - „t „ (t + space) a „not” és a „what” után, - „ou” a „your” és a „country” szavakban (Hosszabb szöveg esetén – mivel az angol nyelvben az „ou” gyakori – érdemes lehet...) - A „your” és a „country” együtt fordul elő - A "can do for" ismétlődik, utána vagy a „your country” vagy a „you” szavak állnak, lehetséges minta „can do for you” és „r country”, stb.
Egy lehetséges szótár az adaptív algoritmus segítségével: (Az „ _ ” a szóköz karaktert jelöli.) 1. ask_ 2. what_ 3. you 4. r_country 5. _can_do_for_you Az így létrehozott kód: "1not 2345 – 12354." rövidebb mint a szóhelyettesítéssel készült: "1 not 2 3 4 5 6 7 8 - 1 2 8 5 6 7 3 4."
Változó hosszúságú kódolás Változó hosszúságú kódolás (VLC : Variable Length Coding) esetén a kódolás kizárólag a kódolási redundancia csökkentésén alapszik. Maximális hatékonysága 30 : 1 körül van. A változó adathosszúságú kódolás két legelterjedtebb fajtája: Huffman-kódolás Aritmetikai kódolás
Általában minden szövegben vannak gyakrabban előforduló szimbólumok. Gyakoriságfüggő kódolásnak hívjuk az ezen felismerés alapján működő tömörítő algoritmusokat. Egy érdekes kérdés, hogy vajon mekkora a szimbólumonkénti minimális bitszám (kódhossz). Egymástól függetlenül kódolt szimbólumokkal azonban nem lehet elérni az elméleti kódolási határt, azért, mert azok a legtöbb esetben törtszámú bitet tartalmaznak.
Huffman kódolás A Huffmann kódolás az egyik legismertebb és leggyakrabban alkalmazott kódolási algoritmus. A módszert David Huffman dolgozta ki 1952-ben, amivel jól meg lehet közelíteni az elméleti minimumot. David Huffman
A módszer lényege, hogy az egyes adatokhoz rendelt Huffman kód hossza (bitszáma) fordítva arányos az adat előfordulásának a gyakoriságával. A leggyakrabban előforduló adatok Huffman kódja rövid, a ritkán előforduló adatok Huffman kódja hosszú. Egyetlen Huffman kód sem hosszabb az eredeti adatkódnál.
Az állomány tömörítéséhez egy kódtáblára van szükség, ami vagy már meglévő kódtábla, vagy a tömörítéskor készülő kódtábla valamelyike: Statikus Huffman kódtábla – előre elkészített táblázat, nagyszámú hasonló állomány elemzése alapján alakult ki. Erre példa a fax kódolása. Globálisan adaptív Huffman kódtábla – az állomány adatainak elemzése alapján készül. Az állományt kétszer kell végigolvasni: először a táblázat elkészítéséhez, másodszor a tényleges kódoláshoz. Jobb tömörítési arány, de lassúbb. Lokálisan adaptív Huffman kódtábla – a kódgenerálás során nem állandó, így a kódok jelentése változik. Ebben az esetben a legjobb a tömörítési arány, de ez a módszer a leglassúbb.
Egy Huffman kódolással tömörített állomány kibontásához ismerni kell a használt kódtáblát. Statikus kódtábla használata esetén nem kell megadni a használt kódtáblát, mert az közismert. A globálisan adaptív és a lokálisan adaptív kódtábla használatakor a tömörített állománynak tartalmaznia kell a használt kódtáblát, hogy a tömörített állomány kibontható legyen.
A kódolás működése Egy listában tároljuk az összes szimbólumot, és a hozzájuk tartozó előfordulási valószínűségeket is. Majd ebből a listából felépítünk egy bináris fát, úgy, hogy a csomópontjaiban tároljuk a szimbólumokat. Keressük meg a két legkisebb értékű csomópontot, és jelöljük meg őket. A bináris fát bővítsük úgy egy újabb csomóponttal, hogy ez az új csomópont egy-egy éllel kapcsolódjon a két előzőleg megjelölt csomóponthoz. Az új csomópont előfordulási valószínűsége egyenlő a két hozzákötött csomópont előfordulási valószínűségének összegével (a=2/6, b=1/6, c= 3/6).
Addig ismételjük az előző lépést, amíg már csak egyetlen jelöletlen csomópont marad. A jelöletlen csomópont valószínűsége mindig 1 lesz. Az egyes szimbólumok Huffmann-kódját úgy kapjuk meg, hogy a fában a jelöletlen szimbólumtól az adott szimbólumig vezető úton haladva feljegyezzük az érintett jobb, és bal oldali értékeket. A kódot maga az út határozza meg, méghozzá úgy, hogy a baloldali utat 0-val, míg a jobb oldalit 1-gyel jelöljük.
Példa Huffmann-kódolásra: jelöletlen szimbólum 0 1 Kódolandó karaktersorozat: „abccca” Kódolt karaktersorozat: a b c c c a |0 0| 0 1|1 | 1 | 1 | 0 0| c a B
A példában a 48 biten tárolt adatot („abccca” karaktersorozatot) 9 bitre kódoltuk át, ami 80%-os tömörítési arányt jelent. A Huffmann-kódolás nem csak kettes számrendszerben használható. Minden lépésben kiválaszthatjuk a 256 legkisebb jelöletlen csomópontot is. Ebben az esetben minden egyes közbenső csomópontból 256 él ágazik ki. Tehát olyan kódot kapunk, amelyben minden szimbólum byte-ok egész számú többszöröse.
Egyéb veszteségmentes tömörítési algoritmusok GIF (Graphics Interchange Format), LZW (Lempel-Ziv-Welch) módszert alkalmazza. PNG (Portable Network Graphics), az LZ egy módosított változatát használja. Delta kódolás (két egymást követő képkocka közti különbséget tömöríti).
Veszteséges tömörítés A veszteséges módszerek használatának az előnye a veszteségmentes módszerekhez képest, hogy sok esetben a veszteséges tömörítés sokkal kisebb fájlt képes előállítani, mint bármely veszteségmentes, és még így is kellően jó minőséget ér el.
Veszteséges tömörítés A veszteséges módszereket általában a hang-, kép- és videótömörítés során használják. A tömörítési arány (tehát a tömörített fájl mérete a tömörítetlenhez képest) általában a videók esetében a legjobb (akár 300:1 is lehet látható minőségromlás nélkül), hanganyagnál ez az érték 10:1 körül mozog. A veszteségesen tömörített képeknél is gyakori a 10:1-es tömörítési arány, de a minőségromlás itt vehető észre talán a legkönnyebben.
Sok veszteséges adattömörítő eljárást dolgoztak ki, ezek két fő csoportba sorolhatók: 1. Előrebecslésen alapuló eljárások. Ezek az eljárások általában kevés információ ismeretében nagyszámú további információ megjelenését „becsülik meg” előre. 2. Matematikai transzformáción alapuló módszerek. Ezeknél a módszereknél az információt konkrét értékek helyett függvények kapcsolatával írják le. A veszteséges tömörítési módszerekre az interneten általában codec néven hivatkoznak.
Veszteséges előrebecsléses kódolás Előrebecsléses kódolásnál pl. egy kép esetében az egymáshoz közeli részletek között jelentős kapcsolat (korreláció) áll fenn, így egy kép adott részlete alapján annak közeli környezete többé-kevésbé megbecsülhető. Veszteséges előrebecsléses kódolást alkalmaznak többek között az MPEG formátumokban.
Transzformációs kódolás A transzformációs kódolás olyan megfordítható lineáris transzformáció, amely az adatállományt (általában annak kisebb részleteit, az ún. blokkokat) transzformációs együtthatókra képezi le, melyeket kódol. Tömörítésre a lehetőséget az biztosítja, hogy a transzformációs együtthatók között igen sok a kis abszolút értékű együttható, ezek minőségromlás megengedése esetén elhanyagolhatók.
Transzformációs eljárások Sokféle transzformációs eljárás van. Pl.: Karhumen-Loeve transzformáció (KLT) , diszkrét Fourier transzformáció (DFT) , Wals-Hadamart transzformáció (WHT) , diszkrét koszinusz transzformáció (DCT)) Ezek közül a hatékonyság, használhatóság és megvalósíthatóság alapján lehet választani.
Transzformációs eljárások A diszkrét koszinusz transzformáció használatát igen hatékony implementációk teszik lehetővé, ezért jelentősége az elmúlt években megnőtt. DCT- t használnak többek között a JPEG (Joint Photographic Experts Group) MPEG (Moving Picture Experts Group ) tömörítési eljárások is. (MPEG-1 Audio Layer 3 - MP3, )