UPORABA FORMATA PGF ZA STISKANJE RASTRSKIH SLIK · Kodiranje entropije (angl. entropy coding) –...

59
UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Peter Rinc UPORABA FORMATA PGF ZA STISKANJE RASTRSKIH SLIK Diplomsko delo Maribor, november 2008

Transcript of UPORABA FORMATA PGF ZA STISKANJE RASTRSKIH SLIK · Kodiranje entropije (angl. entropy coding) –...

UNIVERZA V MARIBORU

FAKULTETA ZA ELEKTROTEHNIKO,

RAČUNALNIŠTVO IN INFORMATIKO

Peter Rinc

UPORABA FORMATA PGF

ZA STISKANJE RASTRSKIH SLIK

Diplomsko delo

Maribor, november 2008

I

UNIVERZA V MARIBORU

Diplomsko delo univerzitetnega študijskega programa

UPORABA FORMATA PGF

ZA STISKANJE RASTRSKIH SLIK

Študent: Peter RINC

Študijski program: univerzitetni, Računalništvo in informatika

Smer: Programska oprema

Mentor: red. prof. dr. Borut Ţalik

Somentor: doc. dr. David Podgorelec

Maribor, november 2008

II

(sklep o diplomskem delu)

III

ZAHVALA

Zahvaljujem se mentorju dr. Borutu Ţaliku za

pomoč in vodenje pri opravljanju diplomskega dela.

Prav tako se zahvaljujem somentorju dr. Davidu

Podgorelcu.

Posebna zahvala velja staršem, ki so me vseskozi

spodbujali in mi omogočili študij.

IV

UPORABA FORMATA PGF

ZA STISKANJE RASTRSKIH SLIK

Ključne besede: rastrske slike, slikovni datotečni format, stiskanje podatkov,

diskretna valčna transformacija

UDK: 004.932.057.3(043.2)

Povzetek

V okviru diplomskega dela predstavljamo slikovni datotečni format PGF, ki je osnovan

na diskretni valčni transformaciji s stopnjujočim kodiranjem. Podrobno opisujemo vse

korake kodirnika in razpravljamo o nekaterih pomembnih vidikih skrbne implementacije.

Format PGF lahko uporabljamo za stiskanje z izgubami ali brez izgub.

Najučinkovitejši je pri slikah naravnega izvora. Pri stiskanju dosežemo boljšo učinkovitost

v primerjavi z JPEG. Za to pridobitev plačamo zelo nizko ceno, saj kodiranje in

dekodiranje trajata le malenkost dlje. Format PGF smo primerjali tudi z JPEG 2000 in

ugotovili, da je JPEG 2000 približno desetkrat počasnejši. Pri stiskanju pa ima PGF

malenkost slabšo učinkovitost kot JPEG 2000. Če sta pomembna oba, učinkovitost

stiskanja in čas izvajanja, je PGF najboljša izbira izmed testiranih algoritmov za stiskanje

naravnih rastrskih slik.

V

COMPRESSING RASTER IMAGES

USING PGF FORMAT

Key words: raster images, image file format, data compression,

discrete wavelet transform

UDK: 004.932.057.3(043.2)

Abstract

In this thesis, we present an image file format, called Progressive Graphics File (PGF),

which is based on a discrete wavelet transform with progressive coding features. We show

all steps of coder in detail and discuss some important aspects of careful implementation.

PGF can be used for lossless and lossy compression. It performs best for natural

images. For these types of images it shows better compression efficiency than JPEG. This

efficiency gain is almost for free, because the encoding and decoding times are only

marginally longer. We also compare PGF with JPEG 2000 and show that JPEG 2000 is

about ten times slower. On the other hand PGF has slightly worse compression efficiency

than JPEG 2000. If both, compression efficiency and runtime, is important, then PGF is

the best of the tested algorithms for compression of natural raster images.

VI

VSEBINA

1. UVOD ............................................................................................................................ 1

2. OSNOVE STISKANJA RASTRSKIH SLIK ............................................................... 3

2.1 METODE STISKANJA BREZ IZGUB ................................................................. 4

2.2 METODE STISKANJA Z IZGUBAMI ................................................................. 5

3. OSNOVE VALČNE TRANSFORMACIJE ................................................................. 6

3.1 ZVEZNA VALČNA TRANSFORMACIJA .......................................................... 6

3.2 DISKRETNA VALČNA TRANSFORMACIJA ................................................... 8

3.3 RAZŠIRITEV ZA DVODIMENZIONALNE SIGNALE .................................... 10

4. FORMAT PGF ............................................................................................................ 13

4.1 TRANSFORMACIJA BARVNIH MODELOV .................................................. 15

4.2 DISKRETNA VALČNA TRANSFORMACIJA ................................................. 16

4.3 KVANTIZACIJA ................................................................................................. 19

4.4 KODIRANJE ........................................................................................................ 20

4.4.1 Korak prerazporeditve ................................................................................... 21

4.4.2 Korak stiskanja .............................................................................................. 22

5. APLIKACIJA »PGF IMAGE VIEWER« ................................................................... 26

5.1 FUNKCIONALNOST APLIKACIJE .................................................................. 27

5.1.1 Delo z datotekami .......................................................................................... 27

5.1.2 Izvajanje testov .............................................................................................. 29

5.2 IMPLEMENTACIJA APLIKACIJE .................................................................... 31

5.2.1 Podpora za delo z datotekami formata PGF .................................................. 31

5.2.2 Podpora za delo z datotekami formatov BMP, JPEG in JPEG 2000 ............ 34

6. PRIMERJAVA FORMATOV..................................................................................... 36

6.1 PRIMERJALNE METODE .................................................................................. 36

6.2 TESTIRANJE ....................................................................................................... 37

6.3 REZULTATI ........................................................................................................ 38

6.3.1 Testna slika »hdr« .......................................................................................... 39

6.3.2 Testna slika »bridge« ..................................................................................... 41

6.3.3 Testna slika »cathedral« ................................................................................ 43

6.3.4 Testna slika »flower_foveon« ....................................................................... 45

VII

6.3.5 Testna slika »spider_web«............................................................................. 47

7. SKLEP ......................................................................................................................... 49

8. LITERATURA ............................................................................................................ 50

Peter Rinc, Diplomsko delo 1

1. UVOD

Poznamo mnoţico različnih datotečnih formatov za shranjevanje rastrskih slik.

Nekateri med njimi uporabljajo tehnike za stiskanje podatkov, medtem ko drugi ne. Eni

podpirajo le stiskanje z izgubami, drugi pa omogočajo stiskanje brez izgub. Nekatere

tehnike za stiskanje podatkov so primernejše za naravne rastrske slike kot za tiste,

generirane z računalnikom. Na tem mestu se nam porodi vprašanje, zakaj ne obstaja en

slikovni datotečni format, ki bi podpiral vse te moţnosti, plus še nekatere druge, kot so:

hierarhično kodiranje, kodiranje območij zanimanja, stopnjujoče dekodiranje, podpora

polni in delni prosojnosti, itd.?

Odgovor na to vprašanje je format JPEG 2000, ki je bil zasnovan z namenom, da bi

zamenjal široko razširjen standard JPEG. Zraven vseh prej naštetih funkcionalnosti, ki jih

zdruţuje v enem formatu, prinaša tudi učinkovitejše stiskanje v primerjavi s standardom

JPEG. Dokazano je, da lahko doseţemo tudi do 7 % boljšo kvaliteto slike pri isti stopnji

stiskanja. Tukaj pa se nam porodi novo vprašanje: zakaj se standard JPEG 2000 ni razširil

tako kot JPEG oz. zakaj ga ni povsem zamenjal?

Razlog je v tem, da za stiskanje oz. razširjanje slike s standardom JPEG 2000

potrebujemo do desetkrat več časa, kot bi ga potrebovali s standardom JPEG. Zaradi tega

je standard JPEG 2000 neprimeren v okoljih, kjer je hitrost stiskanja oz. razširjanja

pomembna. Eno takih okolij je na primer področje profesionalne digitalne fotografije, kjer

je zelo hitro stiskanje bistveno pri zajemanju večjega števila fotografij v kratkem času.

Namen našega diplomskega dela je bil poiskati slikovni datotečni format, ki bi podpiral

vse naštete funkcionalnosti, ki bi bil vsaj tako učinkovit kot JPEG in ki bi bil dovolj hiter,

da bi lahko povsem nadomestil široko razširjen standard JPEG. Našli smo nekoliko manj

znani format PGF, ki je bil razvit skoraj istočasno kot JPEG 2000. Je zelo hiter in z njim

Peter Rinc, Diplomsko delo 2

doseţemo kvaliteto slike, ki je po primerjavi nekje med JPEG in JPEG 2000 pri isti stopnji

stiskanja. V bistvu je format PGF to, kar smo iskali.

V okviru tega diplomskega dela smo v drugem poglavju opisali osnove stiskanja

rastrskih slik, v tretjem poglavju pa osnove valčne transformacije. Obe poglavji sta ključni

za razumevanje vsebine, ki sledi.

V četrtem poglavju smo podrobno opisali format PGF in predstavili funkcionalnosti, ki

jih podpira. Podali smo tudi podroben opis korakov algoritma za stiskanje rastrskih slik.

Temu poglavju sledi peto poglavje, ki opisuje aplikacijo »PGF Image Viewer«, ki smo jo

implementirali za namen naše raziskave.

V šestem poglavju smo primerjali formate JPEG, JPEG 2000 in PGF. Opisali smo

potek testiranja in pokomentirali dobljene rezultate. Diplomsko delo smo končali s

sklepom, kjer smo podali zaključne misli.

Peter Rinc, Diplomsko delo 3

2. OSNOVE STISKANJA RASTRSKIH SLIK

Stiskanje rastrskih slik je proces, s katerim skušamo čim bolj učinkovito zmanjšati

redundanco podatkov in s tem zmanjšati količino prostora, potrebnega za shranjevanje

slike na pomnilniški medij, ali pa zmanjšati čas, potreben za prenos slike preko spleta [2].

Na tem mestu uvedemo pojem stopnje stiskanja (angl. Compression Ratio, CR), ki je

definiran kot kvocient med številom bitov na piksel originalne slike in številom bitov na

piksel stisnjene slike.

𝐶𝑅 =

š𝑡. 𝑏𝑖𝑡𝑜𝑣 𝑛𝑎 𝑝𝑖𝑘𝑠𝑒𝑙 𝑜𝑟𝑖𝑔𝑖𝑛𝑎𝑙𝑛𝑒 𝑠𝑙𝑖𝑘𝑒

