If you're seeing this message, it means we're having trouble loading external resources on our website.

Ha webszűrőt használsz, győződj meg róla, hogy a *.kastatic.org és a *.kasandbox.org nincsenek blokkolva.

Fő tartalom

Veszteségmentes képtömörítés

Képek mindenhol vannak körülöttünk, az alkalmazások ikonjaitól kezdve az animált GIF-eken keresztül a fényképekig. A képfájlok sok helyet foglalhatnak el, ezért a számítógépek különböző algoritmusokat alkalmaznak tömörítésükre.
A legegyszerűbb képek esetében a számítógépek használhatják az úgynevezett futamhossz kódolás (run-length encoding, RLE) tömörítési algoritmust.

A bittérképek

Mielőtt elmélyednénk a képtömörítésben, nézzük, hogyan tudunk képeket binárisan ábrázolni bármiféle tömörítés nélkül.
Íme egy egyszerű kép, egy 16×16-os szív ikon:
Piros szív ikon fehér háttérrel
Közelítsünk rá és helyezzünk rá egy rácsot, hogy jobban láthassuk, pontosan melyik pixel piros és melyik fehér:
16×16 pixeles rács a szív ikonnal. A szív piros pixelekből áll, a háttér pedig fehér pixelekből.
A szív ikon csak két színből, pirosból és fehérből áll, így a számítógép binárisan úgy tudja ábrázolni, hogy a piros pixelekhez 1-et, a fehér pixelekhez pedig 0-t rendel hozzá. Ezt bittérképnek nevezzük, mivel a pixelek bitekre való leképezéséről van szó.
Ezzel a módszerrel a szív ikon a következőképpen jelenik meg:
0001100000110000
0011110001111000
0111111011111100
1111111111111110
1111111111111110
1111111111111110
1111111111111110
1111111111111110
0111111111111100
0011111111111000
0001111111110000
0000111111100000
0000011111000000
0000001110000000
0000000100000000
Képzeld el, hogy az eddigi szöveget lediktálod valakinek. Egy idő után lehet, hogy olyanokat mondanál, mint „öt nulla” a „nulla nulla nulla nulla nulla" helyett. Nos, erre a számítógép is képes...

RLE tömörítési algoritmus

A futamhossz-kódolásnál a számítógép minden egyes sort számokkal helyettesít. Ezek megadják, hogy hány egymást követő pixel azonos színű. A számsor mindig a fehér pixelek számával kezdődik.
Az első sor például 3 fehér pixelt, 2 piros pixelt, 5 fehér pixelt, 2 piros pixelt, majd 4 fehér pixelt tartalmaz:
1 100 000 110 000
Ez az alábbi módon ábrázolható:
3,2,5,2,4
A negyedik sor azért érdekes, mert piros pixellel kezdődik. A futamhossz-kódolások a fehér pixelek számával kezdődnek, ezért ezt a program így ábrázolná:
0,15,1
Mérd fel tudásodat!
Íme a szív ikon bittérkép második sora:
11 110 001 111 000
Hogyan jelenne meg ez a sor RLE-ben?
Válassz egyet:

RLE kitömörítés

Ha egy számítógép futamhossz kódolást használ, képesnek kell lennie arra, hogy a tömörített ábrázolásból tökéletesen visszaállítsa a képet – és nekünk is képesnek kell lennünk rá, ha követjük a számítógép módszerét.
Próbáljuk ki! Íme egy fekete-fehér ikon RLE-vel tömörített változata:
4, 9, 3
4, 7, 2, 1, 2
4, 7, 2, 1, 2
4, 9, 3
4, 7, 5
4, 7, 5
5, 5, 6
0, 15, 1
1, 13, 2
Az első sorban 4 fehér képpont van, majd 9 fekete képpont, aztán 3 fehér képpont. Ez így néz ki:
16 pixelből álló sor, 4 fehérrel kezdve, majd 9 fekete, majd 3 fehér.
A következő sorban 4 fehér pixel van, majd 7 fekete, 2 fehér, 1 fekete és 2 fehér. Ez így néz ki:
16 pixelből álló sor, kezdve 4 fehérrel, majd 7 fekete, majd 2 fehér, majd 1 fekete, végül 2 fehér.
Ha továbbmegyünk, a végső ikon egy csésze és egy csészealj lesz:
16 pixel széles és 19 pixel magas rács, ahol a pixelek fekete színnel vannak kitöltve, csésze és csészealj alakban.
Mérd fel tudásodat!
Az alábbiakban egy 6×6-os fekete-fehér ikon RLE-vel tömörített változata látható:
2,2,2
2,2,2
0,6
0,6
2,2,2
2,2,2
Milyen matematikai jelre hasonlít ez az ikon?
Válassz egyet:

