A
számítógépes képfeldolgozás lényegében nagy
adathalmazon végzett adatfeldolgozás. Mivel az
adatok tárolása és átvitele a képek esetében
is egyike az alapfeladatoknak, az adattömörítés
fontos. Ebben a részben a képtömörítés
alapelveit, legfontosabb típusait és gyakorlati
alkalmazásait ismertetjük.
Alapfogalmak
A
hagyományos képtárolás adathordozói a fotóanyagokon
alkalmazott ezüstvegyületek, a képmagnetofon
szalagja és a számítógépes képfeldolgozás számos
példája pl.: mikrofilm-alpú, tv-képarchiváló
rendszer, sajnos a tapasztalat szerint sem megbízhatóságban,
sem adathűségben és sebességben nem váltották
be a hozzájuk fűzött reményeket. A kiutat a
digitális adathordozók megjelenése jelentett.
Hasonló
a helyezet a képek átvitele terén is. Az adatok
digitális kezelése minden tekintetben előnyösebb
az analóg megoldásoknál. Mivel azonban mind az
adattárolók, mind pedig a hírközlési csatornák
használata költséges, természetes, hogy a digitális
képtárolás és képátvitel megjelenésével
egyidejűleg jelentkezett az az igény is,
hogy a képi információt minél hűbben, de
ugyanakkor minél kisebb adatmennyiséggel lehessen
ábrázolni, erre irányul a képtömörítés.
A
képtömörítés iránti érdeklődés több, mint
30 éves múltra tekint vissza. A kezdeti időszak
erőfeszítései elsősorban az analóg módszerekre
korlátozódtak, tipikus példájuk a képi jelekre
vonatkozó sávszélesség-csökkentés.
A digitális feldolgozás elterjedésével az érdeklődés
eltolódott a digitális képtömörítés felé. A
napjainkban elterjedő multimédia eszközök működése
szintén elképzelhetetlen lenne a kép és a hang rögzítése
terén egyaránt alkalmazott adattömörítés nélkül.
Redundanciák
Ugyanazt
az információt különböző fajtájú és mennyiségű
adat hordozhatja. Az adathalmaz redundáns, ha
mennyisége nem a lehető legkevesebb. Adattömörítésen
azt a folyamatot értjük, amelynek során csökkentjük
a bizonyos információt reprezentáló adatok
mennyiségét. A számítógépes képfeldolgozás
területén háromféle redundanciát szokás megkülönböztetni.
1.
Kódolási redundancia
Tekintsünk
egy bináris képet, amelyben mindössze kétféle
világosságkód fordul elő, azonban ezeket 1
byte-on tároljuk. 0 a fekete 255 a fehér. Világos,
hogy ez az információ egy biten is ábrázolható.
Ez esetben a kódolás redundanciája ad módot a tömörítésre.
2.
Képi redundancia
A
képben lehetnek olyan belső összefüggések,
amelyek kihasználása esetén az ábrázoláshoz
kevesebb adat is elegendő. Pl.:
-
ha a képen csak azonos színű objektumok vannak,
homogén háttér előtt, hatékonyan kódolható az
objektumok határoló vonalainak megadásával.
- ha az egymás után következő képek csak kis mértékben
különböznek, gazdaságosan kódolhatók a képek
közötti változások megadásával.
- ha a képen szabályos alakzatok vannak, hatásosan
kódolható az alakzatokat generáló függvénykapcsolatok
leírásával.
3.
Pszichovizuális redundancia
A
képek sok olyan információt tartalmaznak, amelyet
az emberi látórendszer nem érzékel. Ha csak a kép
megjelenítése a feladat, de egzakt feldolgozására
nincs szükség, a felesleges információ kiszűrésével
adattömörítés érhető el. Ez az eljárás
információvesztéssel jár. Pl.:
-
ha a képpontokat 24 biten ábrázoljuk, ami közel
17 millió féle színt tudnánk
megjeleníteni, de a látórendszer felbontását ez
messze meghaladja, nyilvánvaló , hogy elég csak a
legjellemzőbb színek megtartása.
- ha a képen látható objektumok erősen zajosak,
zajszűréssel csökkenthetjük a látás szempontjából
felesleges információ mennyiségét.
-ha a kép kevés látnivalót tartalmaz túl nagy méretben,
akkor a kép mérete arányos csökkenthető, amíg
a csökkentés nem megy a látvány rovására.
Egy
adattömörítési eljárástól általában az alábbiakat
várjuk el:
-
a tömörítési arány a lehető legkisebb legyen,
az algoritmus használja ki a tömörítendő
adathalmaz sajátos szerkezetét.
- az algoritmus legyen hatékonyan implementálható
- illeszkedjék a meglévő rendszerek kötött
lehetőségeihez.
Képek
tömörítésekor bizonyos feltételek teljesülése
esetén általában megengedhető az információveszteség.
Képtömörítési
eljárások
Veszteségmentes
tömörítés
A
veszteségmentes képtömörítés lehetővé teszi,
hogy a helyreállítás során az eredeti képpel tökéletesen
azonos képet kapjunk vissza. Ez azt jelenti, hogy a
bemenő- és a kimenőkép megfelelő képpontjainak
világosságkódja azonos. Ilyen eljárások akkor
indokolta, ha a későbbi felhasználás során
nincs semmilyen lehetőség a képtartalom módosítására.
Sajnos, a szokásos összetételű tónusos képek
esetén csak nagyon kis tömörítés érhető el,
az 1/2 arány már jónak mondható.
A
veszteségmentes tömörítés egyszerű esete, ha a
sorfolytonos tárolt kép leírására a világosságkódok
helyett pontonkénti változásukat használjuk. A
szomszédos képpontok nagy valószínűséggel közel
azonos fényességűek, illetve színűek.
Változó
hosszúságú kódolás
Változó
adathosszúságú kódolás (VLC=variable length
coding) során a tömörítési eljárás kizárólag
a kódolási redundancia csökkentésén alapul. A
szokásos esetekben 1/2, nagyon jó esetben az
1/30 tömörítési arány is elérhető. Az alábbiakban
két eljárást ismertetünk:
Huffman-kódolás
Az
egyik legismertebb és leggyakrabban alkalmazott eljárás
A. Huffmantól származik, 1952-ből. Lényege, hogy
egyes adatokhoz rendelt kód hossza (bitszám) fordítottan
arányos előfordulásuk gyakoriságával. A kódok
megállapítására a következő egyszerű eljárás
szolgálhat:
-
írjuk fel a bemenő adatokat egymás alá az előfordulási
gyakoriságuk szerint növekvő sorrendben,
- induljunk el a tábla két legkisebb gyakoriságú
eleménél és vonjuk össze őket, úgy, hogy
egyben adjuk össze a hozzájuk tartozó gyakoriság
értékeket is,
- ezt a páronkénti összevonást mindaddig
folytassuk, amíg az összeggel el nem érkezünk a
teljes képpontszámig.
- ezután minden egyes adathoz olyan kódot rendeljünk,
melynek bitszáma megegyezik az adatot tartalmazó
összevonások számával. A kód azon bitjei
legyenek 1 értékűek, amelyek a hozzájuk tartozó
összevonásokban a párjuknál feljebb voltak.
Aritmetikai
kódolás
Bár
az aritmetikai kódolást a változó hosszúságú
eljárások közé soroljuk, valójában egy nagy
bitfolyam áll elő, amelyben a bemenő és a kimenő
adatok részletei között nincs egyértelmű
megfeleltetés. Az eljárás a bemenő adatok
sorozatának egy részletéhez rendel kódot. Előnyei:
a lokális adaptív változata is könnyen
programozható, s így igen kis tömörítési
arányok érhetők el, ellentétben a Huffman kódolással,
az adatokhoz nemcsak egész hosszúságú kód
tartozhat, ezáltal a tömörítés tovább növekszik.
Bitsík-kódolás
A
bitsík-kódolás szintén a kódolási redundanciára
épül, de kihasználja a világosságkódok közötti
korrelációt is. A lényege, hogy a bemenő képet
kódolás előtt felbontjuk annyi független képre,
ahány bitesek a világosságkódok, így minden részkép
egy-egy bitsík adatait tartalmazza. A kapott
egybites képeket ezután tömörítjük valamilyen
jó hatásfokú veszteségmentes eljárással.
Helyreállításnál a kép fokozatosan alakul ki.
Homogén
foltok kódolása
Az
alábbi négyesfa generálás néven ismert eljárással
túlnyomó részt nagy homogén foltokat tartalmazó,
bináris képeket lehet hathatósan tömöríteni,
mert lényegében egy speciális fára fűzi fel a képi
adathalmazt.
Határvonal-kódolás
A
homogén foltok kódolásának másik gazdaságos módja,
hogy a foltokat határoló vonalakat kódoljuk és
kijelöljük azokat a zárt tartományokat, amelyek
nem a háttérhez hanem az objektumhoz tartoznak.
Kódolás
előrebecsléssel
A
képi redundancia kihasználásának egyik egyszerű
módszere az előrebecslés (prediction). Ez azon
alapul, hogy a kép közeli részletei között
nagymértékű a korreláció, így a kép adott részlete
alapján a közeli környezete többé-kevésbé
megbecsülhető.
Ha
sorfolytonosan haladunk balról jobbra és ismerjük
az aktuális, valamint az előző világosságkódot,
akkor a sorban következőről feltételezhető,
hogy az elődeinek megfelelő tendencia rá is érvényes.
Ebből kiindulva a képet alapvetően előrebecsléssel
állítjuk helyre. A kódolás során pedig a kép
helyett csak azokat a korrekciós adatokat tároljuk
el, melyek az előrebecslés tévedéseit kijavítják.
Veszteséges
tömörítés
A
veszteséges képtömörítés értelemszerűen nem
teszi lehetővé az eredeti képtartalom maradéktalan
helyreállítását. A leggyakoribb követelmény a
látvány változatlansága, ami megengedi, hogy a
bemenő- és a kimenőkép megfelelő világosságkódjai
eltérőek legyenek.
A
veszteséges eljárásokkal viszonylag nagy tömörítés
érhető el, a megengedett minőségromlás mértékétől
függően. Tipikus az 1/20, de ha csak a kép
felismerhetősége a cél, az 1/100 arány sem
lehetetlen. Különböző összetett eljárásoknál
az 1/70 arány még jó minőségű helyreállítást
tesz lehetővé. Két fő csoportra bonthatók az
eljárások:
-
Az előrebecslésen alapuló módszerek általában
kevés információ ismeretében nagy számú világosságkódot
becsülnek meg előre. A tömörítés pontossági
igényétől függően korrigálni kell a tényleges
értékektől való eltérést. Jó esetben a
korrekció mértéke viszonylag kicsi, ekkor a
korrekciós paraméterek gazdaságosan adhatók
meg változó hosszúságú kódokkal.
-
A matematikai transzformáción alapuló módszereknél
a képet a világosságkódok helyett bázisfüggvények
együtthatóival írjuk le, illetve ugyanezen bázisfüggvény
adott pontbeli súlyozott összegzésével állítjuk
helyre.
JPEG
szabvány
A
JPEG (Joint Photographic Experts Group) ajánlások
napjainkra az állóképek veszteséges tömörítésének
szabványaivá váltak. Az eljárás (adaptív)
diszkrét koszinusz transzformáción (DCT) alapul
és eleve úgy alakították ki, hogy mind
hardverben, mind szoftverben egyaránt könnyen
lehessen megvalósítani. Segítségével 1/30 tömörítési
arány is elérhető a megengedett minőségromlás
mértékét a felhasználó paraméterezheti.
A
JPEG tömörítési eljárás egymástól függetlenül
kezeli a színösszetevőket, vagyis a színes képek
esetében mind a háromra végre kell hajtani. Ha a
tömörítés veszteségmentes volna, nem lenne túl
nagy jelentősége annak, hogy a világosságkódokat
milyen színtérben ábrázoljuk. Mivel azonban a
JPEG megengedi a veszteséget, célszerű olyan világosságkód-ábrázolást
választani, amelyik a legkevésbé érzékeny az
elkövetett hibákra, illetve amelyben az adatok
belső összefüggései a legnagyobb tömörítést
teszik lehetővé. Pszichovizuális okok miatt az
RGB színrendszer helyett előnyösebb az YUV használata.
Ezért a színes képeket tömörítése előtt a színrendszert
transzformálni kell YUV rendszerbe. Az eljárás
első lépésében az adott színösszetevőt egymástól
független, 8*8-as blokkokra bontjuk, amelyeket ezután
függetlenül kezelünk. A transzformáció végrehajtásával
blokkonként (8*8=) 64 együtthatót kapunk a kétdimenziós
diszkrét bázisfüggvényekhez. Az eljárás képlettel
a következőképpen fejezhető ki:
ahol
-
N a blokk mérete
- q(m,n) a világosságkód az (m,n) blokk-relatív
koordinátájú képpontban
- k,l blokk-relatív koordináták.
A
fenti képlet közvetlen számításokra
alkalmatlan, mivel valós adatokkal kellene nagyszámú
műveletet elvégezni. A transzformáció igen jó közelítése
pl. az RVFFT (Real Valued Fasf Fourier Transform)
eljáráson alapul. A DCT transzformáció a kiindulási
adatoknál inkább többet eredményez, mint
kevesebbet, hiszen a kapott együtthatókat nagyobb
pontossággal kell ábrázolni, mint az eredeti világosságkódokat. Előnye
mégis abban van, hogy a 64 transzformációs együttható
gyakorlatilag nem mutat belső összefüggést,
szemben a blokk többnyire erősen korreláló 64 képpontjával.
(A diszkrét koszinusz transzformáció a
Karhunen-Loéve transzformációt megközelítő mértékben
tudja az adatokat független paraméterekké alakítani.)
Pszichovizuális kísérletek bebizonyították,
hogy ez a 64 együttható nem azonos mértékben
fontos az eredetit közelítő látvány létrehozásához.
Kiderült, hogy a nagyobb frekvenciájú képtartalomváltozást
reprezentáló bázisfüggvények ebből a szempontból
még akkor sem játszanak túl nagy szerepet, ha a
hozzájuk tartozó együttható értéke nagy.
(Megjegyzendő, hogy a kísérleteket megadott képernyőméret-látótávolság
összefüggések mellett végezték, s a DCT tömörítési
eljárás alkalmazása esetén is feltételezik a képhelyreállítás
bizonyos standard körülményeit.)
Az
előbbiekből tehát az következik, hogy a
nagyobb frekvenciájú bázisfüggvények együtthatói
sokkal durvábban (pontatlanabbul) kódolhatók,
mint a kis frekvenciájúaké. A kódolás pontosságát
úgy is előírhatjuk, hogy megszabjuk, melyik együttható
hányféle értéket vehet fel, azaz milyen pontosságú
a kvantálása. (A legegyszerűbb kvantálás, ha az
együtthatót elosztjuk egy adott számmal és a hányados
egészrészét vesszük. Minél nagyobb az osztó,
annál kevesebb különböző eredményt kaphatunk,
így visszaszorzás után annál durvább lesz a
"lépcsőzés". Ha pl. egy együttható értéke
11 és a kvantálási osztó 16, akkor az eredmény
0 lesz. Ugyancsak nulla lesz az eredmény, ha az együttható
értéke a {-15, .., 15} tartományban bármilyen más
értéket vesz fel.
Tipikus
kvantáló- (azaz 64, együtthatóról-együtthatóra
változó osztót tartalmazó) mátrixokat mutatunk
az alábbi ábrán a luminanciához (a), illetve a
krominanciához (b).
16 |
11 |
10 |
16 |
24 |
40 |
51 |
61 |
12 |
12 |
14 |
19 |
26 |
58 |
60 |
55 |
14 |
13 |
16 |
24 |
40 |
57 |
69 |
56 |
14 |
17 |
22 |
29 |
51 |
87 |
80 |
62 |
18 |
22 |
37 |
56 |
68 |
109 |
103 |
77 |
24 |
35 |
55 |
64 |
81 |
104 |
113 |
92 |
49 |
64 |
78 |
87 |
103 |
121 |
120 |
101 |
72 |
92 |
95 |
98 |
112 |
100 |
103 |
99 |
|
17 |
18 |
24 |
47 |
99 |
99 |
99 |
99 |
18 |
21 |
26 |
66 |
99 |
99 |
99 |
99 |
24 |
26 |
56 |
99 |
99 |
99 |
99 |
99 |
47 |
66 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
|
(a)
(b)
A
szokásos JPEG-alapú rendszerekben a képminőséget
(s ezzel a tömörítési arányt is) pl. a kvantálási
szintek változásával lehet befolyásolni. Minél feljebb toljuk a kvantálási szinteket,
annál durvább lesz a kép, viszont annál kisebb
lesz a tömörítés aránya.
A
kvantálás után kapott 64 együttható túlnyomó
része 0 vagy igen kis abszolútértékű szám
lesz. A kvantálási
adatok megválasztásából következik, hogy a legtöbb
nem-zérus értékű együttható a blokk bal felső
sarkának közelében található, s attól távolodva
egyre több lesz a nulla. Ez a tény igen jól
kihasználható a kódolás során.
Evégett
rendezzük át az együtthatókat abban a
sorrendben, ahogyan a blokk bal felső sarkától a
jobb alsó sarok felé haladó törtvonalon
elhelyezkednek.
|
1 |
2 |
6 |
7 |
15 |
16 |
28 |
29 |
3 |
5 |
8 |
14 |
17 |
27 |
30 |
43 |
4 |
9 |
13 |
18 |
26 |
31 |
42 |
44 |
10 |
12 |
19 |
25 |
32 |
41 |
45 |
54 |
11 |
20 |
24 |
33 |
40 |
46 |
53 |
55 |
21 |
23 |
34 |
39 |
47 |
52 |
56 |
61 |
22 |
35 |
38 |
48 |
51 |
57 |
60 |
62 |
36 |
37 |
49 |
50 |
58 |
59 |
63 |
64 |
|
Az
első együttható a konstans-függvényt reprezentálja,
amely a blokkon belüli világosságkódok átlagértéke.
Ezt az együtthatót (az elektronika egyenáram
/direct current/ elnevezésének analógiájára) DC
együtthatónak nevezik. A többi együttható a
nem-konstans bázisfüggvényekhez tartozik; ezek az
AC - (váltakozó összetevő alternating current) együtthatók. A
JPEG szabvány szerint a blokkok DC együtthatóit
az AC együtthatóktól függetlenül kódolják, és
helyettük a blokkonkénti változásukat tárolják.
Az AC együtthatók kódolására változó hosszúságú
kódokat (adaptív VLC eljárással) használnak.
A
tömörítés eredménye az előbbiekben leírtak
szerint olyan bitfolyam, amelyik közvetlenül
felhasználható az eredeti képtartalom
rekonstrukciójára; ekkor sorfolytonos kép-felépítésről
beszélünk. Ez a JPEG eljárás leggyakoribb
felhasználási módja; pl. képi másolat készítéséhez
erre van szükség.
Egyes
felhasználási területeken kiemelt fontosságú,
hogy a kép helyreállítása során minél hamarabb
kerüljön felismerhető állapotba, még ha ennek
az is az ára, hogy a teljes rekonstrukció az előbbinél
kissé tovább tart (progresszív képfelépítés).
Előbb a DC együtthatók alapján áll össze egy
igen durva kép, melynél minden 8*8 pontos blokk
egy-egy átlagérték jellemez. A következő
ciklusban az első AC együtthatók szerinti módosítás
történik meg minden blokkban; ez 4*4 pontos mintákat
eredményez, s így haladunk az egyre finomabb
felbontás felé. (Tipikus alkalmazási terület: képi
adatbázisban kereséskor a durva képből egyre
finomabb képet hozunk létre, a folyamat bármikor
megszakítható - ha kiderül, hogy másik képre
van szükség.)
Eredeti
kép:
méret: 12.3 kbyte |
|
10%-os
tömörítés
méret: 11.6 kbyte
|
20%-os
tömörítés
méret: 8.5 kbyte
|
30%-os
tömörítés
méret: 6.5 kbyte
|
40%-os
tömörítés
méret: 5.6 kbyte
|
50%-os
tömörítés
méret: 4.8 kbyte
|
60%-os
tömörítés
méret: 4.3 kbyte
|
70%-os
tömörítés
méret: 3.7 kbyte
|
80%-os
tömörítés
méret: 3.0 kbyte
|
90%-os
tömörítés
méret: 2.1 kbyte
|
99%-os
tömörítés
méret: 1.2 kbyte
|
A
JPEG tömörítés hatékonysága
(látható, hogy 70%-os tömörítésnél még alig
észrevehető minőségromlás jelentkezik)
Fraktál-tömörítés
Meg
kell említenünk még egy másik, az eddigiektől
gyökeresen eltérő elvű, igen jó hatásfokú képtömörítési
eljárást is, amely a fraktálokon alapul és
1/40-1/80 tömörítési arányt eredményez, kismértékű
látványromlás árán. (A fraktálokat Michael
Barnsley, a számítógépes grafika egyik úttörő
kutatója fedezte fel.)
Az
eljárás lényege, hogy megkeresi a tónusos kép
fraktálokkal történő eőállításának szabályait
és ezeket tárolja. Hátránya, hogy igen jelentős
a tömörítés-irányú számítás-igénye; ezen
speciális processzorok alkalmazásával segítenek.
Ellentétben
a tömörítés viszonylagos lassúságával, a
helyreállítás rendkívül gyors lehet; pl.: egy
320*200 képpontból álló 24 bit/képpont színfelbontású
kép 386/25 MHz PC-n kevesebb mint egy másodperc
alatt készül el. További előny, hogy a helyreállítás
során a kép tetszőlegesen nagyítható, s ekkor látszatra
új részletek tűnnek elő, a globális mintázatok
lokális ismétlésével.
|