Informatika alapjai-4 Tömörítés 1/12 Tömörítés, kép ábrázolás [Forrás elsősorban WIKIPEDIA] A tömörítés alapcélja, hogy információt a számítástechnikában egy vagy több file-t - kisebb helyen lehessen tárolni, átvinni. A tömörítés lehet veszteségmentes (ZIP, TIF), vagy veszteséges (JPEG, MPEG). A tömörítéssel együtt történhet - adatvédelem: a tömörítéshez jó hatásfokú hibajavító kódolást használnak, amely u.n. folthibák esetén is lehetővé teszi a javítást. - titkosítás: a tömörített file csak kulcs megadása után fejthető ki. A tömörítés azon alapszik, hogy az információ tárolása redundáns, és olyan eljárásokat alkalmazunk, melyekkel a redundancia csökkenthető. A redundancia azt jelenti, hogy az elem sorozat (információ) elemei nem függetlenek egymástól. Ebből kiindulva számszerűsíthető az elem sorozat redundanciája, amely alapvető információelméleti fogalom (Shannon). A redundancia azt fejezi ki, hogy egy elem sorozatot mennyivel lehetne lerövidíteni úgy, hogy az eredeti információt vissza lehessen állítani. Elég nyilvánvalóan redundáns az írott beszédszöveg: nem lehet benne akármilyen karakter sorozat. Először is kevés kivételtől eltekintve csak értelmes szavak vannak benne, az értelmes szavak értelmes mondatokat alkotnak. Egy szón belül is eltér az egyes betűk előfordulási valószínűsége (leggyakoribb: E), magánhangzó után nagyobb valószínűséggel mássalhangzó következik, és fordítva. Hasonlóan redundáns a képek bit-mapként történő tárolása: - vonalas ábránál nagy összefüggő fehér és kisebb, de összefüggő fekete területek váltakoznak, tehát sokkal kisebb a váltás valószínűsége, mint az, hogy egy fehér pontot fehér pontok, fekete pontot fekete pontok vesznek körül. - fényképnél az egymás melletti képpontok többnyire kismértékben különböznek - filmben az egymás utáni kockák általában kismértékben különböznek. Run Length Encoding (RLE) Futás hossz kódolás: egyforma adatokból álló sorozat helyett a sorozat darabszámát és az elemet továbbítjuk. Például WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW helyett: 12WB12W3B24WB14W (W: fehér képpont, B: fekete képpont) Elsősorban a fax technikában alkalmazzák. Legegyszerűbb esetben a tömörítés csak egy soron belül történik, a bonyolultabb algoritmus azt is kihasználja, hogy az egymás utáni sorok hasonlóak. ZIP A legismertebb veszteségmentes tömörítési technika. 1989-ben Phil Katz dolgozta ki cégében, a PKWARE-ben. Fő jellemzők: - egy vagy több file egyetlen file-ba becsomagolva. Nyereség kisebb file-ok esetén a minimális blokk méret miatt (u.n. Cluster: tipikusan 4 kbyte). [20 db. 200 byte-os file egyenként tárolva 80 kbyte, tömörítés nélkül egyberakva ~ 4 kbyte, a szükséges adminisztrációval 8 kbyte] - a file-ok a ZIP file-ban szétválasztva vannak benne, egyenként törölhetők, módosíthatók, vagy új file-ok tehetők be.
Informatika alapjai-4 Tömörítés 2/12 - a program az egyes file-okat különböző módszerekkel tömöríti: (nincs tömörítés,) Shrinking, Reducing, Imploding, Tokenizing, Deflating, Imploding, Method 11, BZip2. - a tömörítéssel együtt titkosítás is történhet (könnyen feltörhető) - a hiba hatása korlátozódik arra az eredeti file-ra, melynek becsomagolt formájában a hiba előfordul. A felsorolt tömörítési eljárások közül a leggyakrabban alkalmazott a Deflating (= [gáz, levegő] leeresztése). Ez az LZ77 eljárást és Huffman kódolást kombinálja. Az LZ77 eljárás mint az összes eljárás, melynek neve LZ-vel kezdődik (pl. LZW) Abraham Lempel és Jacob Ziv nevéhez kötődik (1977). A tömörítendő file-ban ismétlődő részeket keresünk, ezeket egy szótárban kigyűjtjük, és egy sorszámot rendelünk hozzájuk. A tömörített file két részből áll: a szótárból és egy sorszám listából. Például legyen a file a következő szöveg: Ha buta vagyok, nem tudom, hogy buta vagyok, mert buta vagyok. Ebből nyilván létrehozható a következő szótár és szöveg: $1= buta vagyok Ha$1, nem tudom, hogy$1, mert$1. A sorszám listában a sorszámok kódolására Huffman kódot alkalmazunk, azaz annál rövidebb a sorszám kódja, minél gyakrabban fordul elő a szótár elem a file-ban. Nyilvánvalóan csak akkor van tömörítés, ha a szótár elemek sokszor fordulnak elő. Tételezzük fel, hogy a tömörítő csak egy szöveg karaktereit ismeri fel, így a karakterek kerülnek a szótárba. Ekkor a módszer a szöveg karakterenkénti Huffman kódolását eredményezi. Néhány ZIP tömörítési eredmény: Magyar nyelvű szöveg tömörítése: 114502 byte-ból 35990 byte (100%-68%=32%) Program forrás tömörítése: 1019565 byte-ból 203091 byte (100%-80%=20%) 26 db. vonalas BMP file: 88 Mbyte-ból 1,665 Mbyte (100%-98%=2%). Képábrázolás A számítástechnikában a képeket kétféleképpen írhatjuk le: vektorgrafikusan: ekkor a kép elemeit adjuk meg, például egy egyenes kezdő és végpontjának koordinátáit, vastagságát, stílusát, színét. Alapvetően így működik például a CorelDraw rajzolóprogram. Raszter grafikaként: a képet raszterpontokra osztjuk, és az egyes pontok jellemzőit (világosság, szín) adjuk meg. Nem foglalkozunk a kétféle eljárás előnyeivel-hátrányaival, és a továbbiakban csak a raszter grafikus ábrázolásról beszélünk. A legismertebb tömörítetlen raszter grafikus ábrázolási forma a Windows Bitmap. Az ilyen file-ok kiterjesztése általában.bmp. A bitmap file felépítése: Fejléc: - a file mérete (x * y) - a file típusa, ezen belül az egy pontot leíró bitek száma (B). Ez lehet 1 (fekete-fehér), 4 (16 színű), 8 (256 színű, vagy 256 szürkeárnyalatú), 16 (RGB555 vagy RGB565: alapszínenként ~5 bit, 65536 szín) vagy 24 (RGB888: alapszínenként 8 bit, 16 777 216 szín).
Informatika alapjai-4 Tömörítés 3/12 Színtábla: 4 és 8 bit/pont bitmap-nél megadja, hogy a 16, illetve 256 féle képpont milyen színű (24 bites felbontásban). 16 és 24 bites bites felbontásban nincs színtábla. Bitmap: ennek mérete >= B * x * y / 8 byte. Például egy 8 x 10 pixeles kétszínű kép és bitmapja: 00000000 00h 00011000 18h 00111100 3Ch 01100110 66h 01000010 42h 01111110 7Eh 01111110 7Eh 01000010 42h 01000010 42h 00000000 00h A bitmap képek nagyon nagyok lehetnek. Egy 800 x 600 pontos 24 bites bitmap mérete: 800 x 600 x 3 byte = 1 440 000 byte. A képméret tömörítéssel csökkenthető (van RLE tömörítést alkalmazó BMP formátum, a legismertebb a JPEG képtömörítés). Színlátás fizikája A látható fény hullámhossza ~ 400...700nm: A tiszta színek spektruma egyetlen vonal, a kevert színek spektruma valamilyen hullámhossz eloszlású görbe.
Informatika alapjai-4 Tömörítés 4/12 Például egy villanólámpa fényének spektruma (4600K): A CIE patkó diagram A diagram az összes látható színt mutatja. A színes terület peremén a tiszta színek, közép felé haladva a kevert színek látszanak. A fekete vonal a fekete test sugárzását mutatja a hőmérséklet függvényében. A szem A szem szerkezete:
Informatika alapjai-4 Tömörítés 5/12 A retinában kétféle fényérzékelő sejt van. Pálcikák: egyenletesen elosztva helyezkednek el. Elsősorban az éjszakai és a periferiális látásban van szerepük. Csak egyféle pálcika van, a pálcikák a színlátásban nem vesznek részt. Csapok: háromféle csap van, melyek a kék, zöld és vörös színre érzékenyek. Ezért ezeket Beta (blue = kék), Gamma (green = zöld) és Rho (red = piros) csapnak nevezik. A csapok színérzékenysége: (A színvakság a csapok működési zavaraival függ össze. Leggyakoribb a zöld-vörös színtévesztés, amikor a Gamma vagy Rho csapok hiányoznak, vagy a Gamma és Rho spektrum összecsúszik.) Az hogy valamilyen eloszlási spektrumot milyen színűnek látunk, attól függ, hogy a háromféle csap milyen ingert kap. Ezért egy színes képhez nem kell végtelen sok színt generálni, hanem elég háromfélét lehetőleg úgy, hogy a három komponens a háromféle csapot ingerelje. A színes képernyőn a kép RGB komponensekből tevődik össze: Látszik, hogy a szétválasztás nem tökéletes, például a kék foszfor fénye a Beta szenzoron kívül a Gamma és Rho szenzort is ingerli.
Informatika alapjai-4 Tömörítés 6/12 A szín a komponensek arányától függ. A következő ábra az úgynevezett szín kocka. Az ábra most az elsődleges és másodlagos színeket mutatja a telített színtől a fehérig változóan: Látszik, hogy például a sárga szín a piros és zöld összegeként állítható elő, és minél több kéket keverünk hozzá, annál fehéresebb (precizebben: csökken a szín telítettsége). A 24 bites bitmap képnél egy pont színét és fényességét 3x8 biten adjuk meg, ahol a 3 byte az RGB komponensek intenzitása. A PC-ben a maximális intenzitású alapszínek 24 bites kódja: Kék FF 00 00 Zöld 00 FF 00 Piros 00 00 FF Ebből tehető össze a többi szín, például: Sárga FF FF 00 Magenta FF 00 FF Fehér FF FF FF Szürke 80 80 80 Képtömörítés Vonalas ábra bitmapja jól tömöríthető ZIP-pel (ld. korábban). Nem ilyen jó a helyzet fénykép tömörítésnél. Az alábbi példában szereplő 519 kbyte-os kép ZIP-ple tömörítve 444 kbyte (!). Ezért fényképek tömörítésére más elven működő eljárást dolgoztak ki. Ez a JPEG. A JPEG veszteséges tömörítés, azaz nem állítható vissza pontosan az eredeti file, de a képminőség romlása nagyon kicsi lehet. A JPEG eljárásnak a felhasználó szempontjából legfontosabb tulajdonsága, hogy különböző minőségű tömörítést tesz lehetővé, és ha a minőségből engedünk, a tömörítés egyre nagyobb lehet. A következő képsorozat egy BMP képet, és annak kétféleképpen tömörített változatát mutatja. Látszik, hogy 10-es tömörítésnél nincs észrevehető minőségromlás, 90-esnél a romlás jól észrevehető, de a kép azért még használható. Az utóbbi esetben a tömörített képfile a BMP 1,64%-a! Minden digitális fényképezőgép tud JPEG képet készíteni, a jobbak u.n. RAW képet is, amelyik pontosan a gép által felvett bitmap kép teljes színfelbontásban, kiegészítve a felvételre vonatkozó információkkal (felvétel ideje, beállítások). Ha a képen képfeldolgozást akarunk végezni, akkor RAW formátumban érdemes menteni. A RAW formátum nem szabványos, gyáranként, sőt géptípusonként is változhat.
Informatika alapjai-4 Tömörítés JPEG tömörítés 423 x 408 x 24bit BMP: 519030 byte JPG 10-es tömörítés: 58908 byte JPG 90-es tömörítés: 8492 byte 7/12
Informatika alapjai-4 Tömörítés 8/12 Csak felsoroljuk a tömörítés lépéseit, általában nem magyarázzuk azokat. 1. Szétválasztjuk a fényesség és szín információt (RGB YCbCr transzformáció) A fényesség információt megkapjuk, ha az RGB komponenseket súlyozottan összeadjuk: (1) Y = 0.299 * R + 0.587 * G + 0.114 * B (0.299 + 0.587 + 0.114 = 1) A különböző konstansok azt fejezik ki, hogy a szem pirosra, zöldre és kékre eltérően érzékeny, legérzékenyebb zöldre, legkevésbé érzékeny kékre. A színtartalmat két változóval adjuk meg: a kék szín és a fényesség, valamint a piros szín és a fényesség kölönbsége (2) Cb = 0.5 * (B - Y) (3) Cr = 0.5 * (R - Y) Ha R, G, B 0...1 Akkor Y 0...1 Cb, Cy -0.5...+0.5 (Az átalakítás lényegében ugyanaz, mint a PAL színes TV adásban használt fényesség/szín szétbontás, ahol ennek elsődleges célja a fekete-fehér TV vevőkkel való kompatibilitás megtartása volt.) Y, Cb, Cr-ből könnyen visszaállítható RGB, az (1)..(3) egyenletek felhasználásával. Színes és a szürkeárnyalatos kép: 2. A színtartalmat redukálhatjuk, azaz lecsökkentjük a felbontást. Ezt azért tehetjük meg, mert a szem fényesség felbontása sokkal jobb, mint szín felbontása.
Informatika alapjai-4 Tömörítés 9/12 [A lehetőségek 4:4:4 (nincs redukálás), 4:2:2 (redukálás 2-vel vizszintesen), leggyakrabban 4:2:0 (redukálás mindkét irányban 2-vel). A továbbiakban az eredeti Y és a redukált Cb és Cr táblát hasonlóan kezeljük, azaz 3 bitmap-en dolgozunk. 3. A bitmapeket 8 x 8 as mezőkre osztjuk. Az baloldali ábra a felosztást, a jobboldali egy 8x8-as mezőt mutat. 4. A 8x8-as mezőkön diszkrét cosinus transzformációt hajtunk végre (ez amplitúdófrekvencia átalakítás, hasonlít a diszkrét Fourier transzformációhoz). A transzformáció eredménye is 8x8-as mátrix. DCT-II Egy alkép: minden elemből kivonunk 128-at, hogy a számtartomány -128..127 legyen:
Informatika alapjai-4 Tömörítés 10/12 A DCT eredménye egészre kerekítve: A frekvencia balról jobbra és fentről lefelé nő, a bal felső sarokban lévő nagy szám a DC összetevő (a 0 frekvenciás komponens, vagy átlag). A mátrix a vízszintes és függőleges térbeli frekvencia komponenseket mutatja. 5. Kvantálás A felbontás csökkentésére minden komponenst elosztunk egy számmal. Ezt azért tehetjük meg, mert a szem ugyan nagyon érzékeny a nagyobb területek fényesség változására, de nem észleli pontosan a gyorsan változó kisebb területek fényességét. Egy szokásos kvantálási mátrix:
Informatika alapjai-4 Tömörítés 11/12 Elvégezve a kvantálást, az előző DCT mátrixon az eredmény: (A bal felső elemre: -415 / 16 = 25.94) Látszik, hogy nagyobb frekvenciákon csupa 0 együttható van. A képminőséget és a tömörített képméretet a kvantálás mértéke szabja meg. 5. Az eredményt úgynevezett Entrópia kódolással kódoljuk, amiben benne van az együtthatók átrendezése, RLE és Huffman kódolása (az utóbbi kettőt a ZIP tömörítésből ismerjük). Az u.n cik-cak átrendezést a következő ábra szemlélteti: Kb. 10-szeres tömörítésnél a JPEG-ből visszaállított kép szemmel nem különböztethető meg az eredetitől, 100-szoros tömörítésnél már jelentős eltérések vannak, de a kép jól felismerhető. MPEG tömörítés Lényege: a mozgókép első kockáját tömörítjük. A további kockáknál kihasználjuk, hogy azok az előző kockához hasonlítanak, és csak a különbséget visszük át, persze ezt is tömörítve. Bizonyos számú kocka után, vagy ha vágás van a filmben, újra a teljes képtartalmat visszük át. MPEG-1 CD-ROM-on és VIDEO-CD-n használt eljárás (elavult) MPEG-2 TV minőségű képátvitelt biztosít (normál vagy HDTV). A digitális TV műsorszórásban és újabb video felvevőknél használt MPEG-4 Nagyon kisfelbontású és sávszélesség igényű eljárás. Újabban a nagyon nagy felbontású HDTV alkalmazásokban is használják.
Informatika alapjai-4 Tömörítés 12/12 Egy TV csatornán a bitsebesség a felbontástól és a tömörítéstől függ. Az ismert eljárások bitsebessége: Látszik, hogy a PAL átvitel sebessége 216 Megabit/s, amit az MPEG-2 eljárás 4-6 Megabit/sra csökkent. Így egy kétórás film tárolási igénye kb. 4..6 * 10 6 Megabit/s * 7200s / 8 = 3,6..4,8 Gigabyte. Ez a DVD igényelt kapacitása.