š𝑡. 𝑏𝑖𝑡𝑜𝑣 𝑛𝑎 𝑝𝑖𝑘𝑠𝑒𝑙 𝑠𝑡𝑖𝑠𝑛𝑗𝑒𝑛𝑒 𝑠𝑙𝑖𝑘𝑒

(2.1)

Če v enačbi (2.1) predpostavimo, da je število bitov na piksel originalne slike enako 24,

stisnjene slike pa le 3 biti na piksel, potem je stopnja stiskanja enaka:

𝐶𝑅 =

24

3=

8

1= 8 ∶ 1

Metode stiskanja rastrskih slik lahko v grobem delimo na dve skupini:

- stiskanje brez izgub (angl. lossless compression) in

- stiskanje z izgubami (angl. lossy compression).

Stiskanje brez izgub se ponavadi uporablja za slike, ki niso naravnega izvora (npr.

tehnične risbe, načrti…). Razlog za to je dejstvo, da se pri stiskanju z izgubami pojavijo

številni artefakti, še posebej, če gre za večjo stopnjo stiskanja. Stiskanje brez izgub

uporabljamo tudi pri slikah, kjer je verodostojnost vsebine pomembnejša, kot prostor, ki ga

zasedajo (npr. medicinske slike).

Peter Rinc, Diplomsko delo 4

Stiskanje z izgubami pa je primerno za naravne slike (npr. fotografije), kjer manjša

izguba podrobnosti, ki je s prostim očesom včasih niti ne opazimo, lahko privede do

precejšnega zmanjšanja porabe pomnilniškega prostora [2].

2.1 METODE STISKANJA BREZ IZGUB

Te metode zagotavljajo, da je rekonstruirana slika identična originalu. Metod je mnogo,

omenili bomo le tiste, ki se uporabljajo v slikovnih datotečnih formatih, ki so najbolj

razširjeni:

1. Stiskanje s tekočo dolţino (angl. run-length encoding, RLE) – je zelo enostavna in

učinkovita metoda za stiskanje podatkov, ki vsebujejo daljše nize enakih vrednosti.

Ponavljajoče znake kodiramo s tekočo dolţino na način: »znak« + 1 zlog za število

ponovitev. Tako bi se npr. niz '00 00 00 00 00' kodiral v niz '00 05'.

Metoda stiskanja s tekočo dolţino se uporablja v formatu PCX in je ena izmed

moţnih v formatih BMP, TGA in TIFF.

2. Kodiranje entropije (angl. entropy coding) – je skupina metod, ki so neodvisne od

posebnih karakteristik slike, ki jo ţelimo stisniti. Glavna ideja algoritma je, da

imajo znaki oz. vrednosti, ki so najpogosteje uporabljene, najkrajše kode. Zaradi

tega rečemo tem metodam tudi statistične metode. Dve najpogosteje uporabljeni

metodi sta Huffmanovo kodiranje in aritmetično kodiranje.

3. Stiskanje s slovarjem – je metoda, kjer ne kodiramo posameznega znaka s

spremenljivo bitno dolţino, ampak kodiramo različno dolge nize znakov v ţeton

(angl. token). Z ţetoni ustvarimo indekse v slovarju fraz. Stiskanje je uspešno, če

zavzema ţeton manj bitov kot fraza.

Tudi tukaj imamo veliko izpeljav osnovne metode. Na področju stiskanja slik je

najbolj razširjen algoritem LZW, ki se uporablja pri formatih GIF in TIFF.

4. Deflate – je metoda, ki je kombinacija algoritma LZ77 in Huffmanovega kodiranja.

V osnovi je bila metoda razvita za program PKZIP, uporablja pa se v formatu PNG.

Peter Rinc, Diplomsko delo 5

2.2 METODE STISKANJA Z IZGUBAMI

Metode stiskanja z izgubami se veliko bolj učinkovite. Zavedati pa se moramo dejstva,

da z vsakim stiskanjem izgubimo nekaj podatkov. Če rekonstruirano sliko ponovno

stisnemo, se izguba podatkov stopnjuje. Temu pravimo generacijsko izgubljanje (angl.

generation loss). Tudi tukaj poznamo mnogo metod, zato bomo omenili le

najpomembnejše:

1. Zmanjševanje barvnega prostora na najpogosteje uporabljene barve v sliki. Izbrane

barve so specificirane v barvni paleti v glavi slikovne datoteke. Vsak piksel

označuje indeks barve v barvni paleti. Ta metoda se lahko kombinira s postopkom

raztresanja barv (angl. dithering), kjer se sliki namerno doda šum, da se izognemo

posterizaciji.

2. Zmanjševanje natančnosti kromatičnih kanalov – ta metoda izkorišča dejstvo, da je

človeško oko bolj občutljivo na zaznavanje sprememb svetlobe kot barve. Zaradi

tega lahko zmanjšamo prostorsko ločljivost kromatičnih kanalov brez večjih vidnih

izgub. Ta metoda zahteva transformacijo med barvnimi modeli (iz RGB v npr. YIQ,

YUV ali YCbCr), saj imamo ponavadi originalno RGB sliko.

3. Transformacijsko kodiranje – ta metoda je najpogosteje uporabljena. Začne se s

diskretno kosinusno transformacijo, valčno transformacijo ali katero drugo

transformacijo, ki je izpeljana iz Fourierjeve analize. Temu sledita kvantizacija in

kodiranje entropije.

V praksi se uporabljajo kombinacije zgoraj naštetih metod. Primer sta standarda JPEG

in JPEG 2000.

Peter Rinc, Diplomsko delo 6

3. OSNOVE VALČNE TRANSFORMACIJE

Osnove za vpeljavo valčkov (angl. wavelets) so se pojavile na področju matematike ţe

več kot stoletje nazaj. Leta 1873 je Karl Weierstrass matematično opisal, kako se lahko

druţina funkcij konstruira s pomočjo skaliranja dane osnovne (bazne) funkcije. To je bila

osnova za Fourierjevo analizo, ki se uporablja za procesiranje signalov ţe več desetletij.

Izraz valček se je prvič pojavil na področju seizmologije kot motnja, ki jo je povzročil

oster seizmični impulz. Leta 1982 je Morlet prvič opisal, kako se lahko seizmične valčke

efektivno modelira v matematiki. Kasneje, leta 1984, sta Grossman in Morlet nadaljevala v

tej smeri in predstavila, kako lahko poljuben signal analiziramo s pomočjo skaliranja in

transliranja osnovnega valčka (bazne funkcije). Kot rezultat prinaša valčna reprezentacija

prilagodljivo matematično orodje za analizo minljivih, časovno spremenljivih signalov,

katerih obnašanja ni moţno statistično napovedati, še posebej na območjih prekinitve (pri

slikah so to robovi) [3].

3.1 ZVEZNA VALČNA TRANSFORMACIJA

Zvezna valčna transformacija (angl. Continuous Wavelet Transform, CWT) je določena

z enačbo:

𝐶𝑊𝑇𝑥 𝜏, 𝑎 =1

𝑎 𝑥(𝑡)

−∞

𝜓 𝑡 − 𝜏

𝑎 𝑑𝑡

(3.1)

Valčki so funkcije, generirane iz bazne funkcije 𝜓(𝑡), ki ji pravimo osnovni valček

(angl. mother wavelet) in ima lastnosti okenske funkcije. Pri spektralni analizi gre namreč

za računanje korelacije signala z izpeljanimi valčki, ki so za faktor 𝜏 pomaknjene in za

faktor 𝑎 raztegnjene različice osnovnega valčka.

Peter Rinc, Diplomsko delo 7

S pomočjo 𝜏 se torej valček pomika po času, s pomočjo 𝑎 pa se ga širi oziroma oţi.

Manjši 𝑎 pomeni, da je izpeljani valček v času oţji, kar ustreza višjim frekvencam. Za

nizke frekvence velja obratno. Primer lahko vidimo na sliki 3.1.

Slika 3.1: (a) osnovni valček 𝜓(𝑡), (b) 𝜓 𝑡 𝛼 : 0 < 𝛼 < 1, (c) 𝜓 𝑡 𝛼 : 𝛼 > 1

Za razliko od Fourierove transformacije, ki časovni prostor (čas-amplituda) preslika v

frekvenčni prostor (frekvenca-amplituda), valčna transformacija slika iz časovnega

prostora v časovno-skalirni prostor (angl. time-scale space). S tem pridobimo pomembno

lastnost, namreč da namesto okna fiksne širine uporabimo ustrezno dolge intervale glede

na signal - daljši interval, kjer je frekvenca nizka, in krajši, kjer je visoka.

Valček je funkcija s povprečno vrednostjo 0 in je od 0 različna samo na omejenem

intervalu. Sinusna funkcija ima sicer obliko vala oz. valčka, a je neskončna, zato ni val.

Kot frekvenčna analiza razbije signal v sinusne funkcije različnih frekvenc, tudi valčna

analiza razbije signal v premaknjene in skalirane izvedenke prvotnega valčka [1].

Peter Rinc, Diplomsko delo 8

Pri valčni analizi pogosto govorimo o pribliţkih (angl. approximations) in podrobnostih

(angl. details). Za večino signalov velja, da nizke frekvence v nekem smislu določajo

signal, medtem ko so visoke frekvence le »dodatek«. Če na primer človeškemu glasu

odvzamemo visoke frekvence, bo sicer slišati drugače, a še vedno razumljivo, če pa

odvzamemo dovolj nizkih frekvenc, slišimo le nerazpoznaven glas. Enako velja za slike. V

tem pogledu so pribliţki nizkofrekvenčne komponente, podrobnosti pa visokofrekvenčne

komponente.

3.2 DISKRETNA VALČNA TRANSFORMACIJA

Računanje zvezne valčne transformacije je računsko zahtevno in ustreza filtriranju

signala z naborom filtrov. Zato se na področju digitalnega procesiranja signalov običajno

uporablja diskretna valčna transformacija (angl. Discrete Wavelet Transform, DWT).

Dobimo jo, če v enačbi (3.1) nadomestimo 𝑎 z 𝑎 = 𝑎0𝑠 in 𝜏 s 𝜏 = 𝑙 ∙ 𝑎0

𝑠 .

Učinkovito računanje diskretne valčne transformacije je mogoče samo ob izboru

𝑎 = 2𝑠 in 𝜏 = 𝑙 ∙ 2𝑠 . Dobimo torej enačbo:

𝐷𝑊𝑇𝑥 𝑙, 𝑠 =

