42
Samo Bračić BREZIZGUBNO STISKANJE SLIK S ŠTIRIŠKIMI DREVESI Diplomsko delo Maribor, marec 2012

Navodila za izdelavo diplomske naloge - UM

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Navodila za izdelavo diplomske naloge - UM

Samo Bračić

BREZIZGUBNO STISKANJE SLIK S ŠTIRIŠKIMI DREVESI

Diplomsko delo

Maribor, marec 2012

Page 2: Navodila za izdelavo diplomske naloge - UM
Page 3: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 1

Diplomsko delo univerzitetnega študijskega programa

Brezizgubno stiskanje slik s štiriškimi drevesi

Študent: Samo Bračić

Študijski program: Računalništvo in informacijske tehnologije UN

Mentor:

Somentor:

doc. dr. David Podgorelec, univ.dipl.inţ. rač. in inf.

doc. dr. Gregor Klajnšek, univ.dipl.inţ. rač. in inf.

Maribor, marec 2012

Page 4: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 2

Page 5: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 3

ZAHVALA

Zahvaljujem se mentorju dr. Davidu Podgorelcu in

somentorju dr. Gregorju Klajnšku za pomoč in

vodenje pri opravljanju diplomskega dela.

Posebna zahvala velja staršem, ki so mi omogočili

študij.

Page 6: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 4

BREZIZGUBNO STISKANJE SLIK S ŠTIRIŠKIMI DREVESI

Ključne besede: stiskanje, slike, štiriško drevo

UDK: 004.932(043.2)

Povzetek

V diplomskem delu obravnavamo algoritem brezizgubnega stiskanja slik s uporabo

podatkovne strukture štiriških dreves, ter njegove prednosti in slabosti. Prav tako

preučimo uporabnost Grayevih kod pri tovrstnem stiskanju in jih uporabimo kot del

algoritma. Algoritem izboljšamo s Huffmanovim algoritmom stiskanja s prilagajanjem.

Page 7: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 5

QUADTREE BASED LOSSLESS IMAGE COMPRESSION

Key words: stiskanje, slike, štiriško drevo

UDK: 004.932(043.2)

Abstract:

This thesis consideres quadtree based lossless image compression, its advantages and

disadvantages. Usage of Gray codes for the means of compression is also studied and

implemented. The algorithm is improved by Huffman’s adaptive method of compression.

Page 8: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 6

VSEBINA

1 UVOD ........................................................................................................................... 8

2 DIGITALNA SLIKA .................................................................................................. 9

3 ŠTIRIŠKO DREVO .................................................................................................. 11

3.1 STRUKTURA ŠTIRIŠKEGA DREVESA ....................................................................... 11

3.2 UPORABA ŠTIRIŠKIH DREVES V MULTIMEDIJIH ..................................................... 11

4 GRAYEVE KODE .................................................................................................... 13

4.1 OPIS ..................................................................................................................... 13

4.2 PRETVARJANJE BINARNE KODE V GRAYEVO KODO ............................................... 14

4.3 PRETVARJANJE GRAYEVE KODE V BINARNO ŠTEVILO ........................................... 15

4.4 UPORABA GRAYEVIH KOD PRI STISKANJU SLIK S ŠTIRIŠKIMI DREVESI .................. 15

5 ALGORITEM STISKANJA SLIK S ŠTIRIŠKIMI DREVESI ........................... 17

5.1 DELITEV NA BITNE PLOSKVE ................................................................................ 17

5.2 GRADNJA ŠTIRIŠKIH DREVES ................................................................................ 17

5.3 SHRANJEVANJE DREVESA V DATOTEKO ................................................................ 18

6 ALGORITEM RAZŠIRJANJA SLIK S ŠTIRIŠKIMI DREVESI ...................... 20

6.1 GRADNJA ŠTIRIŠKIH DREVES S SPROTNIM BARVANJEM BITNIH PLOSKEV .............. 20

6.2 ZDRUŢITEV BITNIH PLOSKEV V KONČNO SLIKO..................................................... 21

7 IZBOLJŠAVA Z VPELJAVO HUFFMANOVEGA ALGORITMA

STISKANJA S PRILAGAJANJEM................................................................................ 22

7.1 HUFFMANOV ALGORITEM S PRILAGAJANJEM ........................................................ 22

7.2 STISKANJE SLIK S METODO ŠTIRIŠKIH DREVES IN HUFFMANOVIM ALGORITMOM .. 22

7.3 RAZŠIRJANJE SLIK, STISNJENIH Z METODO ŠTIRIŠKIH DREVES IN HUFFMANOVIM

ALGORITMOM ................................................................................................................... 26

8 REZULTATI ............................................................................................................. 28

8.1 TESTNI PRIMER 1 .................................................................................................. 28

8.2 TESTNI PRIMER 2 .................................................................................................. 29

Page 9: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 7

8.3 TESTNI PRIMER 3 .................................................................................................. 30

8.4 TESTNI PRIMER 4 .................................................................................................. 31

8.5 TESTNI PRIMER 5 .................................................................................................. 32

8.6 TESTNI PRIMER 6 .................................................................................................. 33

8.7 TESTNI PRIMER 7 .................................................................................................. 34

8.8 INTERPRETACIJA REZULTATOV ............................................................................. 35

9 SKLEP ........................................................................................................................ 36