A tömörítés aránya

Azt állítottuk, hogy a futamhossz kódolás helyet takarít meg az egyszerű képek tárolásakor – de mennyi helyet?
Hogy ezt kiderítsem, írtam egy programot, amely fekete-fehér bittérképeket kódol RLE-vel. Az alábbi táblázatban az eredmény összefoglalására három, egyre nagyobb méretű szív ikont választottam ki:
KépMéretTömörítetlenRLE utánHelymegtakarítás
Kis fekete-fehér szív ikon
16×1625622810,9%
Közepes fekete-fehér szív ikon
32×32102453248,0%
Nagy fekete-fehér szív ikon
128×12816384289882,3%
Vess egy pillantást az utolsó oszlopra, a helymegtakarításra. Felismerted a sémát? Ahogy egyre nagyobb a méret, egyre több helyet takarítunk meg, mivel a futamok sokkal hosszabbak.
Mi a helyzet az azonos méretű képekkel? Az alábbi táblázat három nagy ikon RLE-vel való tömörítésének eredményeit foglalja össze:
KépMéretTömörítetlenRLE utánHelymegtakarítás
Nagy fekete-fehér szív ikon
128×12816384289882,3%
Nagy, fekete-fehér caduceus ikon (szárnyas bot köré tekeredő kígyók)
128×12816384829849,4%
Nagy fekete-fehér korona ikon
128×12816384873046,7%
Most már biztosan érted, miért a szív ikont választottam példának: a sok fekete vagy fehér futamnak köszönhetően nagyon jól tömöríthető. Az RLE-tömörítés noha szintén a felére csökkenti a többi ikon méretét, de közel sem takarít meg ennyi helyet.
Sőt, néha az RLE egyáltalán nem tud helyet megtakarítani...

Az RLE korlátai

Nézzük most ezt a 16×16-os ikont:
Ikon, melynek minden egyes pixele véletlenszerű színekből áll.
Nagyítsunk rá, hogy minden egyes pixel láthatóvá váljon:
16×16 pixeles rács. Minden egyes pixel egy véletlenszerű szín.
Az ikon minden képpontja különböző színű, és nincsenek futamok.
A futamhossz kódolás egyáltalán nem képes egy ilyen képet tömöríteni. Ezt a példát csak ehhez a leckéhez találtam ki (ez a program generálta), ez nem olyasmi, ami gyakran előfordul.
A fényképek azonban hasonlóak ehhez az ikonhoz – a való világ tele van olyan részletekkel, amelyek megszakítják a futamokat.
A Khan Academy csapatának oldalán található ez a kedves fotó egy kutyáról, amint a számítógép képernyőjét nézi:
Egy fotó egy kutyáról, amint figyelmesen bámulja a számítógép képernyőjét.
Normál felbontásnál úgy tűnik, mintha hasonló színű blokkok lennének, akár a kutya bundájában, akár a számítógép szürke képernyőjében.
Nagyítsunk rá a pixelekre:
Pixeles rács, amely egy számítógép képernyőjét néző kutya orrának nagyított részleteit mutatja. A pixelek kékes és narancssárgás színűek, de sokféle a kék és a narancssárga árnyalat.
Láthatod, hogy még a látszólag egyszerű számítógép képernyője is rengeteg hasonló, de nem teljesen azonos színt tartalmaz. A pixelek futamhossz kódolása ebben az esetben nemigen csökkentené a fájlméretet.

Az RLE felhasználási területei

Az RLE tömörítés igen népszerű technika volt abban az időben, amikor a legtöbb számítógépen lévő kép korlátozott színpalettájú ikonokból állt.
Manapság a képeink összetettebbek, és nem tartalmaznak annyi azonos színű futamot.
Hol használják ma az RLE-t? A faxkészülékek még mindig használják az RLE-t a faxolt dokumentumok tömörítésére, mivel csak fekete-fehér betűket kell ábrázolniuk. A JPEG képek a tömörítés utolsó szakaszában használják az RLE-t, de először egy összetettebb algoritmussal tömörítik a fényképrészleteket. Ezt hamarosan részletesebben is megvizsgáljuk.

🙋🏽🙋🏻‍♀️🙋🏿‍♂️Kérdésed van a témával kapcsolatban? Szívesen válaszolunk, csak kérdezz alább, a „Kérdések” részben!

Szeretnél részt venni a beszélgetésben?

Még nincs hozzászólás.
Tudsz angolul? Kattints ide, ha meg szeretnéd nézni, milyen beszélgetések folynak a Khan Academy angol nyelvű oldalán.