JPG oziroma JPEG

 

JPEG ali JPG (ang. Joint Photographic Experts Group) je rastrski slikovni format.

JPEG omogoča prikaz v 24-bitni True Color tehniki. Definiran je za črno bele slike, pri barvnih pa se stiska vsaka od komponent RGB posebej (osnovne barve rdeča, zelena in modra). Vsaka je predstavljena z enim zlogom, skupaj torej 24 bitov na piksel, kar je 16,7 miljonov barv.

Podatke v JPG datoteki so močno stisnjeni in zasedejo le 10% velikosti originala, kar je za prenos in shranjevanje super. Ker pa uporablja JPG stiskanje z izgubo, se pri stiskanju izgubijo podatki in poslabša kakovost slike. Izgubljene podatke pri stiskanju pa tudi ne moremo dobiti nazaj.

 

 

 

 

 

JPG je standardiziran mehanizem za stiskanje rastrskih slik. Zasnovan je tako, da lahko uporabnik faktor izgube oziroma kakovosti prilagodi velikosti slike. Lahko si izberemo faktor kakovosti med 1 in 100, kjer so nad 35 razlike zelo majhne in komaj zaznavne, pod 10 pa je kakovost slik že zelo slaba. Zasnovan je tudi tako, da izguba kakovosti čim manj vpliva na človekovo dojemanje. Vendar pa ima določene anomalije, ko stiskalno razmerje poveča (faktor kakovosti pod 10), npr. nenavadne učinke na meji blokov 8×8.

Primer stiskanja slike  vidiš spodaj. Lahko pa poskusiš tudi sam.

original
velikost: 283 KB

Račka by PickPik is licensed under CC CC0 1.0

faktor kakovosti = 75
velikost: 49 KB

Račka by PickPik is licensed under CC CC0 1.0

faktor kakovosti = 20
velikost: 14 KB

Račka by PickPik is licensed under CC CC0 1.0

faktor kakovosti = 10
velikost: 8 KB

Račka by PickPik is licensed under CC CC0 1.0

faktor kakovosti = 5
velikost: 5 KB

Račka by PickPik is licensed under CC CC0 1.0

faktor kakovosti = 3
velikost: 4 KB

Račka by PickPik is licensed under CC CC0 1.0

UPORABA

Kot smo že videli, je prioriteta JPG formata, da je čimbolj stisnjen in ne kakovost.

Zasnovan je bil za uporabo pri shranjevanju fotografij in naturalističnih umetniških del. JPG format ni primeren za črtne risbe, besedilne slike ali ostale slike z velikimi površinami ene barve ali zelo omejenim številom različnih barv. Za takšne slike delujejo bolje tehnike stiskanja brez izgub, npr. formata PNG ali GIF.

Za datoteke slik, za katere želimo, da se hitro prenašajo preko modemov, morajo biti čim manjše, zato se format JPEG uporablja predvsem  za prikazovanje slik na spletnih straneh, elektronski pošti ter na pomnilniških karticah fotoaparatov, na katerih nam je bolj pomembno, da slike čim manj zasedejo.

Prednosti JPEG:

  • 24-bitne barve z do 16 miljioni barvami
  • bogate barve
  • odlična za fotografe, ki potrebujejo veliko “detajlov”
  • večina se uporablja v velikih slikah
  • kompatibilna z vsemi operacijskimi sistemi

 

Slabosti JPEG:

  • veliko izgubljenih podatkov
  • ne podpira animacije
  • ne podpira transparence

POSTOPEK JPEG STISKANJA

 

Človeško oko lahko razlikuje svetlost slike bolj natančno, kot njene barvne informacije (pri nizki svetlobi sliko dejansko vidimo v črno-belih barvnih odtenkih). To pomeni, da mora biti vrednost svetlosti predstavljena bolj natančno, kot dve komponenti barvitosti. Postopek JPEG izkorišča očesno neravnovesje z zmanjševanjem vrednosti barvitosti.

1. KORAK: Pretvorba iz barvnega prostora RGB v YCbCr

Za pretvarjanje 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)
 
2. KORAK: Zmanjšanje vzorčenja

To je proces zmanjševanja vrednosti barvitosti za določen faktor in je zato prvi korak pri izgubi informacij. Pri formatu JPEG obstajajo trije sprejemljive možnosti: brez zmanjšanja vzorčenja, zmanjšanje vzorčenja z deljenjem vodoravnih vrednosti barvitosti na pol ali  zmanjšanje vzorčenja z deljenjem vodoravnih in navpičnih vrednosti barvitosti na pol. Ker barvitost ni zelo pomembna, lahko zmanjšamo količino barve (komponent Cb in Cr).

 

 3. KORAK: Uporaba DCT – Diskretne kosinusne transformacije

Piksle na sliki razdelimo v bloke velikosti 8×8 (matrike velikosti 8×8). Vsako barvno komponento razdelimo ločeno. Širine in dolžine slik pa večinoma niso ravno večkratniki števila osem pikslov, zato pride do nastanka nekaterih neobičajnih pikslov vzdolž desne in spodnje strani slike JPEG.