10 LITERATURA IN VIRI ........................................................................................... 37

Page 10: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 8

1 UVOD

S shranjevanjem slik v digitalni obliki se je pojavila tudi potreba po stiskanju takšnih

podatkov zaradi varčevanja s pomnilniškimi viri in hitrejšega prenosa podatkov. Cilj

stiskanja slik je zmanjšati velikost datoteke s reduciranjem podatkov na najbolj ključne

podatke. S tem namenom je bilo v preteklosti razvitih ţe obseţno število algoritmov

stiskanja, med katerimi je tudi algoritem brezizgubnega stiskanja z uporabo podatkovne

strukture štiriških dreves.

Stiskanje slik je lahko z izgubami ali brez. Stiskanje z izgubami se uporablja predvsem

za naravne slike, kot so digitalne fotografije, kjer nam manjša velikost datoteke za namene

shranjevanja in prenašanja pomeni več, kakor pa izguba manjših detajlov slike. Stiskanje

brez izgub je primerno za grafike, kjer je vsaka podrobnost slike pomembna, na primer

tehnične in medicinske slike.

V tem diplomskem delu bomo predstavili algoritem brezizgubnega stiskanja s

štiriškimi drevesi in preučili, kako se brezizgubno stiskanje s štiriškimi drevesi obnese na

različnih tipih digitalnih slik, ter za kateri tip slik je najbolj primerno. Ob spoznavanju

algoritma brezizgubnega stiskanja slik s štiriškimi drevesi bomo opisali tudi lastnosti in

uporabnost Grayevih dvojiških kod.

Prav tako bomo predstavili, kako lahko algoritem brezizgubnega stiskanja slik s

štiriškimi drevesi izboljšamo z vpeljavo Huffmanovega algoritma stiskanja s

prilagajanjem.

Diplomsko delo je, vključno z uvodom, sestavljeno iz osmih poglavij. Po uvodu bomo

v drugem poglavju predstavili pojem digitalne slike. V tretjem poglavju bomo opisali

strukturo štiriških dreves in njihovo uporabo v multimediji. Sledila bo razlaga Grayevih

kod. Nato bomo v petem in šestem poglavju opisali algoritem stiskanja in razširjanja slik s

štiriškimi drevesi, v sedmem poglavju bomo predstavili izboljšavo z uporabo

Huffmanovega algoritma s prilagajanjem, katerega rezultate bomo predstavili v osmem

poglavju in povzeli v devetem, sklepnem poglavju.

Page 11: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 9

2 DIGITALNA SLIKA

Digitalna slika je pravokotno polje slikovnih točk (pikslov), urejenih v m vrstic in n

stolpcev. Izrazu m×n pravimo ločljivost slike. Moderni prikazovalniki prikazujejo veliko

barv, zato je piksel predstavljen kot 24-bitna številka, kjer deleţ rdeče, zelene in modre

barve vsak zaseda 8 bitov. Tako je lahko 24-bitni piksel predstavljen v eni izmed 224

barv,

kar je pribliţno 16,78 milijonov barv. Tako slika s 24-bitnimi piksli in ločljivostjo

512×512 zaseda 786.432 zlogov pomnilnika, medtem ko pri ločljivosti 1024×1024 zaseda

celo 3.145.728 zlogov. Zaradi takšnih velikosti zasedanja pomnilniških virov je pomembno

stiskanje [1]. Slike, ki jih obravnavamo v tej diplomski nalogi imajo dodan še kanal alfa

(tako imenovani barvni prostor RGBA), kar pomeni da vsak piksel zaseda 32 bitov.

Za namene stiskanja slik je pomembno, da ločimo naslednje tipe slik:

monokromatska slika: slika, kjer ima vsak piksel lahko zgolj eno izmed dveh

vrednosti, ponavadi sta to bela in črna barva. Vsak piksel je predstavljen z enim

bitom, zato je monokromatska slika najenostavnejši tip slike.

sivinska slika: vsak piksel v sivinski sliki ima lahko eno izmed n vrednosti (od 0

do n -1), kar pomeni, da ima lahko enega izmed 2n odtenkov določene barve.

Vrednost n predstavlja število bitov za posamezen piksel in je ponavadi iz mnoţice

(4,8,12,16,24 itd). Mnoţici najbolj obteţenih (običajno vodilnih) bitov vseh pikslov

slike pravimo najtežja bitna ploskev. Sivinska slika ima n bitnih ploskev.

zvezna slika: sosednja piksla v zvezni sliki se razlikujeta za eno ali zelo majhno

število enot. Posledica tega je, da oko s spremljanjem pikslov zaznava zvezen

prehod med barvami na sliki. Zvezne slike so ponavadi naravne slike (digitalne

fotografije ipd.).

diskretna slika: diskretna slika je ponavadi umetno ustvarjena slika, ki lahko ima

malo ali mnogo barv, nima pa šuma in zabrisanih robov, tako kot naravne slike.

Narisani objekti in linije imajo jasne in strogo določene robove in so zato v

močnem kontrastu s preostankom slike (ozadjem). Stiskanje z izgubami se izkaţe

Page 12: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 10

pri takšnem tipu slike za neučinkovito, saj lahko ţe nekaj spremenjenih pikslov prej

jasno razločljiv vzorec naredi za nerazpoznavnega.

Page 13: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 11