1

2𝑠 𝑥(𝑛)𝜓

𝑛 − 𝑙 ∙ 2𝑠

2𝑠

𝑛=0

(3.2)

Ob takem izboru parametrov 𝑎 in 𝜏 je določena frekvenčno-časovna ločljivost oziroma

oblika pravokotnikov v časovno-frekvenčni ravnini kot je prikazano na sliki 3.2.

Slika 3.2: Razdelitev časovno-frekvenčne ravnine pri diskretni valčni transformaciji.

Peter Rinc, Diplomsko delo 9

Najmanjši časovni pomik 2𝑠 s frekvenco pada (majhen s ustreza višji frekvenci).

Časovna ločljivost pri visokih frekvencah je torej dobra, pri nizkih pa slaba. Za frekvenčno

ločljivost velja obratno.

Algoritem za hitro računanje diskretne valčne transformacije temelji na filtriranju

signala s pari nizkoprepustnih in visokoprepustnih kvadratnih zrcalnih filtrov

(angl. Quadrature Mirror Filters, QMF), ki ustrezajo določenemu valčku. Filtrom sledi

decimacija za faktor 2, kar pomeni, da v nadaljnjem računanju uporabimo vsak drugi

koeficient, ki ga dobimo na izhodu ustreznega filtra. To lahko storimo, ker je frekvenčni

pas, ki ga opisuje izhod filtra, dvakrat oţji od frekvenčnega pasu na vhodu filtra. Postopek

se iterativno ponavlja nad decimiranimi izhodi nizkoprepustnih filtrov, kot je prikazano na

sliki 3.3.

Slika 3.3: Računanje diskretne valčne transformacije s kvadratnimi zrcalnimi filtri.

Signal 𝑥(𝑛) se filtrira z visokoprepustnim filtrom VPF in nizkoprepustnim filtrom

NPF. Izhoda obeh filtrov se decimira za faktor 2. Koeficienti, ki so označeni z D1x,

opisujejo podrobnosti signala 𝑥(𝑛), z A1x pa je označena njegova aproksimacija. Postopek

se iterativno ponavlja na aproksimacijah, ki jih dobimo v predhodni stopnji. Ker se v vsaki

stopnji izvede decimacija, je valčnih koeficientov v vsaki naslednji stopnji manj.

Koeficientov v zaporedju D1x in A1x je veliko, kar pomeni, da posamezni koeficient

opisuje kratek časovni odsek signala 𝑥(𝑛). Časovna ločljivost je dobra, frekvenčna pa

slaba - s koeficienti D1x je namreč opisana celotna zgornja, z A1x pa spodnja polovica

celotnega frekvenčnega območja od 0 do 𝑓𝑠 2 . V nadaljnjih iteracijah se frekvenčna

ločljivost vsakič izboljša za faktor 2, časovna pa se ustrezno poslabša.

Peter Rinc, Diplomsko delo 10

3.3 RAZŠIRITEV ZA DVODIMENZIONALNE SIGNALE

Dvodimenzionalna razširitev diskretne valčne transformacije je ključna za procesiranje

dvodimenzionalnih signalov, kot so npr. rastrske slike. Dvodimenzionalni signal lahko

predstavimo kot dvodimenzionalno polje 𝑋 𝑀, 𝑁 z 𝑀 vrsticami in 𝑁 stolpci, kjer sta

𝑀 in 𝑁 nenegativni celoštevilski vrednosti.

Osnovna izvedba dvodimenzionalne diskretne valčne transformacije se začne z izvedbo

enodimenzionalne diskretne valčne transformacije po vrsticah (ang. row-wise DWT).

Dobljeni vmesni rezultat se nato transformira še z enodimenzionalno diskretno valčno

transformacijo po stolpcih (ang. column-wise DWT).

Takšna izvedba je mogoča, ker lahko v splošnem dvodimenzionalno skalirno funkcijo

razčlenimo na produkt enodimenzionalnih skalirnih funkcij: 𝜙2 𝑥, 𝑦 = 𝜙1 𝑥 𝜙1(𝑦).

To velja tudi za valčno funkcijo 𝜓(𝑥, 𝑦).

S transformacijo po vrsticah dobimo 2 podpasova (angl. subbands) v vsaki vrstici. Če

zdruţimo vse nizkofrekvenčne podpasove po vrsticah v en podpas L (velikosti 𝑀 ×𝑁

2),

dobimo oţjo obliko oz. pribliţek originalnega dvodimenzionalnega signala. Enako lahko

zdruţimo visokofrekvenčne podpasove v podpas H (velikosti 𝑀 ×𝑁

2), ki v glavnem

vsebuje le visokofrekvenčne informacije originalnega signala oz. podrobnosti o območjih

prekinitve (to so robovi objektov na sliki). Nato nad podpasovoma L in H izvedemo

transformacijo po stolpcih in dobimo 4 podpasove: LL1, LH1, HL1 in HH1

(velikosti 𝑀

𝑁

2), kot je prikazano na sliki 3.4(a). Podpas LL1 je groba slika oz. pribliţek

originalnega signala, podpasovi LH1, HL1 in HH1 pa opisujejo podrobnosti.

Potrebno je še omeniti, da bi povsem enak rezultat dosegli, če bi nad originalnim

signalom najprej izvedli enodimenzionalno diskretno valčno transformacijo po stolpcih in

šele nato nad dobljenim vmesnim rezultatom enodimenzionalno diskretno valčno

transformacijo po vrsticah.

Peter Rinc, Diplomsko delo 11

Slika 3.4: Dvodimenzionalna diskretna valčna transformacija:

(a) prvi nivo dekompozicije, (b) drugi nivo dekompozicije, (c) tretji nivo dekompozicije

Če upoštevamo, da je originalni dvodimenzionalni signal rastrska slika, lahko podpas

LL1 smatramo kot pomanjšano rastrsko sliko originala v razmerju 2:1. Ker ima podobne

lastnosti kot original, ga lahko dalje transformiramo z uporabo dvodimenzionalne diskretne

valčne transformacije in dobimo 4 nove podpasove LL2, LH2, HL2 in HH2. S

transformacijo lahko nato nadaljujemo nad podpasom LL2 in tako naprej [3].

Na sliki 3.4(c) je prikazan končni rezultat hierarhične 3-nivojske dekompozicije.

Primer drugega nivoja dekompozicije prave rastrske slike pa je prikazan na sliki 3.5. Jasno

se lahko vidi, kako podpas LL predstavlja pribliţek originala, podpasovi LH, HL in HH pa

opisujejo le podrobnosti, ki so vidne kot svetle lise na črni podlagi.

Peter Rinc, Diplomsko delo 12

Slika 3.5: Primer drugega nivoja dekompozicije rastrske slike s pomočjo

dvodimenzionalne diskretne valčne transformacije.

Peter Rinc, Diplomsko delo 13

4. FORMAT PGF

PGF (angl. Progressive Graphic File) je slikovni datotečni format, ki omogoča stiskanje

rastrskih slik z izgubami in brez izgub. Razvit je bil z namenom, da bi izboljšal in zamenjal

standard JPEG. Nastal je skoraj istočasno kot JPEG 2000, vendar z drugačnim ciljem: pri

formatu PGF je hitrost pomembnejša od stopnje stiskanja [7].

Prednosti formata PGF pred osnovnim standardom JPEG:

- Kvaliteta slike pri enaki stopnji stiskanja naj bi bila povprečno 3 % boljša. Na sliki

je vidnih manj artefaktov. Tudi pri veliki stopnji stiskanja »kockastega« efekta

skoraj ni mogoče zaslediti.

- Zaradi hierarhične zasnove algoritma, PGF omogoča, da datoteka vsebuje

informacije za več slikovnih komponent. To pomeni, da je slika kodirana v več

ločljivostih. Zaradi tega nam ni potrebno posebej shranjevati majhnih slik za

predogled, kot smo tega vajeni pri standardu JPEG.

- Format PGF ima lepo strukturirano kodo, ki se stopnjuje glede na natančnost

podatkov. Pri stopnjujočem dekodiranju (angl. progressive decoding) uporabnik

postopoma pridobiva informacije o sliki. Če se ta sproti vizualizira, lahko

uporabnik prepozna sliko ţe po 5 do 10 % prenesene vsebine in po ţelji prekine

prenos.

- PGF omogoča stiskanje rastrskih slik z izgubami in brez izgub znotraj iste

arhitekture. Tudi JPEG pogojno omogoča obe funkciji, če upoštevamo vpeljavo

kasnejših verzij formatov, ki pa so med seboj nekompatibilni.

- Še ena od prednosti formata PGF je podpora polni in delni prosojnosti (angl. alpha

planes).

- Od verzije 5 dalje, format PGF podpira preprost, a zelo učinkovit koncept področij

zanimanja (angl. Region of Interest, ROI). S tem pridobimo moţnost, da

dekodiramo le pravokotni del slike, ki nas zanima. To je zelo praktično, če imamo

zelo veliko sliko (npr. zemljevid), zanima pa nas le majhen del.

Peter Rinc, Diplomsko delo 14

Za razliko od standarda JPEG, ki je samo opis metod za stiskanje slik, je PGF tudi

datotečni format. Za končnico .pgf se torej skriva slikovni datotečni format, ki določa

lastnosti slike, kot so barvni prostor, ločljivost in prepletanje.

Podpira velik nabor kombinacij:

- sivinske slike z ločljivostjo 1, 8, 16 ali 31 bitov na piksel,

- slike s tabelo indeksiranih barv velikosti 256 oz. ločljivost 8 bitov na piksel,

- barvne slike RGB z ločljivostjo 12, 16, 24 ali 48 bitov na piksel,

- barvne slike ARGB z ločljivostjo 32 bitov na piksel,

- barvne slike CIE L*a*b z ločljivostjo 24 ali 48 bitov na piksel,

- barvne slike CMYK z ločljivostjo 32 ali 48 bitov na piksel [6].

Osnovan je na hitri, celoštevilski diskretni valčni transformaciji. Tudi standard

JPEG 2000 uporablja diskretno valčno transformacijo, zaradi česar so si nekateri deli

algoritma zelo podobni, nekateri pa so pri formatu PGF precej enostavnejši in zaradi tega

veliko hitrejši [5].

Na sliki 4.1 lahko vidite korake algoritma, ki so potrebni za stiskanje rastrske slike in

njeno rekonstrukcijo.

Slika 4.1: Koraki algoritma PGF za stiskanje in rekonstrukcijo rastrske slike.

Peter Rinc, Diplomsko delo 15

