Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Stiskanje slike
Interaktivni mediji 2 izr. prof. dr. Aleš Hladnik
Stiskanje rastrske slike
Stiskanje (kompresija, zgoščevanje) slikovnih podatkov
Stiskanje
(kodiranje)
Stisnjena
slika
Shranjevanje
ali prenos
Izvorna
slika
Obnovljena
slika
Raztezanje
(dekodiranje)
Shramba,
prikaz, … slike
𝑓 𝑥, 𝑦
𝑓(𝑥, 𝑦)
Brezizgubno in izgubno stiskanje
Brezizgubno stiskanje: obnovljena (= rekonstruirana,
raztegnjena) slika = izvorna slika
Izgubno stiskanje: obnovljena slika ≠ izvorna slika
Velikost datoteke izgubno stisnjene slike je na račun slabše
kakovosti manjša od velikosti datoteke brezizgubno stisnjene
slike
𝒇(𝒙, 𝒚)
𝒇(𝒙, 𝒚)
𝒇 𝒙, 𝒚
𝒇 𝒙, 𝒚
Zakaj je možno sliko stisniti?
Slike v splošnem vsebujejo eno ali več oblik redundance
(odvečnosti), ki jih je možno pri stiskanju izkoristiti/odstraniti
Kodirna redundanca: nekatere vrednosti pikslov so pogostejše od
drugih, nekatere se sploh na pojavljajo Huffmanovo kodiranje
Prostorska (medtočkovna) redundanca: je posledica korelacije med
posameznimi piksli
Psihovizualna redundanca: podatki, ki jih naš vidni sistem (Human
visual system, HVS) ne zazna, t.j. nebistvena informacija DCT
Metode slikovnega in video stiskanja
Standardi in formati
Isti algoritem mora biti uporabljen tako za stiskanje kot za
raztezanje nevarnost monopolizacije!
Standardizacija algoritmov stiskanja in mehanizmov za prenos
podatkov je nujna za njihovo uporabnost v različnih napravah in
konkurenčnost
Brezizgubno stiskanje: Huffmanovo kodiranje
Huffmanovo kodiranje je primer stiskanja s spremenljivo dolžino
kode
Simbolom (= vrednostim pikslov oz. barvam), ki se pojavljajo
pogosteje, dodelimo krajšo kodo (= z manj biti), tistim z
redkejšo pojavnostjo pa daljšo kodo (= z več biti)
Rezultat je krajša povprečna dolžina kode PDK (= št. bitov za
simbol oz. niz simbolov)
pogosteje
zastopane
vrednosti
redkeje
zastopane
vrednosti
Histogram slike
Huffmanovo kodiranje
Koda s spremenljivo dolžino
(= Huffmanova koda)
Koda s fiksno dolžino
2 bita / simbol
255
186
128
87
00
01
10
11
2
2
2
2
ᅳ
Kako močno stiskanje lahko dosežemo s Kodo 2?
= 2 * 0.25 + 1 * 0.47 + 3 * 0.25 + 3 * 0.03 = 1.81 bit 𝑃𝐷𝐾 = 𝑙𝑖 𝑝𝑖
4
𝑖=1
= … = 1.66 bit 𝐻 = − 𝑝𝑖 log2(𝑝𝑖)
4
𝑖=1
Entropija = najkrajša
možna PDK
Huffmanovo kodiranje – algoritem
Naj slika vsebuje N različnih simbolov (= vrednosti pikslov) s
pogostostjo pojavljanja (= verjetnostjo) pi kjer velja 1 ≤ i ≤ N
1. Razvrsti simbole po padajoči verjetnosti. Vsak simbol
predstavlja eno vejo (vozlišče) nastajajočega drevesa.
2. Združi dve veji z najmanjšo verjetnostjo – zadnja dva simbola v
razvrstitvi – v novo vozlišče, katerega verjetnost je vsota obeh
vej. Dodeli "0" zgornji in "1" spodnji veji.*
3. Ponavljaj korak 2., dokler ti ne ostane le še eno samo vozlišče z
verjetnostjo 1.00 ki tvori korensko vozlišče Huffmanovega
drevesa.
4. Huffmanovo kodo za posamezen simbol dobiš tako, da prebereš
njegove binarne vrednosti po vrsti od korenskega do
terminalnega vozlišča.
* Ta dodelitev je arbitrarna, zato Huffmanove kode niso edinstvene!
Huffmanovo kodiranje
Huffmanovo kodiranje
I
I
I
II
III
IV
V
I II III IV V
začnemo tu
Izgubno stiskanje slike – splošen delokrog
Diskretna kosinusna
transformacija (DCT)
Inverzna diskretna kosinusna
transformacija (IDCT)
Huffmanovo
kodiranje
Huffmanovo
dekodiranje
Kvantizacija
* * Tu najprej pride do
dekvantizacije, čeprav je
kvantizacija ireverzibilen korak
JPEG
Kompresijski standard razvit s strani Joint Photographic
Experts Group (JPEG) l. 1992
JPEG določa nabor algoritmov za stiskanje rastrskih slik
(sivinskih in barvnih) in format za prenos podatkov
Dva algoritma za stiskanje:
Izgubni algoritem, ki temelji na 2D DCT, omogoča kakovost slike v
razponu med "zelo dobro" do "odlično" (= visually indistinguishable)
JPEG-LS (znan tudi kot LOCO-I): brezizgubno in skoraj brezizgubno
stiskanje slike, temelji na DPCM*; v praksi redko uporabljan
Izkorišča značilnosti / omejitve človeškega vidnega sistema
Večja občutljivost na variacije v luminanci (Y) kot v krominanci (Cb , Cr)
Večja občutljivost na variacije v nizko- kot v visokofrekvenčnih območjih
slike
* Differential Pulse Code Modulation; vrsta prediktivnega brezizgubnega stiskanja
Kontrastna občutljivost človeškega vidnega sistema
Delokrog JPEG stiskanja
(Pred)obdelava slike: particija v 8x8 bloke, barvno podvzorčenje*
Transformacija: Diskretna kosinusna transformacija (FDCT)
Kvantizacija
Entropijsko kodiranje: Huffmanovo (ali aritmetično)
* Chroma subsampling
Pretvorba barvnega prostora in podvzorčenje
Močna korelacija med R, G in B kanalom
Da bi lahko izvedli dekorelacijo slike, jo je potrebno pretvoriti
iz barvnega prostora RGB v YCbCr
Človeški vidni sistem je občutljivejši na variacije v luminanci
(Y) kot v krominanci (Cb , Cr)
Luminanco stisnemo v polni ločljivosti, medtem ko oba
krominančna kanala podvzorčimo (2:1 horizontalno in 1:1 ali
2:1 vertikalno) – barvno podvzorčenje
Diskretna kosinusna transformacija (DCT)
Pri DCT je končno zaporedje točk izraženo kot vsota
kosinusnih funkcij oscilirajočih z različnimi frekvencami
DCT ustreza realnemu delu diskretne Fourierove
transformacije (DFT)
Diskretna kosinusna transformacija
DCT pretvori vsak 8 x 8 slikovni blok v linearno kombinacijo 64
baznih slik (= baznih funkcij)
Kjer je 8 x 8 blok popolnoma enakomeren, bo zgolj DC* koefficient
(= F(0,0)) različen od nič, vsi AC koeficienti pa bodo enaki nič
Kjer pa je v 8 x 8 bloku prisotna velika variabilnost, bodo številni AC
koeficienti različni od nič
Bazna slika, ki ustreza najnižji
frekvenci v obeh smereh
Vsaka od 64 baznih slik
predstavlja frekvenco, vsak
DCT koeficient pa pripadajočo
amplitudo (= utež) v bloku.
0 1 2 3 4 5 6 7
0
1
2
3
4
5
6
7
* DC = Direct Current, AC = Alternate Current
Diskretna kosinusna transformacija
Diskretna kosinusna transformacija
DCT
svetlost kvadrata
ustreza velikosti
konkretnega DCT
koeficienta
devet 8 x
8 blokov
im(121:144, 121:144)
Kvantizacija
Glavni korak v postopku JPEG stiskanja, kjer pride do generiranja
napake, a tudi do močnega zmanjšanja velikosti slikovne datoteke
Vsak blok DCT koeficientov je podvržen kvantizaciji = deljenju z
ustrezno vrednostjo kvantizacijske tabele
Vrednosti luminančne in krominančne kvantizacijske tabele so
določene na podlagi modela delovanja človeškega vidnega sistema
Luminančna kvantizacijska tabela Krominančna kvantizacijska tabela
Primer kvantizacije
F
F:
DCT
Z(0,0) = round(F(0,0) / Q(0,0) = round(214 / 16) = round(13.375) = 13
Kvantizacija
Stopnjo JPEG stiskanja (= kakovost slike) lahko uravnavamo z
množenjem vrednosti koeficientov kvantizacijske tabele Q
Q 2Q 4Q
8Q 16Q 32Q
Cikcak skeniranje
Po kvantizaciji dobijo številni DCT koeficienti – zlasti tisti, ki
ustrezajo višjim frekvencam – vrednost 0
S cikcak skeniranjem 8x8 DCT blokov dobimo kar se da
dolgo zaporedje ničel RLC*
Cikcak sken: 13 4 3 0 -2 0 1 1 0 1 -1 -1 1 1 0 0 0 … 0
niz 50 ničel
Običajen rastrski sken: 13 4 0 1 0 0 0 0 3 -2 1 1 0 0 0 0 0 0 1 … 0 0 0 … 0
niz 31 ničel
* Run Length Coding
Entropijsko kodiranje: Huffmanovo ali aritmetično
Nadaljnja kompresija se doseže z izkoriščanjem kodirne
redundance Huffmanovo kodiranje
JPEG standard omogoča tudi uporabo aritmetičnega
kodiranja, ki je matematično učinkovitejše od Huffmanovega
Zaradi patentnih vprašanj in počasnejšega kodiranja in
dekodiranja se ta opcija v praksi redko uporablja
Štiri možne implementacije standarda JPEG
Sekvenčno (predstavljeno na prejšnjih slajdih)
Progresivno
Hierarhično
Brezizgubno (temelji na prediktivnem kodiranju, ne na DCT)