3 ŠTIRIŠKO DREVO

3.1 Struktura štiriškega drevesa

Štiriško drevo je podatkovna struktura, kjer je vsako vozlišče list z uporabnimi podatki, ali

pa vmesno vozlišče, ki se veji v štiri podrejena štiriška drevesa. Takšno strukturo prikazuje

slika 1 . Strukturo sta poimenovala štiriško drevo (v angleščini: Quadtree) Raphael Finkel and

J.L. Bentley leta 1974 [5].

Slika 1: Struktura štiriškega drevesa.

3.2 Uporaba štiriških dreves v multimedijih

Štiriška drevesa so najpogosteje uporabljena za delitev dvodimenzionalnega prostora z

rekurzivno delitvijo v štiri kvadrante oziroma regije. Kadar uporabljamo štiriško drevo kot

podatkovno strukturo za kompresijo slike, ţelimo v liste drevesa zajeti kvadrante slike, ki

vsebujejo enake piksle. Če je slika enobarvna, predstavlja koren drevesa informacijo o sliki

kot celoti, v nasprotnem primeru pa se razveji v štiri poddrevesa, ki ustrezajo štirim enako

velikim kvadrantom slike, tako kot to prikazuje slika 2. Rekurzivno se ta poddrevesa lahko

Page 14: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 12

vejijo na enak način, tako da bi v najslabšem primeru (če bi vsak piksel bil drugačne barve)

dobili polno štiriško drevo, kjer bi vsak list vseboval svoj piksel slike.

Slika 2: Primer uporabe štiriških dreves pri določanju enobarvnih regij

Štiriška drevesa so mnogo laţja za manipulacijo in dostopanje kot ostali modeli, zato

je njihova uporaba v računalniški grafiki zelo obseţna. Popularna so predvsem v tako

imenovani fraktalni grafiki, saj s štiriškimi drevesi z lahkoto implementiramo rekurzivne

slike: oče drevesa ima štiri sinove, od katerih trije vsebujejo kazalec na očeta, en pa

vsebuje dejansko sliko [6].

Ostale prednosti štiriških dreves so:

Sliko izbrišemo v zgolj enem koraku. Vse kar moramo narediti, je, da izbrišemo

očeta drevesa.

Pribliţevanje določenega kvadranta je enokoračna operacija.

Če ţelimo zmanjšati kompleksnost slike, je dovolj ţe, da odstranimo zadnji nivo

vozlišč.

Dostopanje do določenih regij slike je zelo hitra operacija, kar je zelo uporabno za

posodabljanje območij slike.

Page 15: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 13

4 GRAYEVE KODE

4.1 Opis

Grayeva koda (poimenovana po Franku Gray-u) je dvojiški številski sistem, kjer se

dve zaporedni vrednosti razlikujeta zgolj v enem bitu [3]. Prvih 15 vrednosti 4-bitne

Grayeve kode prikazuje tabela 1. Prav tako je znana kot zrcalna dvojiška koda. Grayeva

koda velikosti 1 bita je enaka binarni kodi.

Tabela 1: Primerjava 4-bitne binarne in Grayeve kode.

Decimalno število Binarna koda Grayeva koda

0 0000 0000

1 0001 0001

2 0010 0011

3 0011 0010

4 0100 0110

5 0101 0111

6 0110 0101

7 0111 0100

8 1000 1100

9 1001 1101

10 1010 1111

11 1011 1110

12 1100 1010

13 1101 1011

14 1110 1001

15 1111 1000

Page 16: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 14

4.2 Pretvarjanje binarne kode v Grayevo kodo

Pretvorba binarne kode v Grayeve kodo poteka z uporabo logične operacije XOR

(eksplicitni ali). Operacija XOR vrne 0, če sta obe vrednosti enaki, v nasprotnem primeru

vrne 1 (tabela 2). Najprej prepišemo najlaţji bit, nato pa se sprehodimo po preostalih bitih

v binarni kodi od najlaţjega do najteţjega bita v kodi. Izračun Grayeve kode prikazuje

tabela 3. Nad trenutnim in sosednjim bitom izvedemo operacijo XOR in zapišemo rezultat

v Grayevo kodo [3].

Vrednost 1 Vrednost 2 Vrednost 1 XOR Vrednost 2

0 0 0

0 1 1

1 0 1

1 1 0

Tabela 2: Logična operacija XOR.

Primer:

100100102 = 7310

Binarna koda Operacija Grayeva koda

10010010 Prepišemo najlaţji bit 0

10010010 0 XOR 1 10

10010010 1 XOR 0 110

10010010 0 XOR 0 1100

10010010 0 XOR 1 11010

10010010 1 XOR 0 110110

10010010 0 XOR 0 1101100

10010010 0 XOR 1 11011010

Tabela 3: Pretvorba binarnega števila v Grayevo kodo.

Page 17: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 15

4.3 Pretvarjanje Grayeve kode v binarno število

Pri pretvarjanjanju Grayeve kode v binarno število prepišemo najteţji bit. Nato izvajamo

operacijo XOR nad naslednjim bitom v Grayevi kodi in pred tem pridobljenim bitom

binarne kode (tabela 4).

Primer:

11011010Gray = 732

Grayeva koda Operacija Binarna koda

11011010 Prepišemo najteţji bit 1

11011010 1 XOR 1 10