4.1 TRANSFORMACIJA BARVNIH MODELOV

Predpostavljamo, da imamo na vhodu prvega koraka algoritma barvno rastrsko sliko v

modelu RGB. V primeru sivinske slike lahko ta korak preskočimo.

Običajno trije barvni kanali naravne RGB slike vsebujejo prostorsko in barvno

redundanco. Primerna transformacija barvnih kanalov lahko zmanjša redundanco in

prenese večino energije na en kanal. Ta energijski kanal običajno imenujemo akromatični

kanal (angl. achromatic channel), ostala dva pa kromatična kanala (angl. chromatic

channels), saj nosita informacijo o barvi. Znano je, da je človeško oko bolj občutljivo na

zaznavanje sprememb svetlobe kot barve. Zaradi tega lahko zmanjšamo prostorsko

ločljivost kromatičnih kanalov brez večjih vidnih izgub. S tem pridobimo na stopnji

stiskanja podatkov.

Poznamo več takšnih barvnih transformacij, npr. YIQ, YUV in YCbCr, pri katerih Y

vedno predstavlja akromatični kanal. Pri obeh barvnih modelih, YUV in YCbCr,

akromatični kanal zajema 80 – 90 % celotne energije. Obstajajo transformacije s še boljšim

odstotkom zajete energije (> 99 %), vendar so precej kompleksnejše.

Format PGF je usmerjen k hitrosti, zato smo zainteresirani za preprosti celoštevilski

pristop. Uporabljena je naslednja celoštevilska transformacija RGB v YUV:

𝑌 =

𝑅 + 2𝐺 + 𝐵

4 − 2𝑛−1

𝑈 = 𝑅 − 𝐺

𝑉 = 𝐵 − 𝐺

(4.1)

In še inverzna transformacija YUV v RGB:

𝐺 = 𝑌 −

𝑈 + 𝑉

4 + 2𝑛−1

𝑅 = 𝑈 + 𝐺

𝐵 = 𝑉 + 𝐺

(4.2)

Peter Rinc, Diplomsko delo 16

Število 𝑛 v enačbi predstavlja št. bitov (barvno globino) kanalov R, B in G. Tudi kanal

Y je predstavljen z 𝑛 biti, kanala U in V pa zavzemata n+1 bitov.

Celoštevilska implementacija transformacije barvnih modelov je zelo hitra, saj vsebuje

le operacije seštevanja in pomika (angl. shifting). V naslednjih korakih algoritma se,

namesto originalnih RGB, uporabljajo barvni kanali YUV, ki smo jih dobili s

transformacijo barvnih modelov [5].

4.2 DISKRETNA VALČNA TRANSFORMACIJA

Drugi korak algoritma je diskretna valčna transformacija, ki se izvede ločeno za vsak

barvni kanal slike, ki smo ga dobili kot rezultat prejšnjega koraka algoritma. V

nadaljevanju si bomo ogledati DWT le na enem kanalu, saj je postopek za vse tri barvne

kanale identičen.

Dvodimenzionalna DWT je zasnovana na enodimenzionalni DWT (podpoglavje 3.3).

Kot rezultat dobimo piramidalno urejene koeficiente valčne transformacije. V vsakem

koraku izvedemo enodimenzionalno DWT po vrsticah in stolpcih matrike, rezultat pa

decimiramo za faktor 2. Na začetku prvega koraka je matrika enaka barvnemu kanalu

slike. Kot rezultat prvega koraka dvodimenzionalne DWT dobimo 4 podpasove:

podpas LL, ki predstavlja pribliţek originala in podpasove LH, HL in HH, ki opisujejo

podrobnosti. Črka L označuje korak nizkoprepustnega filtra (angl. low-pass filter step),

črka H pa korak visokoprepustnega filtra (angl. high-pass filter step). Vsi štirje podpasovi

skupaj tvorijo en nivo dekompozicije. Naslednji korak dvodimenzionalne DWT se izvede

nad podpasom LL, ki smo ga dobili v prejšnjem koraku. Postopek nadaljujemo tako dolgo,

dokler sta širina in višina podpasa LL večji kot dvakratna dolţina večjega filtra. Na koncu

postopka dobimo piramido nivojev dekompozicije, kjer je velikost vsakega nivoja

pribliţno četrtino tiste, ki jo ima nivo, ki leţi pod njim.

Peter Rinc, Diplomsko delo 17

Pomembni točki diskretne valčne transformacije sta ustrezna izbira nabora filtrov in

pravilne ter natančne celoštevilske implementacije, ki bo ohranila natančnost dobljenih

koeficientov.

Po številnih testiranjih in upoštevanju različnih kriterijev so avtorji algoritma izbrali

nabor filtrov Le Gall 5/3, kjer števili 5 in 3 predstavljata dolţino nizkoprepustnega in

visokoprepustnega filtra. Koeficienti filtra so 𝑘(−1, 2, 6, 2, −1) in 𝑘(−2, 4, −2), kjer je

𝑘 = 1 (4 2) .

Uporabljena celoštevilska implementacija upošteva dejstvo, da lahko faktor 2

nadomestimo z normalizacijo na koncu transformacije, če nizkoprepustni filter delimo s

2 in visokoprepustni filter pomnoţimo s 2. Ta normalizacija uporablja le deljenje in

mnoţenje z 2 in je zato zelo hitra. Kar je še boljše, normalizacijo lahko izvedemo istočasno

kot kvantizacijo (podpoglavje 4.3).

DWT je konvolucija med signalom in filtrom, a se v praksi praviloma ne računa na ta

način, ampak s t.i. dvigovalno shemo (angl. lifting scheme). Ta pristop ima precej

prednosti: pribliţno 50 % manj računanja, ni potrebe po dodatnem prostoru v pomnilniku,

v celoti celoštevilska transformacija (angl. integer-to-integer transform), omogoča

paralelno procesiranje…

Podrobneje si bomo ogledali DWT le za en nivo dekompozicije in rekonstrukcije, in

sicer na enodimenzionalnem signalu. Razširitev na dvodimenzionalne signale je zelo

enostavna (opisana v podpoglavju 3.3), saj lahko vrstice in stolpce obravnavamo kot

zaporedje enodimenzionalnega signala.

V algoritmu dvigovalne sheme predpostavimo, da je 𝑥𝑖 originalni signal, kjer 𝑖 ∈

0, 𝑁 − 1 predstavlja določeno točko v signalu dolţine 𝑁. Naj bosta 𝑙𝑖 in 𝑕𝑖 izhoda

nizkoprepustnega in visokoprepustnega filtra, 𝑀 naj bo enak 𝑁 2 − 1, 𝑐1 in 𝑐2 naj bosta

mali celoštevilski konstanti.

Peter Rinc, Diplomsko delo 18

Diskretna valčna transformacija se izračuna po enačbi:

𝑕0 = 𝑥1 −

𝑥0 + 𝑥2 + 𝑐1

2

𝑙0 = 𝑥0 + 𝑕0 + 𝑐1

2

𝑕𝑘 = 𝑥2𝑘+1 −

𝑥2𝑘 + 𝑥2𝑘+2 + 𝑐1

2

𝑙𝑘 = 𝑥2𝑘 + 𝑕𝑘−1 + 𝑕𝑘 + 𝑐2

4 𝑘 = 1, … , 𝑀 − 1

𝑙𝑀 = 𝑥𝑁−1 + 𝑕𝑀−1 + 𝑐1

2 , 𝑁 𝑗𝑒 𝑙𝑖𝑕𝑜 š𝑡.

𝑕𝑀 = 𝑥𝑁−1 − 𝑥𝑁−2

𝑙𝑀 = 𝑥𝑁−2 + 𝑕𝑀−1 + 𝑕𝑀 + 𝑐2

4 𝑁 𝑗𝑒 𝑠𝑜𝑑𝑜 š𝑡.

(4.3)

Ustrezna rekonstrukcija oz. inverzna diskretna valčna transformacija pa po enačbi:

𝑥0 = 𝑙0 −

𝑕0 + 𝑐1

2

𝑥2𝑘 = 𝑙𝑘 −

𝑕𝑘−1 + 𝑕𝑘 + 𝑐2

4

𝑥2𝑘−1 = 𝑕𝑘−1 + 𝑥2𝑘−2 + 𝑥2𝑘 + 𝑐1

2 𝑘 = 1, … , 𝑀 − 1

𝑥𝑁−1 = 𝑙𝑀 −

𝑕𝑀−1 + 𝑐1

2

𝑥𝑁−2 = 𝑕𝑀−1 + 𝑥𝑁−3 + 𝑥𝑁−1 + 𝑐1

2 𝑁 𝑗𝑒 𝑙𝑖𝑕𝑜 š𝑡.

𝑥𝑁−1 = 𝑕𝑀 + 𝑥𝑁−2 , 𝑁 𝑗𝑒 𝑠𝑜𝑑𝑜 š𝑡.

(4.4)

Teoretično se oba filtra izvedeta najprej nad vrsticami matrike in nato nad stolpci

dobljenega vmesnega rezultata. Pri takšni implementaciji in veliki vhodni sliki bi izvedba

filtrov nad vrsticami trajala le delček tistega časa, ki bi bil potreben za izvedbo filtrov nad

stolpci, če je slika v delovnem pomnilniku shranjena po vrsticah. To ni nič čudnega, saj gre

pri procesorjevem predpomnilniku za lokalnost v prostoru in času, ta lokalnost pa je

omejena le na majhen del delovnega pomnilnika oz. na hiter dostop do majhnega števila

vrstic. Tega se je potrebno zavedati pri načrtovanju algoritma v takšnem smislu, da bomo

maksimalno izkoristili lokalnost v prostoru in času.

Peter Rinc, Diplomsko delo 19

Zaradi tega v praksi najprej izvedemo filtra le nad 𝑟 vrsticami in nato nad stolpci

vmesnega rezultata. Nato nadaljujemo s filtriranjem naslednjih 𝑟 vrstic. Število 𝑟 je

najmanjše število vrstic potrebnih za izvedbo filtrov nad stolpci vmesnega rezultata. S tem

drastično izboljšamo lokalnost v prostoru in času, zmanjšamo pa tudi celotni čas izvedbe

diskretne valčne transformacije [5].

4.3 KVANTIZACIJA

Naslednji korak algoritma je kvantizacija (angl. quantization). Osnovna ideja

kvantizacije je zmanjšati številske vrednosti, ki predstavljajo neke podatke. Manjša števila

zavzemajo manj prostora v pomnilniku, zato s postopkom kvantizacije stisnemo podatke.

