Qayamat ki nishani hadith ki zubani [islamictubee.blogspot.com]
UPORABA FORMATA PGF ZA STISKANJE RASTRSKIH SLIK · Kodiranje entropije (angl. entropy coding) –...
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
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×
𝑁
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