11011010 0 XOR 0 100

11011010 1 XOR 0 1001

11011010 1 XOR 1 10010

11011010 0 XOR 0 100100

11011010 1 XOR 0 1001001

11011010 0 XOR 0 10010010

Tabela 4: Pretvarjanje Grayeve kode v binarno kodo.

4.4 Uporaba Grayevih kod pri stiskanju slik s štiriškimi drevesi

Pri metodi stiskanja slike s štiriškimi drevesi, barvne slike stiskamo, tako da razdelimo

sliko na enobarvne ploskve. Če uporabljamo barvni prostor RGBA, tako razdelimo sliko na

rdečo, zeleno, modro in alfa ploskev.

Dobljene ploskve lahko razdelimo še na 8 bitnih ploskev, tako da decimalne vrednosti

pikslov pretvorimo v binarno kodo, kjer vsak bit leţi na svoji bitni ploskvi. Takšne

dvobarvne bitne ploskve učinkoviteje stisnemo, saj obstaja velika verjetnost, da bodo

enobarvna področja obseţnejša.

Pri stiskanju bitnih ploskev se pokaţe uporabnost Grayevih kod, kadar barvna slika

vsebuje območja, kjer se barve razlikujejo zgolj v odtenkih. Dva odtenka, ki sta

človeškemu očesu morda celo nerazločljiva, predstavljata računalniku dve popolnoma

različni decimalni števili in s tem tudi različni binarni predstavitvi teh števil. Prednost

Grayeve kode se kaţe v lastnosti, ki pravi, da se dve zaporedni števili zapisani v Grayevi

Page 18: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 16

kodi razlikujeta zgolj v enem bitu, kar pomeni, da se vrednosti bliţjih odtenkov določene

barve razlikujejo zgolj v par bitih. Rezultat tega je, da je število in predvsem obseg

enobarvnih območij na bitnih ploskvah, določenimi z Grayevo dvojiško predstavitvijo

števil, znatno višje, kot pa na bitnih ploskvah, določenih s standardno dvojiško

predstavitvijo brez predznaka.

Slika 3: Primerjava bitnih ploskev pri pikslih z bliţnjimi odtenki. V zgornji vrstici vidimo bitne

ploskve določene s standardno dvojiško predstavitvijo, v spodnji pa z Grayevo dvojiško

predstavitvijo. Opazimo, da nastane 6 enovitih Grayevih ploskev, medtem ko pri standardnih

binarnih ploskvah ni enovita niti ena ploskev.

Page 19: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 17

5 ALGORITEM STISKANJA SLIK S ŠTIRIŠKIMI DREVESI

5.1 Delitev na bitne ploskve

Digitalno sliko najprej razdelimo na 4 barvne ploskve barvnega prostora RGBA, kjer

vsebuje vsak piksel ploskve R vrednost R istoleţnega piksla digitalne slike, vsak piksel

ploskve G vrednost G istoleţnega piksla digitalne slike, vsak piksel ploskve B vrednost B

istoleţečega piksla digitalne slike ter vsak piksel ploskve A vrednost A istoleţnega piksla

digitalne slike.

Nato vsako izmed ploskev R, G, B in A razdelimo na 8 bitnih (monokromatskih)

ploskev, kjer vsak piksel pi,j na bitni ploskvi Pl,k zavzema vrednost enega bita na mestu k v

Grayevi kodi piksla si,j na ploskvi Sl, pri čemer velja, da je S mnoţica barvnih ploskev S =

{R, G, B, A}.

5.2 Gradnja štiriških dreves

Za vsako izmed bitnih ploskev nato kličemo rekurzivno funkcijo ZgradiDrevo

(psevdokod 1), ki sprejme kot argument dimenzije kvadranta na trenutni bitni ploskvi, pri

čemer zavzema S1 indeks prvega stolpca kvadranta, S2 indeks zadnjega stolpca kvadranta,

V1 indeks začetne vrstice kvadranta in V2 indeks končne vrstice kvadranta. Funkcija se

sprehodi po pikslih podanega kvadranta in kakor hitro najde piksel pi,j , ki se razlikuje od

piksla pS1,V1, razdeli kvadrant na štiri enake četrtine (tabela 5). Če je širina kvadranta K liho

število, se dodeli dodaten stolpec podkvadrantoma K0,1 in K1,1. Če je višina kvadranta K

liho število, se dodeli dodatna vrstica podkvadrantoma K0,0 in K1,0. Za vsak podkvadrant

rekurzivno kličemo funkcijo ZgradiDrevo.

Page 20: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 18

Tabela 5: Razdelitev kvadranta K na podkvadrante

Če ugotovimo, da zavzemajo vsi piksli kvadranta enako vrednost, označimo, da gre za

list drevesa in shranimo barvo kvadranta.

V prvem klicu funkcije nad vsako bitno ploskvijo podamo argumente:

S1 = 0

S2 = širina slike - 1

V1 = 0

V2 = višina slike - 1

5.3 Shranjevanje drevesa v datoteko

Najprej shranimo v datoteko širino in višino končne slike. Funkcija ZgradiDrevo med

potekom gradnje štiriških dreves sproti shranjuje drevesa v datoteko. Vsakič, ko se

kvadrant deli na podkvadrante, zapišemo v datoteko bit z vrednostjo 1. Vsakič, ko

