Stiskanje slik s postopkom JPEG

V začetku poglavja smo si ogledali, kako je mogoče zmanjšati velikost slikovne datoteke tako, da uporabimo manj bitov za predstavitev barve vsakega piksla. Metoda JPEG za stiskanje izkorišča vzorce slik, da ne bi po nepotrebnem zmanjševala kakovosti slik.

Na primer, spodnja slika prikazuje povečan pogled pikslov dane slike.

Opazimo lahko, da so si barve sosednjih pikslov pogosto zelo podobne, tudi v tem delu slike, ki ima veliko podrobnosti. Na primer, piksli, obkroženi z rdečim pravokotnikom, se postopoma spreminjajo od zelo temne do zelo svetle barve.

Metoda kodiranja z dolžinami čet v tem primeru ne bi delovala. Lahko uporabimo različico, ki določa barvo piksla, in nato pove, koliko pikslov je enake barve. Čeprav je večina sosednjih pikslov skoraj enake barve, je možnost, da so piksli dejansko enake barve, zelo majhna in skoraj ne najdemo zaporedja pikslov identične barve.


Obstaja način, kako lahko izkoristimo postopno spreminjanje barv. Za piksle v rdečem pravokotniku lahko ustvarimo približno različico teh barv, tako da navedemo samo barvi prvega in zadnjega piksla, računalnik pa bo izračunal barve pikslov med njima pod pogojem, da se barva med njimi postopoma spreminja. Tako lahko namesto shranjevanja barv 5 pikslov shranimo barvi le 2 pikslov – oseba, ki gleda sliko, pa verjetno ne bo opazila nobene razlike. To je stiskanje z izgubami, ker ne moremo natančno povrniti izvirnika, vendar je dovolj dobro za veliko namenov in nam prihrani veliko prostora.

Postopek JPEG, ki se pogosto uporablja za fotografije, uporablja bolj izpopolnjeno različico te ideje. Namesto da bi zajemali slikovne pike pravokotnikov 5×1, kot smo to storili ravnokar, deluje na blokih 8×8 pikslov. Namesto da bi ocenil vrednosti z linearno funkcijo, uporablja kombinacije kosinusnih valov (kot bomo videli v nadaljevanju).

Izraz JPEG je kratica za Joint Photographic Experts Group, skupino fotografskih strokovnjakov, ki je ustvarila standard. Ko govorimo o datoteki v formatu oziroma obliki JPEG, v bistvu večino časa mislimo na ovojnico JFIF (ang. JPEG File Interchange Format).

Osnovni potek izdelave datoteke JPEG iz bitne slike je naslednji. Najprej bitno sliko pretvorimo iz RGB v drug barvni prostor, imenovan YCbCr. Ta barvni prostor, ki ga uporabljajo tudi TV signali, kodira barve na drugačen način od RGB (čeprav pokriva enake barve).

Dve nadomestni komponenti, Cb in Cr, je mogoče močno stisniti. Komponenta Y – svetlost (ang. luma, luminosity) &ndas; je vrednost, ki označuje, kako svetel je piksel. Komponenti Cb in Cr – barvitost (ang. chroma, chrominescence) – sta spremembi modre in rdeče barve.

Za pretvarjanje iz RGB v YCbCr obstajajo enačbe, s pomočjo katerih lahko izračunamo vrednosti svetlosti in barvitosti za vsak RGB piksel.

Y  =   0 + (0.2990 × R) + (0.5870 × G) + (0.1140 × B)
Cb = 128 - (0.1687 × R) - (0.3313 × G) + (0.5000 × B)
Cr = 128 + (0.5000 × R) - (0.4187 × G) - (0.0813 × B)

Namesto da množimo različne vrednosti v času pretvarjanja, lahko rezultate predhodno izračunamo in shranimo v tabele ter tako izboljšamo izvajanje.