Vsak blok 8×8 pikslov slike JPEG lahko ustvarimo s seštevanjem različnih količin do največ 64 vzorcev, ki temeljijo na kosinusnih valovanjih različnih frekvenc. DCT spremeni sliko v komponente (spektralne “pasove”) iz belih in črnih pikslov z različno pomembnostjo glede na vidno kakovost. To vidimo na sliki spodaj.

Z DCT spremenjena slika by Wikimedia is licensed under CC CC0 1.0

 

 

Vsak blok 8×8 (matriko A) z uporabo DCT pretvorimo v drugo matriko (B). Ta transformacija analizira frekvence prvotnih vrednosti po vsaki vrstici in stolpcu z uporabo množice kosinusnih valovanj, ki nihajo pri različnih frekvencah in amplitudah.

vhod = matrika A 8x8 za intenziteto sivine s koeficienti od 0 do 255
B so matrike s koeficienti od -1024 do 1023, levo zgoraj so nižje frekvence, kjer je energija signala

Enačba DCT by prof. dr. Jože Rugelj is licensed under CC BY 4.0

Pogledamo si lahko primer na enem bloku.

Ker bomo uporabili metodo DCT in ker lahko kosinusna funkcija zavzame vrednosti med 1 in -1, bomo vrednosti premaknili tako, da jih bo večina okoli ničle. To pomeni, da bomo premaknili obseg vrednosti iz [0..255] v [-128..127]. Zato bomo od vsake vrednosti odšteli 128. Tako bomo spremenili matriko v komponente v spodnjo:


Standardna JPEG kvantizacijska tabela oziroma matrika

Ko izvedemo metodo DCT tipa II, dobimo matriko oziroma tabelo velikosti 8×8, ki vsebuje koeficiente. Ti koeficienti predstavljajo delež vsake od osnovnih slik v bloku.

Več o DCT.

Razlog za to je, da se lahko višje frekvence minimizirajo ali izničijo, ker izgub teh frekvenc ne zaznamo toliko skrajno, kot bi zaznali izgubo bolj energičnih nižjih frekvenc.

Zanimiva stvar pri tej transformaciji je, da se vrednost z največjo amplitudo nahaja v zgornji levi celici matrike (imenujemo jo tudi DC koeficient), vrednosti pa so tem manjše, čim bolj so oddaljene od te celice (vseh 63 drugih vrednosti, ki jih imenujemo tudi AC koeficienti).

5. KORAK: Kvantizacija

Zgornjo pretvorjeno matriko nato kvantiziramo. To je glavni del postopka, kjer pride do največjih izgub. Spomnimo se, da lahko odstranimo del z visokimi frekvencami, saj je človeško oko bolj občutljivo na nizke frekvence.

Kvantizacijo dosežemo z množico matrik 8×8, pri čemer vsaka predstavlja drugačen »faktor kakovosti« slike JPEG. Vrednost vsake celice delimo z ustrezno vrednostjo celice v kvantizacijski matriki in rezultat zaokrožimo na najbližje celo število (operacija z izgubo). Opazimo, da spodnja tabela vsebuje veliko ničel, kar predstavlja odstranjene visoke frekvence. Postopek JPG se “hvali” s tem, da lahko z vrednostmi brez teh ničel, dobimo nazaj skoraj enako sliko. 

6. KORAK: Kodiranje

Da bi čim bolj izkoristili dejstvo, da vrednosti matrike padajo iz zgornjega levega kota, vrednosti ne kodiramo po vrsticah, temveč v cikcakastem vzorcu. Celice z vrednostjo 0 se ponavadi pojavijo na koncu cikcakaste verige in jih lahko močno stisnemo. Zaporedje teh števil stisnemo z algoritmom kodiranja RLE.

Huffmanovo kodiranje je postopek stiskanja brez izgub. Ne pozabimo, da bomo za vsak blok 8×8 pikslov v izvirni sliki (192B informacij) dobili tri stisnjene, kvantizirane matrike, velikosti 8×8, pri čemer bosta matriki Cr in Cb najbolj stisnjeni.

V glavo datoteke pa se nato zapiše tabela kvantizacije in Huffmanovo kodiranje.

Razlaga na spodnjem posnetku za bolj radovedne:

Kako po vsem tem razširimo sliko JPEG v rastrsko bitno sliko, ki jo prikažemo na zaslonu?

Vse korake opravimo v obratnem vrstnem redu. Najprej moramo odkodirati Huffmanove stisnjene blok 8×8. Tako dobimo kvantizirano matriko, ki jo množimo po koeficientih z ustrezno kvantizacijsko matriko, da dobimo matriko DCT koeficientov. To nato spremenimo z inverznim postopkom DCT, da dobimo matriko komponent v barvnem prostoru YCbCr. Na koncu komponente teh matrik pretvorimo v barvni prostor RGB z uporabo inverznih enačb za pretvarjanje barv. Slika bo tako razširjena in pripravljena za prikaz.