ugotovimo, da je kvadrant list drevesa, to označimo tako, da zapišemo v datoteko bit z

vrednostjo 0, nato pa shranimo še barvo kvadranta, ki zavzema vrednost 0 ali 1. Zaradi

takšnega načina shranjevanja je ključnega pomena, da se pri gradnji štiriških dreves, tako

pri stiskanju kot pri razširjanju, drţimo enakega vrstnega reda rekurzivnih klicev funkcije

ZgradiDrevo nad podkvadranti razdeljenega kvadranta.

K0,0 K0,1

K1,0 K1,1

Page 21: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 19

Psevdokod 1: Gradnja štiriškega drevesa s sprotnim zapisovanjem kode v datoteko

function ZgradiDrevo( S1, S2, V1, V2)

Nadaljuj = true;

for( i = S1 to S2)

for( j = V1 to V2)

if (Piksel(i,j) != Piksel(S1,V1) )

Nadaljuj = false;

ZapisiVDatoteko(1);

SredinaŠirine = (S2 - S1) / 2;

SredinaVišine = (V2 – V1) / 2;

ZgradiDrevo( S1, SredinaŠirine, V1, SredinaVišine);

ZgradiDrevo(SredinaŠirine + 1, S2, V1, SredinaVišine);

ZgradiDrevo( S1, SredinaŠirine, SredinaVišine + 1, V2);

ZgradiDrevo(SredinaŠirine + 1, S2, SredinaVišine + 1, V2);

break;

end for

end for

if (Nadaljuj == true)

ZapisiVDatoteko(0);

ZapisiVDatoteko(Barva);

end function

Funkcija ZgradiDrevo za vsak v parametrih prejet kvadrant preveri, ali je enobarven.

Spremenljivka Nadaljuj določa, ali kvadrant izpolnjuje pogoj enobarvnosti in je primeren

za zapis v datoteko, zato je na začetku funkcije inicializirana z vrednostjo true.V kolikor

med prehodom skozi piksle kvadranta naletimo na piksel drugačne barve od barve prvega

piksla kvadranta, Nadaljuj zavzame vrednost false, s čemer preprečimo zapis v datoteko,

funkcija pa razdeli kvadrant na četrtine in nad vsako četrtino rekurzivno kliče funkcijo

ZgradiDrevo.

Page 22: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 20

6 ALGORITEM RAZŠIRJANJA SLIK S ŠTIRIŠKIMI DREVESI

6.1 Gradnja štiriških dreves s sprotnim barvanjem bitnih ploskev

Najprej preberemo iz datoteke širino in višino končne slike, nato ustvarimo 24 bitnih

ploskev prebranih dimenzij. Pri razširjanju bitnih ploskev iz datoteke, stisnjene s

postopkom, opisanim v poglavju 5, funkcija DrevoIzKode (psevdokod 2) rekurzivno bere

datoteko bit za bitom in sproti gradi drevo. Funkcija DrevoIzKode prejme štiri argumente,

ki določajo dimenzije trenutnega kvadranta, pri čemer je S1 indeks začetnega stolpca

kvadranta, S2 indeks končnega stolpca kvadranta, V1 indeks začetne vrstice kvadranta in V2

indeks končne vrstice kvadranta. Dimenziji začetnega kvadranta sta določeni s

dimenzijama končne slike, ki smo ju prebrali na začetku.

V prvem klicu funkcije nad vsako bitno ploskvijo podamo argumente:

S1 = 0

S2 = širina slike -1,

V1 = 0 in

V2 = višina slike -1.

Gradnja drevesa poteka tako:

Če prebrani bit zavzame vrednost 1, algoritem razdeli trenutni kvadrant K na štiri enake

četrtine K0,0, K0,1, K1,0 in K1,1. Če je širina kvadranta K liho število, se dodeli dodaten

stolpec podkvadrantoma K0,1 in K1,1. Če je višina kvadranta K liho število, se dodeli

dodatna vrstica podkvadrantoma K0,0 in K1,0. Za vsaki podkvadrant rekurzivno kličemo

funkcijo DrevoIzKode.

Če prebrani bit zavzame vrednost 0, preberemo iz datoteke še naslednji bit, ki nam

pove barvo tega kvadranta. Nato določimo prebrano barvo vsem pikslom trenutnega

kvadranta.

Page 23: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 21

6.2 Združitev bitnih ploskev v končno sliko

Vsaki izmed posamičnih barvnih ploskev barvnega prostora RGBA določimo

vrednosti pikslov, tako da vsakemu pikslu si,j ploskve Sk, pri čemer velja S = {R,G,B,A},

določimo 8-bitno Grayevo kodo gi,j. Posamezni bit gi,j,m zavzema vrednost piksla pi,j bitne

monokromatske ploskve Pk,m. Grayevo kodo gi,j nato pretvorimo v decimalno število in

dodelimo to vrednost pikslu si,j.

Preostane nam še samo, da določimo vrednost pikslov qi,j = (ri,j, gi,j, bi,j, ai,j) končne

slike Q, pri čemer velja ri,j ∈ R, gi,j ∈ G, bi,j ∈ B in ai,j ∈ A.

Psevdokod 2: Algoritem razširjanja slik s štiriškimi drevesi

function DrevoIzKode(S1, S2, V1, V2)

Bit = BeriIzDatoteke();