Manjša števila nosijo tudi manj informacij, zato se v večini primerov srečamo z izgubo

podatkov med postopkom kvantizacije.

Format PGF uporablja uniformno skalarno kvantizacijo z mrtvo cono (angl. uniform

scalar quantization with dead zone). Kaj to pomeni?

To pomeni, da vsak koeficient 𝑥(𝑖, 𝑗), ki smo ga dobili s pomočjo DWT, delimo z

dolţino kvantizacijskega intervala ∆ in rezultat navzdol zaokroţimo – enačba (4.5). Ker je

kvantizacija uniformna, se dolţina intervala ne spreminja in je v našem algoritmu enaka

eni od potenc števila 2. To je zelo praktično, saj lahko na tem mestu enostavno zdruţimo

kvantizacijo in normalizacijo, ki je potrebna zaradi modifikacije koeficientov v filtrih

DWT (podpoglavje 4.2).

𝑞 𝑖, 𝑗 = 𝑠𝑖𝑔𝑛(𝑥(𝑖, 𝑗))

𝑥(𝑖, 𝑗)

∆ , ∆= 1, 2, 4, 16, 32, …

(4.5)

Izbira dolţine kvantizacijskega intervala je odvisna od tega, koliko informacij o sliki

smo pripravljeni izgubiti. Ponavadi lahko uporabnik vnaprej določi faktor stiskanja in na

podlagi tega se izračuna vrednost ∆. Ker ima kvantizacija zaradi fiksne dolţine intervala

slabo lastnost prilagajanja, v večini doseţemo nekoliko slabši rezultat, kot bi ga sicer.

Peter Rinc, Diplomsko delo 20

Iz enačbe (4.5) lahko vidimo, da vrednost 𝑞(𝑖, 𝑗) določa interval, v katerem leţi

koeficient 𝑥(𝑖, 𝑗). Intervali so prikazani na sliki 4.2. Koeficienti, ki so znotraj intervala

−∆, ∆ , se kvantizirajo v vrednost 0. Zato se ta interval imenuje mrtva cona, njegova

dolţina pa je 2∆.

Slika 4.2: Kvantizacijski intervali s fiksno dolžino.

Korak dekvantizacije v procesu rekonstrukcije slike je inverzni postopek kvantizacije.

Zavedati se moramo, da je popolna rekonstrukcija slike (brez izgub) moţna le v primeru,

če je izbrana dolţina kvantizacijskega intervala enaka 1. V vseh ostalih primerih pa se

moramo sprijazniti z manjšimi ali večjimi izgubami oz. s spremembami na sliki [5].

4.4 KODIRANJE

Zadnji korak algoritma je kodiranje kvantiziranih valčnih koeficientov v bitni niz

(angl. bitstream). Problem pri tem koraku je najti hitro, prostorsko efektivno metodo, za

katero obstaja enostavni povratni postopek. V večini primerov je faza kodiranja sestavljena

iz več korakov, vsebovala pa naj bi vsaj korak prerazporeditve (angl. reordering step) in

korak stiskanja (angl. compression step). Cilj prerazporeditvenega koraka je razporediti

koeficiente na tak način, da bo stiskanje čim bolj učinkovito.

Pri formatu PGF je uporabljen stopnjujoči valčni kodirnik (angl. Progressive Wavelet

Coder, PWC). Osnovan je na stopnjujočem kodiranju slike, kjer je bitni niz vgrajen

(angl. embedded). To pomeni, da lahko dobimo predstavitve slike vseh stopenj, vključno s

stopnjo kodiranja, preprosto z označevanjem stopnje v predponi bitnega niza.

Peter Rinc, Diplomsko delo 21

Vgrajeno kodiranje lahko doseţemo z uporabo kodirne tehnike bitnih ravnin

(angl. bit-plane encoding technique) nad kvantiziranimi valčnimi koeficienti.

Najpomembnejše bitne ravnine ponavadi vsebujejo veliko ničel, zaradi tega jih lahko brez

izgub učinkovito stisnemo s kodirniki entropije. Pri formatu PGF je uporabljeno kodiranje

bitnih ravnin s fiksno velikostjo makroblokov [5].

V nadaljevanju sta opisana oba koraka kodirnika, korak prerazporeditve in korak

stiskanja. Izognili se bomo opisu dekodirnika, saj je njegova funkcionalnost enostavnejša

in bolj ali manj inverzna kodirniku.

4.4.1 Korak prerazporeditve

Kodiranje bitnih ravnin je bolj učinkovito, če nam uspe prerazporediti koeficiente na

tak način, da so tisti z manjšimi absolutnimi vrednostmi čim bolj skupaj.

Slika 4.3: Razdelitev kvantiziranih valčnih koeficientov v bloke.

Peter Rinc, Diplomsko delo 22

Postopek začnemo z razdelitvijo podpasov v pravokotne bloke. Podpasova LL in HH

razdelimo v bloke velikosti 8x8, podpasova LH in HL pa v bloke velikosti 4x4. Razdelitev

je prikazana na sliki 4.3.

Korak prerazporeditve nadaljujemo tako, da izbiramo koeficiente po piramidi nivojev

dekompozicije od najvišjega nivoja proti najniţjemu. Vrstni red je oštevilčen na sliki 4.3.

Začnemo pri podpasu LL najvišjega nivoja, nato izmenično izbiramo bloke iz podpasov

LH in HL, nazadnje pa iz podpasa HH. S postopkom nadaljujemo na niţjem nivoju.

Razlog za izmenično izbiranje blokov iz podpasov LH in HL je preprost.

Predpostavimo, da ima originalna slika na določeni lokaciji neki objekt. Velika verjetnost

je, da bosta podpasova LH in HL imela na tej lokaciji podobne koeficiente v enakem

vrstnem redu. Zaradi tega je smotrno izbrati te pare blokov na tak način, da se bodo

pojavili eden za drugim.

Postopek zaključimo z gradnjo makroblokov. To storimo tako, da obiščemo vsak blok

v takšnem vrstnem redu, kot smo ga prej določili, in koeficiente prepišemo v makroblok.

Velikost makroblokov je fiksna in je enaka eni od potenc števila 2 (npr. 4096).

4.4.2 Korak stiskanja

Pri tem koraku stisnemo in kodiramo vsak makroblok posebej. Kot rezultat dobimo

bitni niz, ki ga ponavadi zapišemo v datoteko. Uporabljen je prilagodljiv kodirnik tekoče

dolţine RLR (angl. Run-length/Rice coder) za kodiranje neničelnih bitnih ravnin v

makroblokih. Kodirnik RLR s parametrom 𝑘 (logaritemska dolţina zaporedja ničel) je

najbolj primeren predvsem zaradi hitrosti in enostavne implementacije.

Uporablja se prilagodljiva kodirna tehnika bitnih ravnin (angl. adaptive bit-plane

encoding technique) z manjšimi modifikacijami. Najbolje je, da si najprej ogledamo

originalno tehniko in nato preidemo na vpeljane izboljšave.

Peter Rinc, Diplomsko delo 23

Kodiranje začnemo z najpomembnejšo bitno ravnino 𝑣 = 0 in nadaljujemo s

povečevanjem parametra 𝑣 proti najmanj pomembni bitni ravnini. Algoritem deluje takole:

1. Začnemo z makroblokom koeficientov 𝑐𝑖 in definiramo vektor zastavice

pomembnosti 𝑧, tako da je 𝑧𝑖 = 0 za vse 𝑖. Nastavimo vrednost 𝑣 = 0 tako, da se

kodiranje začne z najpomembnejšo bitno ravnino.

2. Naj bo 𝑏𝑖 𝑣-ti bit koeficienta 𝑐𝑖 . Niz 𝑏𝑖 razdelimo v 2 niza: 𝐵𝑆 = 𝑏𝑖|𝑧𝑖 = 0 in

𝐵𝑅 = 𝑏𝑖|𝑧𝑖 = 1 . To pomeni, da so v nizu 𝐵𝑆 tisti biti, katerih zastavica

pomembnosti 𝑧𝑖 je enaka 0, v nizu 𝐵𝑅 pa tisti biti, katerih zastavica 𝑧𝑖 je enaka 1.

3. Zaporedje bitov v 𝐵𝑆 kodiramo s kodirnikom RLR in dobljeni rezultat dodamo na

konec bitnega niza.

4. Zaporedje bitov v 𝐵𝑅 dodamo na konec bitnega niza.

5. Nastavimo vrednost 𝑧𝑖 = 1 za vse 𝑖, za katere velja 𝑏𝑖 ∈ 𝐵𝑆 in 𝑏𝑖 = 1.

6. Če zadnja bitna ravnina še ni bila kodirana, povečamo 𝑣 in se vrnemo na korak 2.

Za boljšo predstavo si oglejmo bitne ravnine na primeru [4]:

Koeficienti 𝑐𝑖 : 9 6 1 0 2 3 4 1 2 …

Bitna ravnina (𝑣 = 0): 1 0 0 0 0 0 0 0 0 …

Bitna ravnina (𝑣 = 1): 0 1 0 0 0 0 1 0 0 …

Bitna ravnina (𝑣 = 2): 0 1 0 0 1 1 0 0 1 …

Bitna ravnina (𝑣 = 3): 1 0 1 0 0 1 0 1 0 …

2. korak – razdelitev niza 𝑏𝑖 :

𝐵𝑆 𝐵𝑅

Bitna ravnina (𝑣 = 0): {100000000} {}

Bitna ravnina (𝑣 = 1): {10000100} {0}

Bitna ravnina (𝑣 = 2): {001101} {010}

Bitna ravnina (𝑣 = 3): {101} {100100}

Peter Rinc, Diplomsko delo 24

3. korak – zaporedje bitov v nizu 𝐵𝑆 ima pogosto veliko ničel, še posebej začetna bitna

ravnina. Kodiramo jih s kodirnikom RLR po naslednjih pravilih:

Kodna beseda: Vhodno bitno zaporedje:

0 Zaporedje 2𝑘 ničel.

1 d 0 Zaporedje 𝑑 < 2𝑘 ničel, ki jim sledi 1, 𝑐𝑖 ≥ 0.

1 d 1 Zaporedje 𝑑 < 2𝑘 ničel, ki jim sledi 1, 𝑐𝑖 < 0.

Vrednost parametra 𝑘 je odvisna od verjetnosti, da je 𝑐𝑖 = 0. Večja kot je verjetnost,

večja naj bi bila vrednost parametra 𝑘. Ker ne poznamo njegove optimalne vrednosti,