if (Bit == 1)

SredinaŠirine = (S2 - S1) / 2;

SredinaVišine = (V2 – V1) / 2;

DrevoIzKode( S1, SredinaŠirine, V1, SredinaVišine);

DrevoIzKode(SredinaŠirine + 1, S2, V1, SredinaVišine);

DrevoIzKode( S1, SredinaŠirine, SredinaVišine + 1, V2);

DrevoIzKode(SredinaŠirine + 1, S2, SredinaVišine + 1, V2);

else

Barva = BeriIzDatoteke();

for i = S1 to S2

for j = V1 to V2

Piksel(i,j) = Barva;

end for

end for

end function

Page 24: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 22

7 IZBOLJŠAVA Z VPELJAVO HUFFMANOVEGA ALGORITMA

STISKANJA S PRILAGAJANJEM

7.1 Huffmanov algoritem s prilagajanjem

Huffmanov algoritem s prilagajanjem (znan tudi kot dinamični huffmanov algoritem) je

tehnika stiskanja s prilaganjem na osnovi Huffmanovega algoritma. Algoritem gradi kodo

med prehodom skozi simbole brez predznanja o izvirni datoteki, česar posledica je

stiskanje z zgolj enim prehodom in prilagajanje spreminjajočem se pogojem v podatkih.

Prednost stiskanja s samo enim prehodom je stiskanje v realnem času, slabost pa

občutljivost na napake pri prenosu, saj ţe zaradi izgube enega samega bita koda postane

neuporabna [7].

Huffmanov algoritem stiskanja podatkov ima to slabost, da mora dekodirnik poznati

frekvence ponavljanja znakov v datoteki, zato mora stisnjena datoteka vsebovati

frekvenčno tabelo znakov, ki doprinese h končni velikosti stisnjene datoteke. Prav tako

mora kodirnik narediti dva prehoda skozi nestisnjeni datoteki, najprej mora ugotoviti

frekvence znakov in zgraditi Huffmanovo drevo, šele v drugem prehodu nato dejansko

stisne datoteko. Na osnovi Huffmanovega algoritma so Newton Faller in Robert G.

Gallagher, ter kasneje Donald Knuth in Jeffrey Vitter, razvila algoritem s prilagajanjem

[2].

7.2 Stiskanje slik s metodo štiriških dreves in huffmanovim algoritmom

Delitev na Grayeve bitne ploskve ostane ista, do sprememb pride pri gradnji štiriškega

drevesa. Pri metodi brez izboljšave smo drevo gradili rekurzivno v globino. Za potrebe

Page 25: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 23

Huffmanovega stiskanja potrebujemo informacije o vozliščih na posameznih nivojih, zato

bomo gradili drevo iterativno v širino.

Algoritem, ki ga bomo uporabljali, ni pravi adaptivni Huffmanov algoritem, ampak zgolj

poenostavljena inačica. Uporabljali bomo zgolj tri simbole oziroma barve vozlišč - sivo, ki

je vmesno vozlišče in ni list, črno, ki je list z bitno vrednostjo oz. barvo 1, ter bela, ki

označuje list z bitno vrednostjo oz. barvo 0.

Za vsako barvo vodimo števec pojavitev. Ob vsaki pojavitvi zapišemo v datoteko ustrezno

kodo iz frekvenčne tabele, po vsaki pojavitvi pa preverimo vse tri števce, če ustrezajo

pogoju, ki pravi: barva, ki ima trenutno največ pojavitev, mora imeti kodo 1, barva ki ima

druga največ pojavitev, mora imeti kodo 01, barva s trenutno najmanj pojavitvami pa ima

kodo 00. V kolikor razporeditev barv v Huffmanovi frekvenčni tabeli ne ustreza pogoju,

barvam ustrezno zamenjamo kode. Tako kodirnik in dekodirnik vedno začneta z enako

kodno tabelo (tabela 6).

Barva Koda

Siva 1

Črna 01

Bela 00

Tabela 6: Kodna tabela

Algoritem, ki ga prikazuje psevdokod 3, prične z ustvarjanjem očeta, ki ga doda v vektor

kvadrantov Seznam, ki je vektor vozlišč štiriškega drevesa ploskve na trenutnem nivoju. V

naslednjem koraku se sprehodimo skozi elemente vektorja Seznam. Ker v trenutnem

koraku nimamo informacije o barvi kvadranta, preverjamo, ali so enobarvni (črni ali beli)

ali dvobarvni (sivi). Če ugotovimo, da je trenutno obravnavani kvadrant dvobarven, ga

razdelimo na 4 sinove med seboj enakih dimenzij in jih dodamo v začasni vektor

naslednjega nivoja ZacasniSeznam, ter v datoteko zapišemo kodo, ki jo določa trenutna

Huffmanova frekvenčna tabela. Če je kvadrant enobarven, zgolj zapišemo v datoteko kodo

barve, ki jo določa trenutna Huffmanova frekvenčna tabela. Seznam nadomestimo z

vektorjem ZacasniSeznam in sprehod po vektorju ponavljamo, dokler ne pridemo do

zadnjega nivoja štiriškega drevesa. Po vsakem zapisu v datoteko osveţimo Huffmanovo

Page 26: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 24

frekvenčno tabelo, ko pa zaključimo z obravnavanjem trenutne ploskve, tabelo

ponastavimo.

Page 27: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 25

Psevdokod 3: Izboljšava s Huffmanovim algoritmom – stiskanje

function Stiskanje()

Nadaljuj = true;

for each (Ploskev in Grayeve_Ploskve)

Oce = Kvadrant(0, SirinaSlike-1, VisinaSlike-1)

Seznam.Dodaj(Oce);

for each( Kvadrant in Seznam)

for( i = S1 to S2)

if( Nadaljuj == true)

for( j = V1 to V2)

if (Piksel(i,j) != Piksel(S1,V1) )

Nadaljuj = false;

HuffmanStevec[Sivo]++;

DodajVDatoteko(Sivo);

PreveriHuffmanoveStevce();

break;

RazdeliKvadrantNaSinove();

ZacasniSeznam.Dodaj(PrviSin);

ZacasniSeznam.Dodaj(DrugiSin);

ZacasniSeznam.Dodaj(TretjiSin);

ZacasniSeznam.Dodaj(CetrtiSin);

break;

end if

end for

else

break;

end for

if(Nadaljuj == true)

HuffmanStevec[Piksel.Barva]++;

DodajVDatoteko(Piksel.Barva);

PreveriHuffmanoveStevce();

end if

Page 28: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 26

Seznam = ZacasniSeznam;

end for

PonastabiHuffmanovoTabelo();

end for

end function

7.3 Razširjanje slik, stisnjenih z metodo štiriških dreves in huffmanovim

algoritmom

Algoritem razširjanja, ki ga prikazuje psevdokod 4, ima na začetku na voljo enako

frekvenčno tabelo kot algoritem za stiskanje. Najprej ustvari očeta štiriškega drevesa in mu

določi barvo glede na prebran bit iz datoteke, obravnavan s Huffmanovim algoritmom.

Očeta nato doda v vektor vozlišč trenutnega nivoja štiriškega drevesa – Seznam.

Nato izvedemo sprehod po vektorju Seznam in preverjamo barve posameznih kvadrantov.

Če je barva kvadranta siva, razdelimo kvadrant na štiri med seboj enako velike

podkvadrante in jim s prebranim bitom iz datoteke, ter glede na Huffmanovo frekvenčno

tabelo, dodelimo barvo. Če je barva kvadranta črna ali bela, kvadrant pobarvamo z

določeno barvo.

Page 29: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 27

Psevdokod 4: Izboljšava s Huffmanovim algoritmom – razširjanje

function Razsirjanje()

for each( Ploskev in GrayevePloskve)

Ploskev = new BitnaPloskev(Sirina, Visina);

Oce = Kvadrant(0, SirinaSlike-1, VisinaSlike-1)

Oce.Barva = DobiBarvoIzDatoteke();

Seznam.Dodaj(Oce);

for each( Kvadrant in Seznam)

if( Kvadrant.Barva == Siva)

RazdeliKvadrantNaSinove();

ZacasniSeznam.Dodaj(PrviSin);

ZacasniSeznam.Dodaj(DrugiSin);

ZacasniSeznam.Dodaj(TretjiSin);

ZacasniSeznam.Dodaj(CetrtiSin);

else if( Kvadrant.Barva == Crna)

PobarvajPloskev(Ploskev, Crna);

else

PobarvajPloskev(Ploskev, Bela);

Seznam = ZacasniSeznam;

end for

PonastaviHuffmanovoTabelo();

end for

end function

Page 30: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 28

8 REZULTATI

V tem poglavju bomo predstavili vzorec iz mnoţice testnih primerov, ki najbolje prikaţejo

dobre in slabe lastnosti delovanja algoritma brezizgubnega stiskanja s štiriškimi drevesi.

8.1 Testni primer 1

Testni primer 1: v tem primeru smo testirali enobarvno sivinsko sliko, kjer so vsi piksli

enake barve. Štiriško drevo iz vsake bitne ploskve je sestavljeno iz natanko enega vozlišča,

zato je tudi stopnja stiskanja najniţja.

Ločljivost: 400×400 pikslov

Nestisnjena velikost: 640054 zlogov

Stisnjena velikost: 17 zlogov

Faktor stiskanja: 37650,235: 1

Page 31: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 29

8.2 Testni primer 2

Testni primer 2: v tem primeru obravnavamo risano sliko, ki je razdeljena na enobarvne

četrtine. Štiriško drevo iz vsake bitne ploskve je sestavljeno iz 5 vozlišč, očeta in štirih

sinov, kar ima za posledico zelo nizko stopnjo stiskanja.

Ločljivost: 500×500 pikslov

Nestisnjena velikost: 1000054 zlogov

Stisnjena velikost: 1139 zlogov

Faktor stiskanja: 878,011: 1

Page 32: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 30

8.3 Testni primer 3

Testni primer 3: v tem primeru obravnavamo umetno zvezno sliko s četrtinami, ki se v

odtenku razlikujejo za eno števko. Slika je primer učinkovitosti uporabe Grayevih kod, saj

je stopnja stiskanja zaradi le-teh niţja, kot pa pri testnem primeru 2, kjer četrtine med seboj

niso bile zveznih barv.

Ločljivost: 500×500 pikslov

Nestisnjena velikost: 1000054 zlogov

Stisnjena velikost: 241 zlogov

Faktor stiskanja: 4149,602: 1