uporabimo prilagodljivo strategijo. Začnemo s 𝑘 = 0 in nato prilagajamo 𝑘 tako, da ga

povečamo za ena vsakič, ko oddamo kodno besedo »0«, in zmanjšamo za ena vsakič, ko

oddamo kodno besedo, ki se začne z »1«. Primeri za nekatere vrednosti parametra 𝑘:

𝑘 𝑠𝑖𝑔𝑛(𝑐𝑖) Vhod: Izhod: 𝑘 𝑠𝑖𝑔𝑛(𝑐𝑖) Vhod: Izhod:

0 0 0 3 00000000 0

+ 1 10 + 1 10000

- 1 11 - 1 10001

1 00 0 + 01 10010

+ 1 100 - 01 10011

- 1 101 + 001 10100

+ 01 110 - 001 10101

- 01 111 + 0001 10110

2 0000 0 - 0001 10111

+ 1 1000 + 00001 11000

- 1 1001 - 00001 11001

+ 01 1010 + 000001 11010

- 01 1011 - 000001 11011

+ 001 1100 + 0000001 11100

- 001 1101 - 0000001 11101

+ 0001 1110 + 00000001 11110

- 0001 1111 - 00000001 11111

Peter Rinc, Diplomsko delo 25

Omenili smo ţe, da vsebujejo bitne ravnine, z majhnim parametrom 𝑣, dolga zaporedja

samih ničel, zato jih uspešno stisnemo s kodirnikom tekoče dolţine RLR. Na ţalost pa se

učinkovitost kodirnika RLR zmanjšuje z večanjem parametra 𝑣 proti najmanj pomembni

bitni ravnini. Učinkovitost je lahko celo negativna, kar pomeni, da je vhodno bitno

zaporedje krajše od ustreznega izhoda RLR kodirnika. Preprosti primer je vhodno

zaporedje bitov '01001', ki se kodira v niz '010s011s', kjer je bit s odvisen od predznaka

koeficienta 𝑐𝑖 .

Tukaj je razlog za modifikacijo originalne tehnike kodiranja bitnih ravnin. Kadar se

zgodi, da je izhod kodirnika daljši od vhodnega bitnega niza, izhod kodirnika zavrţemo in

ohranimo kar vhodni bitni niz. Z dodatno zastavico pa moramo specificirati, ali smo nad

nizom 𝐵𝑆 uporabili kodirnik RLR ali pa smo ga le prepisali. Tako pri dekodiranju takoj

vemo, kako moramo interpretirati bitni niz [5].

Peter Rinc, Diplomsko delo 26

5. APLIKACIJA »PGF IMAGE VIEWER«

V okviru diplomskega dela smo implementirali lastno aplikacijo za stiskanje in

razširjanje barvnih in sivinskih rastrskih slik. Aplikacija je poimenovana v angleškem

jeziku »PGF Image Viewer«, kar bi prevedeno pomenilo »Pregledovalnik slik PGF«.

Zraven formata PGF smo v celoti podprli tudi formate BMP, JPEG in JPEG 2000. To

pomeni, da lahko prikaţemo in shranimo poljubno sliko v kateremkoli od podprtih

formatov.

Za potrebe naše raziskave smo aplikacijo kasneje še nekoliko razširili in vanjo vgradili

mnoţico testov, s katerimi smo primerjali formate JPEG, JPEG 2000 in PGF (več o tem v

poglavju 6).

Slika 5.1: Glavno okno aplikacije »PGF Image Viewer«.

Peter Rinc, Diplomsko delo 27

5.1 FUNKCIONALNOST APLIKACIJE

5.1.1 Delo z datotekami

Funkcionalnost aplikacije »PGF Image Viewer« lahko razdelimo na dva dela. Prvi del

predstavlja delo z slikovnimi datotekami oz. slikami. V meniju »File« izberemo moţnost

»Open…« in s pomočjo dialoga izberemo in prikaţemo poljubno sliko formata BMP,

JPEG, JPEG 2000 ali PGF.

Slika 5.2: Možnosti menija »File«.

Zraven prikaza slike lahko preberemo tudi podatke o le-tej (datotečni format, velikost

datoteke, stopnja stiskanja, velikost slike, barvni model in barvna globina). Primer lahko

vidimo na sliki 5.1.

Če imamo v aplikaciji naenkrat odprtih več slik, lahko med njimi preklapljamo z

ustreznim izborom v meniju »Image«.

5.3: Možnosti menija »Image«.

Ko izberemo eno od slik, jo lahko shranimo v kateremkoli od podprtih formatov. To

naredimo z izbiro moţnosti »Save As…« v meniju »File«. Odpre se nam dialog, v katerem

izberemo format in ime nove datoteke.

Peter Rinc, Diplomsko delo 28

Glede na to kateri format smo izbrali, se nam nato odpre še eno okno, v katerem

moramo določiti parameter kvalitete (to ne velja za format BMP).

Za format JPEG imamo na razpolago vrednosti parametra kvalitete med 1 in 100, kot

lahko vidimo na sliki 5.4. Vrednost 100 predstavlja najboljšo, vrednost 1 pa najslabšo

kvaliteto. Večja kot je vrednost parametra, manj bomo izgubili pri stiskanju slike,

posledično pa bo velikost datoteke večja. Za manjše vrednosti parametra velja obratno.

5.4: Izbira vrednosti parametra kvalitete za format JPEG.

Za format JPEG 2000 imamo na razpolago vrednosti parametra kvalitete med 1 in 512,

kot lahko vidimo na sliki 5.5. Tukaj velja obratno pravilo kot pri formatu JPEG: večja

vrednost parametra pomeni slabšo kvaliteto, manjša vrednost pa boljšo kvaliteto shranjene

slike. Če je vrednost parametra enaka 1, gre za stiskanje brez izgub.

5.5: Izbira vrednosti parametra kvalitete za format JPEG 2000.

Za format PGF imamo eno nastavitev več, kot lahko vidimo na sliki 5.6. Tako kot pri

predhodnih dveh formatih moramo najprej določiti vrednost parametra kvalitete. Na

razpolago imamo vrednosti med 0 in 12. Vrednost 0 predstavlja stiskanje brez izgub; z

večanjem vrednosti parametra se kvaliteta slike slabša, posledično pa se manjša velikost

Peter Rinc, Diplomsko delo 29

datoteke. Drugi parameter, ki ga moramo določiti, je število nivojev dekompozicije DWT.

Če izberemo vrednost 0, bo aplikacija sama izbrala smiselno število nivojev.

5.6: Izbira vrednosti parametra kvalitete in nivojev dekompozicije za format PGF.

5.1.2 Izvajanje testov

Drugi del funkcionalnosti aplikacije »PGF Image Viewer« je mnoţica ponovljivih

testov za primerjavo formatov JPEG, JPEG 2000 in PGF. Izbrali smo 5 barvnih rastrskih

slik in na podlagi teh slik pripravili 5 testov, ki jih lahko vidimo v meniju »Tests«.

5.7: Možnosti menija »Tests«.

Vsak test stisne originalno sliko s 6-8 različnimi nastavitvami parametra kvalitete

izbranega formata. Vrednosti parametra kvalitete so za vsak format skrbno izbrane, tako da

dobimo pri vseh treh testiranih formatih slike, ki so stisnjene s pribliţno enako stopnjo

stiskanja. To nam omogoča, da lahko rezultate testov med seboj enostavno primerjamo.

Primer dobljenih rezultatov lahko vidimo na sliki 5.8.

Peter Rinc, Diplomsko delo 30

5.8: Rezultati testa s sliko flower_foveon.bmp za vse tri formate.

Dobljene rezultate lahko po koncu testiranja shranimo v tekstovno datoteko s pritiskom

na gumb »Save Results…«. To je zelo uporabno, saj so testi časovno precej zahtevni in bi

bilo zelo zamudno, če bi jih poganjali vsakič, ko bi ţeleli videti rezultate.

Peter Rinc, Diplomsko delo 31

5.2 IMPLEMENTACIJA APLIKACIJE

Aplikacija »PGF Image Viewer« je bila razvita v razvojnem okolju Microsoft Visual

Studio 2008. Slikovni vmesnik je bil implementiran v programskem jeziku C# s pomočjo

ogrodja .NET Framework 3.5. Za izvajanje na datotečnem nivoju pa sta bili vključeni dve

odprtokodni dinamični knjiţnici, implementirani v programskem jeziku C++.

5.2.1 Podpora za delo z datotekami formata PGF

Za branje in pisanje datotek formata PGF smo uporabili odprtokodno knjiţnico libPGF,

ki je prosto dostopna v obliki izvorne kode na spletnem naslovu http://www.libpgf.org/. Na

istem naslovu se nahaja tudi obširna dokumentacija libPGF Reference Manual 4.0.

Za potrebe naše aplikacije smo na osnovi dobljene izvorne kode implementirali

dinamično knjiţnico »PGFWrapper.dll«. V knjiţnici smo implementirali 8 funkcij na tak

način, da smo jih lahko enostavno uvozili v našo aplikacijo z ukazom DLLImport.

[DllImport("PGFWrapper.dll")]

static extern int DecodePGF(string source, string dest);

Parametri funkcije:

source - pot do izvorne datoteke formata PGF,

dest - pot do ciljne datoteke formata BMP.

Funkcija vrne celoštevilsko vrednost, ki ima določen pomen:

-1 - Napaka: izvorne datoteke ni mogoče odpreti za branje.

-2 - Napaka: odpiranje in branje datoteke PGF je spodletelo.

-3 - Napaka: dekodiranje ni podprto za ta barvni model.

-4 - Napaka: pisanje ciljne datoteke je spodletelo.

≥ 0 - Čas, potreben za branje in dekodiranje slike PGF v milisekundah.

Peter Rinc, Diplomsko delo 32

[DllImport("PGFWrapper.dll")]

static extern int EncodePGF(string source,

string dest,

int levels,

int quality);

Parametri funkcije:

source - pot do izvorne datoteke formata BMP, JPEG ali JPEG 2000,

dest - pot do ciljne datoteke formata PGF,

levels - število nivojev dekompozicije DWT

(če je število enako 0, se izbere smiselno število nivojev),

quality - vrednost parametra kvalitete

(če je vrednost enaka 0, gre za stiskanje brez izgub).

Funkcija vrne celoštevilsko vrednost, ki ima določen pomen:

-1 - Napaka: ciljne datoteke ni mogoče odpreti za pisanje.