Page 33: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 31

8.4 Testni primer 4

Testni primer 4: Preprosta diskretna slika s obarvanimi četrtinami in osminami

Ločljivost: 400 × 400 pikslov

Nestisnjena velikost: 640054 zlogov

Stisnjena velikost: 34 zlogov

Faktor stiskanja: 18825,118: 1

Page 34: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 32

8.5 Testni primer 5

Testni primer 5: V tem primeru obravnavamo naravno sliko neba z drevesom in streho z

namenom prikaza učinkovitosti Grayevih kod pri naravnih zveznih slikah.

Ločljivost: 667 × 500 pikslov

Nestisnjena velikost: 1334054 zlogov

Stisnjena velikost: 424035 zlogov

Faktor stiskanja: 3,146: 1

Page 35: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 33

8.6 Testni primer 6

Testni primer 6: Naravna slika, delno pokrita s nebom (zveznost)

Ločljivost: 667 × 500 pikslov

Nestisnjena velikost: 1334054 zlogov

Stisnjena velikost: 1014540 zlogov

Faktor stiskanja: 1,315: 1

Page 36: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 34

8.7 Testni primer 7

Testni primer 7: V tem primeru obravnavamo naravno sliko z mnoţico majhnih zveznih

območij. Zaradi majhnih dimenzij zveznih območij so vsa štiriška drevesa bitnih ploskev

zelo razvejana, česar posledica je večja velikost stisnjene datoteke.

Ločljivost: 667 × 500 pikslov

Nestisnjena velikost: 1334054 zlogov

Stisnjena velikost: 1620398 zlogov

Faktor stiskanja: 1: 1,215

Page 37: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 35

8.8 Interpretacija rezultatov

Nizko stopnjo, ki pomeni visoko učinkovitost stiskanja, opazimo pri:

uniformnih slikah (testni primer 1)

diskretnih slikah (testni primeri: 2 in 4) in

zveznih slikah (testni primer 3)

Zmerno nizko stopnjo stiskanja opazimo pri naravnih slikah, kjer slika vsebuje večja

območja zveznih barv (testni primer 5), ki pa pada s številom in velikostjo takšnih območij

(testni primer 6).

Pri nezveznih, barvno razgibanih slikah pa opazimo, da je stisnjena datoteka lahko tudi

večja od nestisnjene (testni primer 7).

Razliko med stiskanjem zveznih in diskretnih slik najbolje prikazuje razlika med testnima

primeroma 2 in 3, kjer je velikost stisnjene zvezne slike pribliţno 4,73-krat manjša od

stisnjene diskretne slike.

Ugotovili smo, da stiskanje deluje najslabše, če niti dva sosednja piksla v sliki ne ponudita

zvezne spremembe barve.

Page 38: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 36

9 SKLEP

Preučili smo algoritem brezizgubnega stiskanja slik s štiriškimi drevesi. Spoznali smo

pojem digitalnih slik, nad katerimi izvajamo algoritme stiskanja. Ob preučevanju algoritma

brezizgubnega stiskanja slik s štiriškimi drevesi smo spoznali tudi lastnosti, računanje in

uporabnost Grayevih dvojiških kod.

Prišli smo do zaključka, da se algoritem brezizgubnega stiskanja slik s štiriškimi

drevesi najbolje obnese na slikah, kjer imamo večja območja uniformnih barv. Prav tako se

odlično obnese nad slikami z večjimi območji zvezno prehajajočih barv, kar je posledica

uporabe Grayevih dvojiških kod. Grayeve kode imajo lastnost, ki pravi, da se dve

zaporedni Grayevi kodi razlikujeta zgolj v enem bitu, kar pri delitvi barvne slike na bitne

ploskve pomeni, da dobimo večje število in večji obseg uniformnih območij na bitnih

ploskvah, kot pa če bi uporabili standardne binarne kode.

Problem nastane pri zelo razgibanih slikah, ki vsebujejo mnoţico majhnih enobarvnih

območij. V takšnem primeru se algoritem, ne samo ne obnese, ampak celo ustvari

datoteko, večjo od izvirne nestisnjene slike.

Page 39: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 37

10 LITERATURA IN VIRI

[1] David Salomon, Data Compression, Springer-Verlag London Limited, 2007, str. 461-

464

[2] ADAPTIVE HUFFMAN CODING

http://www.cs.duke.edu/csed/curious/compression/adaptivehuff.html#tree (19.2.2012)

[3] Wikipedia – Gray code http://en.wikipedia.org/wiki/Graycode (19.2.2012)

[4] How to understand and use Gray code

http://morkalork.com/mork/article/74/How_to_understand_and_use_Gray_code.htm

(19.2.2012)

[5] Wikipedia - Quadtree http://en.wikipedia.org/wiki/Quadtree (19.2.2012)

[6] Project #32: PICTURE REPRESENTATION USING QUAD TREES -- Winter 1999

http://www.cs.ubc.ca/~pcarbo/cs251/welcome.html (19.2.2012)

[7] Wikipedia – Adaptive Huffman coding

http://en.wikipedia.org/wiki/Adaptive_Huffman_coding (19.2.2012)

Page 40: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 38

Page 41: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 39

Page 42: Navodila za izdelavo diplomske naloge - UM

Navodila za izdelavo diplomskega dela Stran 40