-2 - Napaka: odpiranje in branje izvorne datoteke je spodletelo.

-3 - Napaka: nepodprti format izvorne datoteke.

-4 - Napaka: uvaţanje izvorne slike je spodletelo.

-5 - Napaka: pisanje ciljne datoteke je spodletelo.

≥ 0 - Čas, potreben za kodiranje in pisanje slike PGF v milisekundah.

[DllImport("PGFWrapper.dll")]

static extern int GetWidthPGF(string source);

[DllImport("PGFWrapper.dll")]

static extern int GetHeightPGF(string source);

[DllImport("PGFWrapper.dll")]

static extern int GetLevelsPGF(string source);

[DllImport("PGFWrapper.dll")]

static extern int GetQualityPGF(string source);

[DllImport("PGFWrapper.dll")]

static extern int GetColorDepthPGF(string source);

Parametri funkcij:

source - pot do izvorne datoteke formata PGF.

Peter Rinc, Diplomsko delo 33

Vseh 5 funkcij vrača celoštevilsko vrednost. Če je vrednost manjša od 0, je prišlo med

izvajanjem do napake, če pa je vrednost večja ali enaka 0, pa to označuje eno od lastnosti

rastrske slike:

-1 - Napaka: izvorne datoteke ni mogoče odpreti za branje.

-2 - Napaka: odpiranje in branje datoteke PGF je spodletelo.

≥ 0 - GetWidthPGF - širina slike PGF v pikslih,

- GetHeightPGF - višina slike PGF v pikslih,

- GetLevelsPGF - število nivojev dekompozicije slike PGF,

- GetQualityPGF - vrednost parametra kvalitete pri kodiranju slike PGF,

- GetColorDepthPGF - barvna globina slike PGF v številu bitov na piksel.

[DllImport("PGFWrapper.dll")]

static extern int GetColorTypePGF(string source);

Parametri funkcije:

source - pot do izvorne datoteke formata PGF.

Funkcija vrne celoštevilsko vrednost, ki ima določen pomen:

-1 - Napaka: izvorne datoteke ni mogoče odpreti za branje.

-2 - Napaka: odpiranje in branje datoteke PGF je spodletelo.

-3 - Napaka: dekodiranje ni podprto za ta barvni model.

0 - Neznani barvni tip.

1 - Bitmap.

2 - Gray.

3 - Indexed.

4 - RGB.

5 - RGBA.

Peter Rinc, Diplomsko delo 34

5.2.2 Podpora za delo z datotekami formatov BMP, JPEG in JPEG 2000

Za branje in pisanje datotek formata BMP, JPEG in JPEG 2000 smo uporabili

odprtokodno knjiţnico FreeImage, ki je prosto dostopna v obliki izvorne kode ali kot

dinamična knjiţnica na spletnem naslovu http://freeimage.sourceforge.net/download.html.

Na istem naslovu se nahaja tudi obširna dokumentacija in preprosti primeri uporabe.

Z vključevanjem te knjiţnice v našo aplikacijo smo imeli veliko manj dela, saj je

paketu, ki ga prenesemo s spletne strani, dodana različica knjiţnice »FreeImageNET.dll«,

ki jo lahko enostavno vključimo kot referenco v katerikoli projekt .NET.

Knjiţnica FreeImage podpira branje in pisanje za široko paleto slikovnih datotečnih

formatov. Zraven tega pa vsebuje še številne bolj ali manj kompleksne rutine za

manipulacijo s slikami. Omejili se bomo le na funkcionalnost, ki smo jo uporabljali v naši

aplikaciji. Za nas sta pomembni predvsem funkciji za nalaganje in shranjevanje datotek oz.

slik, shranjenih v formatih BMP, JPEG in JPEG 2000:

public static FIBITMAP LoadEx(string filename);

Parametri funkcije:

filename - pot do datoteke, ki jo ţelimo naloţiti.

Funkcija vrne spremenljivko tipa FIBITMAP. To je struktura bitne slike, ki nosi vse

informacije o naloţeni datoteki. Ko imamo na tak način naloţeno rastrsko sliko, lahko z

njo počnemo marsikaj. Med drugim jo lahko shranimo v kateremkoli od podprtih

formatov.

public static bool SaveEx(FIBITMAP dib,

string filename,

FREE_IMAGE_FORMAT format,

FREE_IMAGE_SAVE_FLAGS flags);

Parametri funkcije:

dib - rastrska slika tipa FIBITMAP,

Peter Rinc, Diplomsko delo 35

filename - pot do ciljne datoteke, ki jo ţelimo shraniti,

format - format ciljne datoteke tipa FREE_IMAGE_FORMAT,

flags - zastavice za shranjevanje ciljne datoteke tipa FREE_IMAGE_SAVE_FLAGS.

Pri naši aplikaciji smo uporabljali naslednje člane tipa FREE_IMAGE_FORMAT:

FIF_BMP - za format BMP,

FIF_JPEG - za format JPEG,

FIF_JP2 - za format JPEG 2000.

Zastavica za format BMP:

BMP_DEFAULT - shrani sliko brez stiskanja.

Zastavice za format JPEG:

JPEG_DEFAULT - shrani sliko s privzeto kvaliteto (75),

JPEG_QUALITYSUPERB - shrani sliko z najboljšo kvaliteto (100),

JPEG_QUALITYGOOD - shrani sliko z dobro kvaliteto (75),

JPEG_QUALITYNORMAL - shrani sliko z normalno kvaliteto (50),

JPEG_QUALITYAVERAGE - shrani sliko s povprečno kvaliteto (25),

JPEG_QUALITYBAD - shrani sliko s slabo kvaliteto (10),

X in [0..100] - shrani sliko s poljubno kvaliteto (vrednost med 0 in 100).

Zastavice za format JPEG 2000:

JP2_DEFAULT - shrani sliko s privzeto kvaliteto (16),

X in [1..512] - shrani sliko s poljubno kvaliteto (vrednost med 1 in 512).

Funkcija vrne vrednost true, če je bila datoteka uspešno shranjena, oz. false, če je

prišlo pri shranjevanju datoteke do napake.

Obe funkciji, LoadEx in SaveEx, sta prekriti funkciji (angl. overloaded functions), saj

obstaja več različic, ki se med seboj razlikujejo po številu ali tipu parametrov. Tukaj smo

predstavili le tisti različici funkcij, ki smo ju uporabljali pri implementaciji naše aplikacije.

Peter Rinc, Diplomsko delo 36

6. PRIMERJAVA FORMATOV

Poglavitni faktor pri izbiri tehnike za stiskanje podatkov je učinkovitost stiskanja

(angl. compression efficiency), vendar pa to ni edini faktor na katerega smo pozorni.

Pomembno vlogo ima tudi hitrost izvajanja (angl. runtime), pozorni pa smo še na nekatere

druge funkcionalnosti, ki jih podpirata kodirnik in dekodirnik.

6.1 PRIMERJALNE METODE

Če primerjamo tehnike stiskanja brez izgub, učinkovitost stiskanja enostavno izmerimo

oz. ovrednotimo s pomočjo dobljene stopnje stiskanja. Pri primerjavi tehnik stiskanja z

izgubami pa to ni več tako enostavno. Ponavadi se posluţimo metode, ki primerja rezultat

oz. sliko pri isti stopnji stiskanja. Najprej izračunamo koren srednje kvadratne vrednosti

napake (angl. Root Mean Square Error, RMSE), nato pa ustrezno vrednost razmerja

signal-šum (angl. Peak Signal to Noise Ratio, PSNR) v dB.

𝑅𝑀𝑆𝐸 = 1

𝑛 𝑝𝑖 − 𝑞𝑖 2

𝑛

𝑖=1

(6.1)

𝑃𝑆𝑁𝑅 = 20 log10

max𝑖

𝑝𝑖

𝑅𝑀𝑆𝐸

(6.2)

Število 𝑛 v enačbah (6.1) in (6.2) predstavlja število pikslov rastrske slike, 𝑝𝑖 so piksli

originalne slike, 𝑞𝑖 pa ustrezni piksli v stisnjeni sliki. Če ima slika več barvnih kanalov,

izračunamo vrednost PSNR za vsak kanal posebej in nato izračunamo povprečje.

Dobljena vrednost 30 dB ustreza sliki z nizko kvaliteto, medtem ko vrednost 50 dB

pomeni na videz skoraj perfektno rekonstrukcijo originalne slike.

Peter Rinc, Diplomsko delo 37

Čeprav je znano, da vrednosti RMSE in PSNR nista vedno zanesljivi pri določanju

kvalitete slike, sta vseeno najbolj ustaljeni in dobro znani meri, ki delujeta zadovoljivo

dobro na širokem območju stopenj stiskanja [5].

Naslednja lastnost, ki jo moramo izmeriti pri primerjavi tehnik za stiskanje podatkov, je

čas izvajanja. Ne pomaga nam namreč veliko, če je neka tehnika pri stiskanju učinkovitejša

kot druga, pri tem pa za izvajanje potrebuje desetkrat več časa.

6.2 TESTIRANJE

V okviru diplomskega dela smo se odločili med seboj primerjati formate JPEG,

JPEG 2000 in PGF. S pomočjo petih barvnih rastrskih slik smo izvedli niz petih testov.

Testne slike smo skrbno izbrali izmed mnoţice v ta namen pripravljenih slik na spletni

strani http://www.imagecompression.info/test_images/. Slike so naravnega izvora in naj bi

stresno vplivale na različne dele algoritma.

Testirali smo z našo aplikacijo »PGF Image Viewer«, ki smo jo poganjali na

računalniku z naslednjo konfiguracijo:

- matična plošča Asus P5K-E,

- procesor Intel Core 2 Duo E8400 @ 3000 MHz,

- delovni pomnilnik DDR2 PC2-6400 Corsair 2GB,

- grafična kartica EVGA GeForce 8800GT SC 512MB GDDR3,

- trdi disk Samsung F1 750GB 7200rpm 32MB SATA2,

- operacijski sistem Microsoft Windows Vista SP1 32-bit.

S pomočjo testov smo ovrednotili učinkovitost stiskanja (izračunali smo vrednost

PSNR) za vsak format posebej. Izmerili smo tudi potrebne čase za stiskanje in razširjanje

slik. S pomočjo dobljenih rezultatov smo med seboj primerjali grafične datotečne formate.

Peter Rinc, Diplomsko delo 38

6.3 REZULTATI

Dobljeni rezultati so pribliţno takšni, kot smo jih pričakovali in se do neke mere

ujemajo s tistimi, ki jih lahko najdemo v dosegljivi literaturi, predvsem v [5]. Čeprav naj bi

slike, ki smo jih izbrali za testiranje, stresno vplivale na različne dele algoritmov, se

dobljeni rezultati med seboj minimalno razlikujejo in jih lahko zato pokomentiramo kar

skupaj, na tem mestu.

Če si najprej ogledamo vrednosti PSNR v odvisnosti od stopnje stiskanja na slikah 6.2,

6.6, 6.10, 6.14 in 6.18, lahko iz grafov takoj razberemo, da formata JPEG 2000 in PGF

prekašata JPEG v kvaliteti stisnjene slike pri isti stopnji stiskanja. Razlika se veča pri višjih

stopnjah stiskanja (80:1 ali več).

Če med seboj primerjamo formata JPEG 2000 in PGF, pa ugotovimo naslednje: format

JPEG 2000 je pri stiskanju brez izgub pokazal boljše rezultate, kar pomeni, da stisnjena

slika v večini primerov zavzema manj prostora. Pri stiskanju z izgubami pa sta formata v

povprečju izenačena. To nas je nekoliko presenetilo, saj bi zaradi zasnove algoritma

formata PGF pričakovali nekoliko slabše rezultate. Razlog za to je verjetno nekoliko slabša

implementacija formata JPEG 2000 v uporabljeni knjiţnici FreeImage.

Kako pa je s časi izvajanja? Iz grafov na slikah 6.3, 6.7, 6.11, 6.15 in 6.19 lahko

razberemo, da se čas stiskanja za format PGF hitro spusti na raven JPEG in je pri stopnji

stiskanja 40:1 ţe pribliţno enak. Pri formatu JPEG 2000 pa stiskanje traja tudi do desetkrat

več časa v primerjavi z JPEG. Slabo je tudi to, da se z večanjem stopnje stiskanja čas

stiskanja pri JPEG 2000 bistveno ne spremeni.

Do podobnih ugotovitev pridemo, če opazujemo čas razširjanja v odvisnosti od stopnje

stiskanja. Iz grafov na slikah 6.4, 6.8, 6.12, 6.16 in 6.20 lahko razberemo, da se tudi tukaj

čas razširjanja za format PGF hitro spusti na raven JPEG, pri formatu JPEG 2000 pa

razširjanje traja veliko dlje. Razlika v primerjavi z JPEG sicer ni tako drastična kot pri

stiskanju, pa tudi čas se zmanjšuje z večanjem stopnje stiskanja.

Peter Rinc, Diplomsko delo 39

6.3.1 Testna slika »hdr«

Slika 6.1: Testna datoteka »hdr.bmp«

(velikost datoteke: 18 MB, velikost slike: 3072 x 1048 pikslov,

barvni model: RGB, barvna globina: 24 bpp).

Slika 6.2: Vrednost PSNR v odvisnosti od stopnje stiskanja.

20

25

30

35

40

45

50

55

60

65

0 20 40 60 80 100 120 140 160

PSN

R [

dB

]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 40

Slika 6.3: Čas stiskanja v odvisnosti od stopnje stiskanja.

Slika 6.4: Čas razširjanja v odvisnosti od stopnje stiskanja.

0

1

2

3

4

5

6

0 20 40 60 80 100 120 140 160

Čas

sti

skan

ja [

s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

0

0,5

1

1,5

2

2,5

3

3,5

4

4,5

5

0 20 40 60 80 100 120 140 160

Čas

raz

širj

anja

[s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 41

6.3.2 Testna slika »bridge«

Slika 6.5: Testna datoteka »bridge.bmp«

(velikost datoteke: 31,8 MB, velikost slike: 2749 x 4049 pikslov,

barvni model: RGB, barvna globina: 24 bpp).

Slika 6.6: Vrednost PSNR v odvisnosti od stopnje stiskanja.

20

25

30

35

40

45

50

55

60

65

0 20 40 60 80 100 120 140

PSN

R [

dB

]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 42

Slika 6.7: Čas stiskanja v odvisnosti od stopnje stiskanja.

Slika 6.8: Čas razširjanja v odvisnosti od stopnje stiskanja.

0

2

4

6

8

10

12

14

0 20 40 60 80 100 120 140

Čas

sti

skan

ja [

s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

0

2

4

6

8

10

12

0 20 40 60 80 100 120 140

Čas

raz

širj

anja

[s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 43

6.3.3 Testna slika »cathedral«

Slika 6.9: Testna datoteka »cathedral.bmp«

(velikost datoteke: 17,2 MB, velikost slike: 2000 x 3008 pikslov,

barvni model: RGB, barvna globina: 24 bpp).

Slika 6.10: Vrednost PSNR v odvisnosti od stopnje stiskanja.

20

25

30

35

40

45

50

55

0 20 40 60 80 100 120 140 160 180

PSN

R [

dB

]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 44

Slika 6.11: Čas stiskanja v odvisnosti od stopnje stiskanja.

Slika 6.12: Čas razširjanja v odvisnosti od stopnje stiskanja.

0

1

2

3

4

5

6

7

0 20 40 60 80 100 120 140 160 180

Čas

sti

skan

ja [

s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

0

1

2

3

4

5

6

0 20 40 60 80 100 120 140 160 180

Čas

raz

širj

anja

[s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 45

6.3.4 Testna slika »flower_foveon«

Slika 6.13: Testna datoteka »flower_foveon.bmp«

(velikost datoteke: 9,8 MB, velikost slike: 2268 x 1512 pikslov,

barvni model: RGB, barvna globina: 24 bpp).

Slika 6.14: Vrednost PSNR v odvisnosti od stopnje stiskanja.

20

25

30

35

40

45

50

55

60

65

0 20 40 60 80 100 120 140 160

PSN

R [

dB

]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 46

Slika 6.15: Čas stiskanja v odvisnosti od stopnje stiskanja.

Slika 6.16: Čas razširjanja v odvisnosti od stopnje stiskanja.

0

0,5

1

1,5

2

2,5

0 20 40 60 80 100 120 140 160

Čas

sti

skan

ja [

s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

0

0,5

1

1,5

2

2,5

0 20 40 60 80 100 120 140 160

Čas

raz

širj

anja

[s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 47

6.3.5 Testna slika »spider_web«

Slika 6.17: Testna datoteka »spider_web.bmp«

(velikost datoteke: 34,7 MB, velikost slike: 4256 x 2848 pikslov,

barvni model: RGB, barvna globina: 24 bpp).

Slika 6.18: Vrednost PSNR v odvisnosti od stopnje stiskanja.

20

30

40

50

60

70

80

0 20 40 60 80 100 120 140

PSN

R [

dB

]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 48

Slika 6.19: Čas stiskanja v odvisnosti od stopnje stiskanja.

Slika 6.20: Čas razširjanja v odvisnosti od stopnje stiskanja.

0

1

2

3

4

5

6

7

8

0 20 40 60 80 100 120 140

Čas

sti

skan

ja [

s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

0

1

2

3

4

5

6

7

0 20 40 60 80 100 120 140

Čas

raz

širj

anja

[s]

Stopnja stiskanja [x:1]

JPEG JPEG 2000 PGF

Peter Rinc, Diplomsko delo 49

7. SKLEP

Namen našega diplomskega dela je bil poiskati slikovni datotečni format, ki bi bil vsaj

tako učinkovit kot JPEG, ki bi bil dovolj hiter, da bi lahko povsem nadomestil široko

razširjen standard JPEG, ki bi podpiral dodatne funkcionalnosti, kot so hierarhično

kodiranje, kodiranje območij zanimanja, stopnjujoče dekodiranje, podpora polni in delni

prosojnosti in ki bi omogočal stiskanje rastrskih slik z izgubami in brez izgub znotraj iste

arhitekture.

Našli smo format PGF, ga temeljito preizkusili in ugotovili, da izpolnjuje vse naše

zahteve. V vseh testih se je zelo dobro izkazal, saj v učinkovitosti stiskanja v povprečju

prekaša JPEG za 3 %. Za vse, kar s formatom PGF pridobimo, plačamo zelo nizko ceno, ki

se kaţe le v času izvajanja pri zelo nizkih stopnjah stiskanja. Kakor hitro povečamo

stopnjo stiskanja, je čas stiskanja oz. razširjanja pribliţno enak tistemu pri JPEG.

Kljub dobrim lastnostim, ki smo jih spoznali tekom tega diplomskega dela, je format

PGF skoraj neznan. Aplikacije, ki bi podpirale ta slikovni datotečni format, so prava

redkost, celo najnovejša različica profesionalnega programa Adobe Photoshop CS4 v

osnovi ne vsebuje podpore za format PGF, obstaja pa moţnost kasnejše namestitve

vtičnika za ta format.

Razlogov za to je morda več, kot prvi in verjetno najpomembnejši vzrok je ta, da je bil

format PGF razvit na inštitutu ETH Zurich v Švici pod okriljem dr. Christopha Stamma in

ne v okviru kakšnega velikega podjetja, ki ima izkušnje v marketingu in katerega glavna

skrb je čim večji dobiček.

Na tem mestu se nam porodi vprašanje, ali je pošteno, da se takšne dobre ideje izgubijo

in nikoli ne dobijo zasluţenega mesta v tehnološkem svetu. Morda smo vsaj kanček

dobrega naredili za prepoznavnost formata PGF s tem diplomskm delom.

Peter Rinc, Diplomsko delo 50

8. LITERATURA

[1] D. Salomon, Data Compression, The Complete Reference, 3. izdaja, Springer-Verlag

New York, Inc., New York, 2004.

[2] Image compression, Wikipedia, http://en.wikipedia.org/wiki/Image_compression

[3] T. Acharya, P. Tsai, JPEG2000 Standard for Image Compression: Concepts,

Algorithms and VLSI Architectures, John Wiley & Sons, Inc., Hoboken, New Jersey,

2005.

[4] M. Jančić, Norme za kompresiju mirnih slika, http://www.vcl.fer.hr/dtv/jpeg/mj2.htm

[5] C. Stamm, PGF A new progressive file format for lossy and lossless image

compression, ETH Zurich, Institute of Theoretical Computer Science, ETH Zentrum,

Zurich, Switzerland, http://www.libpgf.org/uploads/media/PGF_stamm_wscg02.pdf

[6] PGF facts sheet, xeraina GmbH, Zurich, Switzerland,

http://www.xeraina.ch/download/pgf_facts.pdf

[7] Progressive Graphics File, Wikipedia,

http://en.wikipedia.org/wiki/Progressive_Graphics_File