SROVNÁNÍ IMPLEMENTACÍ DISKRÉTNÍ WAVELETOVÉ TRANSFORMACE V JAVĚ A C/C++

Podobné dokumenty
Příloha 1. Náleţitosti a uspořádání textové části VŠKP

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY NÁVRH STRATEGIE ROZVOJE MALÉ RODINNÉ FIRMY THE DEVELOPMENT OF SMALL FAMILY OWNED COMPANY

Bakalářská práce bakalářský studijní obor Teleinformatika

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Metodický pokyn č. 1/09 pro odevzdávání, ukládání a zpřístupňování vysokoškolských závěrečných prací

DIPLOMOVÁ PRÁCE (MMSE) Pokyny pro vypracování

NÁVRH ŘEŠENÍ FLUKTUACE ZAMĚSTNANCŮ VE SPOLEČNOSTI

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

SMĚRNICE REKTORA Č. 9/2007

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Vektorový prostor. Př.1. R 2 ; R 3 ; R n Dvě operace v R n : u + v = (u 1 + v 1,...u n + v n ), V (E 3 )...množina vektorů v E 3,

KTE/TEVS - Rychlá Fourierova transformace. Pavel Karban. Katedra teoretické elektrotechniky Fakulta elektrotechnická Západočeská univerzita v Plzni

1 Mnohočleny a algebraické rovnice

II. Úlohy na vložené cykly a podprogramy

základní vlastnosti, používané struktury návrhové prostředky MATLAB problém kvantování koeficientů

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Interpolace, ortogonální polynomy, Gaussova kvadratura

AUTOMATIZACE CHYB OBJEDNÁVKOVÉHO SYSTÉMU AUTOMATION OF ORDERING SYSTEM ERRORS

PSK1-9. Číslicové zpracování signálů. Číslicový signál

FOURIEROVA ANAL YZA 2D TER ENN ICH DAT Karel Segeth

MĚŘENÍ A ANALÝZA ELEKTROAKUSTICKÝCH SOUSTAV NA MODELECH. Petr Kopecký ČVUT, Fakulta elektrotechnická, Katedra Radioelektroniky

Integrální transformace obrazu

Číslicová filtrace. FIR filtry IIR filtry. ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

Číslicové filtry. Honza Černocký, ÚPGM

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

SIGNÁLY A SOUSTAVY, SIGNÁLY A SYSTÉMY

IB112 Základy matematiky

SIGNÁLY A LINEÁRNÍ SYSTÉMY

Lineární a adaptivní zpracování dat. 3. SYSTÉMY a jejich popis ve frekvenční oblasti

Transformace obrazu Josef Pelikán KSVI MFF UK Praha

0.1 Úvod do lineární algebry

UNIVERZITA PARDUBICE Směrnice č. 13/2007 ve znění dodatku č. 1 Pravidla pro zveřejňování závěrečných prací a jejich základní jednotnou formální úpravu

Programování v C++ 3, 3. cvičení

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ FAKULTA STROJNÍHO INŽENÝRSTVÍ

8 Třídy, objekty, metody, předávání argumentů metod

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Aplikovaná numerická matematika - ANM

Lineární a adaptivní zpracování dat. 2. SYSTÉMY a jejich popis v časové doméně a frekvenční doméně

0.1 Úvod do lineární algebry

SIGNÁLY A LINEÁRNÍ SYSTÉMY

Úlohy nejmenších čtverců

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

ALGEBRA. Téma 4: Grupy, okruhy a pole

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

1 Mnohočleny a algebraické rovnice

OBSAHOVÁ STRÁNKA DP, BP

X37SGS Signály a systémy

APLIKACE DWT PRO POTLAČENÍ ŠUMU V OBRAZE

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Semestrální projekt. Vyhodnocení přesnosti sebelokalizace VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ. Fakulta elektrotechniky a komunikačních technologií

Funkce komplexní proměnné a integrální transformace

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

Teorie měření a regulace

13 Barvy a úpravy rastrového

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Téma 2: Pravděpodobnostní vyjádření náhodných veličin

Základy matematické analýzy

maticeteorie 1. Matice A je typu 2 4, matice B je typu 4 3. Jakých rozměrů musí být matice X, aby se dala provést

Programování v C++ 2, 4. cvičení

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

příkladů do cvičení. V textu se objeví i pár detailů, které jsem nestihl (na které jsem zapomněl) a(b u) = (ab) u, u + ( u) = 0 = ( u) + u.

Algoritmizace prostorových úloh

Vyhodnocení 2D rychlostního pole metodou PIV programem Matlab (zpracoval Jan Kolínský, dle programu ing. Jana Novotného)

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

Návod k programu TRANSTOS v1.0

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

I. D i s k r é t n í r o z d ě l e n í

Waveletová transformace a její použití při zpracování signálů

ALGEBRA. Téma 5: Vektorové prostory

Základy maticového počtu Matice, determinant, definitnost

Výuka odborného předmětu z elektrotechniky na SPŠ Strojní a Elektrotechnické

Mikroprocesorová technika (BMPT)

2 Datové typy v jazyce C

Lineární a adaptivní zpracování dat. 2. SYSTÉMY a jejich popis v časové doméně a frekvenční doméně

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

p(x) = P (X = x), x R,

ZÁKLADNÍ METODY REFLEKTOMETRIE

Báze a dimenze vektorových prostorů

Programy na PODMÍNĚNÝ příkaz IF a CASE

Numerické metody a programování

Pravidla a metodické pokyny pro zpracování a odevzdání bakalářské/diplomové práce

FORTANNS. 22. února 2010

Učební texty k státní bakalářské zkoušce Matematika Skalární součin. študenti MFF 15. augusta 2008

Funkce a lineární funkce pro studijní obory

Metoda konečných prvků Charakteristika metody (výuková prezentace pro 1. ročník navazujícího studijního oboru Geotechnika)

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Čísla a číselné soustavy.

transformace je posunutí plus lineární transformace má svou matici vzhledem k homogenním souřadnicím [1]

NOVÉ METODY HODNOCENÍ OBRAZOVÉ KVALITY

Circular Harmonics. Tomáš Zámečník

Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Jarkovský, L. Dušek, M. Cvanová. 5. Statistica

Transkript:

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV TELEKOMUNIKACÍ FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS SROVNÁNÍ IMPLEMENTACÍ DISKRÉTNÍ WAVELETOVÉ TRANSFORMACE V JAVĚ A C/C++ COMPARISON OF DISCRETE WAVELET TRANSFORM IMPLEMENTATIONS IN C AND JAVA DIPLOMOVÁ PRÁCE MASTER'S THESIS AUTOR PRÁCE AUTHOR VEDOUCÍ PRÁCE SUPERVISOR Bc. KAMIL TALAVAŠEK Ing. JAN MALÝ BRNO 2008

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta elektrotechniky a komunikačních technologií Ústav telekomunikací Diplomová práce magisterský navazující studijní obor Telekomunikační a informační technika Student: Talavašek Kamil Bc. ID: 88866 Ročník: 2 Akademický rok: 2007/2008 NÁZEV TÉMATU: Srovnání implementací diskrétní waveletové transformace v Javě a C/C++ POKYNY PRO VYPRACOVÁNÍ: Implementujte algoritmy pro výpočet dvourozměrné vlnkové transformace pro banku filtrů CDF 9/7 ve formě klasické konvoluce a fast lifting schématu. Využijte jazyka Java a C/C++, proveďte srovnání efektivity na konkrétních příkladech. DOPORUČENÁ LITERATURA: [1] Jansen A., Cour-Harbo A.: Ripples in Mathematics: The Discrete Wavelet Transform, Springer, 2001. ISBN 3-540-41662-5. [2] Herout P.: JAVA - bohatství knihoven. Kopp České Budějovice, 2003. 242 s. ISBN 80-7232-209-5. [3] Václav K.: Učíme se programovat v Borland C++ Builder a jazyce C++, Computer Press, 2002, ISBN: 80-7226-550-4. Termín zadání: 11.2.2008 Termín odevzdání: 28.5.2008 Vedoucí práce: Ing. Jan Malý prof. Ing. Kamil Vrba, CSc. předseda oborové rady UPOZORNĚNÍ: Autor diplomové práce nesmí při vytváření diplomové práce porušit autorská práve třetích osob, zejména nesmí zasahovat nedovoleným způsobem do cizích autorských práv osobnostních a musí si být plně vědom následků porušení ustanovení 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávních důsledků vyplývajících z ustanovení 152 trestního zákona č. 140/1961 Sb.

LICENČNÍ SMLOUVA POSKYTOVANÁ K VÝKONU PRÁVA UŽÍT ŠKOLNÍ DÍLO uzavřená mezi smluvními stranami: 1. Pan/paní Jméno a příjmení: Bc. Kamil Talavašek Bytem: Narozen/a (datum a místo): 29.6.1984, Jihlava (dále jen "autor") a 2. Vysoké učení technické v Brně Fakulta elektrotechniky a komunikačních technologií se sídlem Údolní 244/53, 60200 Brno 2 jejímž jménem jedná na základě písemného pověření děkanem fakulty: prof. Ing. Kamil Vrba, CSc. (dále jen "nabyvatel") Článek 1 Specifikace školního díla 1. Předmětem této smlouvy je vysokoškolská kvalifikační práce (VŠKP): disertační práce diplomová práce bakalářská práce jiná práce, jejíž druh je specifikován jako... (dále jen VŠKP nebo dílo) Název VŠKP: Srovnání implementací diskrétní waveletové transformace v Javě a C/C++ Vedoucí/školitel VŠKP: Ing. Jan Malý Ústav: Ústav telekomunikací Datum obhajoby VŠKP:... VŠKP odevzdal autor nabyvateli v: tištěné formě - počet exemplářů 1 elektronické formě - počet exemplářů 1 2. Autor prohlašuje, že vytvořil samostatnou vlastní tvůrčí činností dílo shora popsané a specifikované. Autor dále prohlašuje, že při zpracovávání díla se sám nedostal do rozporu s autorským zákonem a předpisy souvisejícími a že je dílo dílem původním. 3. Dílo je chráněno jako dílo dle autorského zákona v platném znění.

4. Autor potvrzuje, že listinná a elektronická verze díla je identická. Článek 2 Udělení licenčního oprávnění 1. Autor touto smlouvou poskytuje nabyvateli oprávnění (licenci) k výkonu práva uvedené dílo nevýdělečně užít, archivovat a zpřístupnit ke studijním, výukovým a výzkumným účelům včetně pořizovaní výpisů, opisů a rozmnoženin. 2. Licence je poskytována celosvětově, pro celou dobu trvání autorských a majetkových práv k dílu. 3. Autor souhlasí se zveřejněním díla v databázi přístupné v mezinárodní síti ihned po uzavření této smlouvy 1 rok po uzavření této smlouvy 3 roky po uzavření této smlouvy 5 let po uzavření této smlouvy 10 let po uzavření této smlouvy (z důvodu utajení v něm obsažených informací) 4. Nevýdělečné zveřejňování díla nabyvatelem v souladu s ustanovením 47b zákona č. 111/1998 Sb., v platném znění, nevyžaduje licenci a nabyvatel je k němu povinen a oprávněn ze zákona. Článek 3 Závěrečná ustanovení 1. Smlouva je sepsána ve třech vyhotoveních s platností originálu, přičemž po jednom vyhotovení obdrží autor a nabyvatel, další vyhotovení je vloženo do VŠKP. 2. Vztahy mezi smluvními stranami vzniklé a neupravené touto smlouvou se řídí autorským zákonem, občanským zákoníkem, vysokoškolským zákonem, zákonem o archivnictví, v platném znění a popř. dalšími právními předpisy. 3. Licenční smlouva byla uzavřena na základě svobodné a pravé vůle smluvních stran, s plným porozuměním jejímu textu i důsledkům, nikoliv v tísni a za nápadně nevýhodných podmínek. 4. Licenční smlouva nabývá platnosti a účinnosti dnem jejího podpisu oběma smluvními stranami. V Brně dne:......... Nabyvatel Autor

ANOTACE Tato diplomová práce se zabývá diskrétní vlnkovou transformací dvourozměrného diskrétního signálu s použitím vlnky CDF9/7. Obsahuje teoretické principy diskrétní vlnkové transformace, popis konvolučního a Lifting principu výpočtu, vlastnosti vlnky CDF9/7, možnosti zpracování dvourozměrného vstupního signálu a s tím spojené řešení okrajových stavů. V rámci diplomové práce byly implementovány oba principy (konvoluce, Lifting) výpočtu dvourozměrné diskrétní vlnkové transformace s využitím vlnky CDF9/7 a to v programovacím jazyce C++ a Java. Vznikly tak čtyři aplikace, které byly nejprve podrobně popsány a poté vzájemně porovnány zejména z hlediska rychlosti výpočtu diskrétní vlnkové transformace. Závěrem byla provedena analýza získaných výsledků a zhodnocení celé práce. Klíčová slova: Diskrétní vlnková transformace, dvourozměrný diskrétní signál, vlnka CDF9/7, konvoluce, lifting, C++, Java, porovnání, výpočetní náročnost

ABSTRACT This thesis deals with discrete wavelet transform of a two dimensional discrete signal using the CDF9/7 wavelet. It contains theoretical principles of discrete wavelet transformation, a description of the convolution and Lifting calculation principle, characteristics of the CDF9/7 wavelet, the possibilities of processing a two dimensional input signal and boundary handling. Both principles (convolution, Lifting) of the calculation of two dimensional discrete wavelet transformation have been implemented within the thesis using the CDF9/7 wavelet in the C++ and Java programming languages. Four applications have been created that way which have been described in detail and then compared with one another especially in light of the calculation speed of discrete wavelet transformation. Finally an analysis of the acquired results and an evaluation of the whole thesis has been performed. Keywords: Discrete Wavelet Transform, two-dimensional discrete signal, wavelet CDF9/7, Convolution, Lifting, C++, Java, Comparation, calculation speed 2

PROHLÁŠENÍ Prohlašuji, že svou diplomovou práci na téma "Srovnání implementací diskrétní waveletové transformace v Javě a C/C++" jsem vypracoval samostatně pod vedením vedoucího diplomové práce a s použitím odborné literatury a dalších informačních zdrojů, které jsou všechny citovány v práci a uvedeny v seznamu literatury na konci práce. Jako autor uvedené diplomové práce dále prohlašuji, že v souvislosti s vytvořením této diplomové práce jsem neporušil autorská práva třetích osob, zejména jsem nezasáhl nedovoleným způsobem do cizích autorských práv osobnostních a jsem si plně vědom následků porušení ustanovení 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávních důsledků vyplývajících z ustanovení 152 trestního zákona č. 140/1961 Sb. V Brně dne 27.5.2008.... (Podpis autora) 3

PODĚKOVÁNÍ Děkuji vedoucímu diplomové práce Ing. Janu Malému za velmi užitečnou metodickou pomoc a cenné rady při zpracování diplomové práce. V Brně dne 27.5.2008.. (podpis autora) 4

OBSAH 1 ÚVOD... 9 2 TEORETICKÝ ÚVOD... 10 2.1 Vlnky... 10 2.1.2 MR-analýza... 11 2.2 Diskrétní vlnková transformace v diskrétním čase... 12 2.2.2 Dekompozice signálu... 13 2.2.3 Rekonstrukce signálu... 14 2.3 Lifting princip... 15 2.3.1 Laurentovy polynomy... 15 2.3.2 Polyfázové filtry... 15 2.3.3 Převod vlnky na koeficienty liftingu... 17 2.4 Banka filtrů CDF 9/7... 18 3 VÝPOČET 2D DISKRÉTNÍ VLNKOVÉ TRANSFORMACE... 21 3.1 Separabilní transformace 2D DWT... 21 3.2 Okrajové stavy... 22 3.2.1 Ořezání... 22 3.2.2 Periodizace... 22 3.2.3 Prodloužení... 23 4 IMPLEMENTACE DWT V MATLBU... 24 4.1 Konvoluční princip... 24 4.1.2 Dekompoziční část... 25 4.1.3 Funkce c=sym_conv(x,h,smer)... 25 4.1.4 Rekonstrukční část... 25 4.2 Lifting princip... 25 4.2.1 Dekompoziční část... 26 4.2.2 Rekonstrukční část... 27 5 IMPLEMENTACE DWT V C++... 28 5.1 Všeobecná specifikace implementace DWT... 28 5.1.1 Specifikace implementace DWT... 28 5.1.2 Vstupní parametry a jejich formát... 28 5.1.3 Výstupy implementace... 29 5.1.4 Použitý datový typ... 29 5.2 Konvoluční princip... 30 5.2.1 Obecný popis algoritmu... 30 5.2.2 Deklarační část... 30 5.2.3 Třída imp_ch... 30 5.2.4 Třída mat_koef... 30 5.2.5 Třída mat_koef_rek... 34 5

5.2.6 Funkce main... 36 5.3 Lifting princip... 39 5.3.1 Obecný popis algoritmu... 39 5.3.2 Deklarační část... 39 5.3.3 Třída mat_koef... 40 5.3.4 Třída mat_koef_rek... 41 5.3.5 Funkce main... 41 6 IMPLEMENTACE DWT V JAVĚ... 43 6.1 Programovací jazyk Java... 43 6.1.1 Původ jazyka... 43 6.1.2 Základní vlastnosti jazyka Java... 43 6.1.3 Výhody a nevýhody programovacího jazyka Java... 44 6.2 Implementace DWT v Javě... 44 7 SROVNÁNÍ IMPLEMENTACÍ DWT V PROGRAMOVACÍCH JAZYCÍCH C++ A JAVA... 45 7.1 Výpočetní náročnost DWT... 45 7.1.1 Asymptotická složitost DWT... 45 7.1.2 Časová složitost výpočtu DWT pomocí konvolučního principu... 46 7.1.3 Časová složitost výpočtu DWT pomocí lifting principu... 47 7.1.4 Porovnání časové složitosti konvolučního a lifting principu výpočtu DWT... 47 Skutečná... 47 7.1.5 časová složitost konvolučního principu výpočtu DWT... 47 7.1.6 Skutečná časová složitost lifting principu výpočtu DWT... 49 7.1.7 Porovnání skutečné časové složitosti konvolučního a lifting principu výpočtu DWT... 50 7.1.8 Porovnání skutečné časové složitosti výpočtu DWT v C++ a Javě... 51 7.2 Prostorová složitost výpočtu DWT... 52 7.2.1 Asymptotická prostorová složitost výpočtu DWT... 52 7.2.2 Skutečná a minimální prostorová složitost výpočtu DWT... 53 7.3 Srovnání obrazu... 54 7.3.1 Ukazatel PSNR... 54 7.3.2 Hodnoty PSNR implementace DWT... 55 8 ZÁVĚR... 57 LITERATURA... 59 6

SEZNAM OBRÁZKŮ Obr. 2.1. DWT a IDWT pomocí kvadraturní banky zrcadlových filtrů... 13 Obr. 2.2. DWT a IDWT vyjádřena pomocí polyfázových flitrů... 16 Obr. 3.1. Schéma separabilní 2D DWT... 21 Obr. 3.2. Reprezentace výsledků 2D DWT... 22 Obr. 5.1. Třída mat_koef... 31 Obr. 5.2. Třída mat_koef_rek... 35 Obr. 5.3. Třída mat_koef... 40 Obr. 7.1. Časová složitost výpočtu DWT... 46 Obr. 7.2. Časová složitost výpočtu DWT konvoluční princip... 49 Obr. 7.3. Časová složitost výpočtu DWT lifting princip... 50 Obr. 7.4. Prostorová složitost výpočtu DWT... 52 SEZNAM TABULEK Tab. 4.1. Tabulka koeficientů impulsních charakteristik filtrů CDF 9/7... 24 Tab. 4.2. Tabulka lifting koeficientů a normalizace... 26 Tab. 7.1. Časová složitost výpočtu DWT s využitím konvolučního principu... 48 Tab. 7.2. Časová složitost výpočtu DWT s využitím lifting principu... 49 Tab. 7.3. Porovnání konvolučního a lifting principu výpočtu DWT... 50 Tab. 7.4. Porovnání časové složitosti výpočtu DWT v C++ a Javě... 51 Tab. 7.5. Skutečná prostorová složitost výpočtu DWT... 53 Tab. 7.6. Hodnoty PSNR... 55 7

SEZNAM POUŽITÝCH ZKRATEK 2D-DWT (DWT2) dvourozměrná DWT B 1 Bajt (8 bitů) CDF 9/7 biortogonální vlnka Cohen-Daubechies-Feauveau C/C++ - programovací jazyk DP filtr typu dolní propust DWT diskrétní vlnková transformace FIR konečná impulzní odezva HotSpot Optimalizace zdrojového kódu v JVM HP filtr typu horní propust IDWT inversní (zpětná) diskrétní vlnková transformace IIR nekone_ná impulzní odezva Java programovací jazyk JIT - Just In Time, metoda překladu aplikací JPEG2000 - Joint Photographic Experts Group, obrazový formát založený na DWT JVM Java Virtual Machine, virtuální stroj Javy, interpreter MATLAB - programové prostředí a skriptovací programovací jazyk pro vědeckotechnické numerické výpočty MR MultiResolution, vícerozměrná MSE Mean Squared Error, střední kvadratická chyba OOP Objektově orientované programování px pixel, jednotka obrazové informace PSNR Peak Signal to Noise Ratio, špičkový odstup signál/šum QMF - Quadrature Mirror Filter, kvadraturní zrcadlový filtr SIMD Single Instruction Multiple Data, architektura paralelních systémů 8

1 ÚVOD Tato práce se zabývá diskrétní vlnkovou transformací. Jedná se o stále poměrně novou metodu transformace signálu, která má širokou škálu praktického použití. Od analýz signálu, přes odstranění šumů, až po kompresi dat, zejména dat obrazových. V úvodní části práce je vysvětlen matematický princip vlnkové transformace, definice mateřské vlnky a podmínky pro její vlastnosti. Dále pak postup, jak pomocí koeficientů translace a dilatace, získat z mateřské vlnky vlnky upravené a vztah těchto vlnek k diskrétní vlnkové transformaci. Další kapitola se zabývá výhradně diskrétní dyadickou vlnkovou transformaci. Její definicí a zejména možností převedení transformace na filtraci bankou kvadraturních zrcadlových filtrů a tím výrazně zjednodušit její použití. Dále je popsán princip liftingu, který ještě více zrychluje výpočet diskrétní vlnkové transformace. Z důvodu velkého rozšíření obrazových signálů, je zbývající část této práce věnována transformaci dvourozměrného diskrétního signálu pomocí banky filtrů CDF9/7, a to pomocí konvolučního i lifting principu. Jako součást této diplomové práce byly vytvořeny implementace diskrétní vlnkové transformace pro zpracování vstupního dvourozměrného signálu s použitím konvolučního a lifting principu výpočtu v programovacích jazycích Java a C++. Tyto implementace byly podrobně popsány a vzájemně porovnány z hledisky časové, prostorové složitosti výpočtu a kvality obrazu po provedené dekompozici obrazového signálu a jeho zpětné rekonstrukci. Zjištěné výsledky jsou přehledně shrnuty v závěru. 9

2 TEORETICKÝ ÚVOD Vlnková transformace je v dnešním době velmi využívaná metoda analýzy signálů. Umožňuje zpracování spojitých i diskrétních signálů a to jak jednorozměrných tak i vícerozměrných. Používá se k frekvenčně časové analýze, rekonstrukci zarušených či neúplných signálů a v neposlední řadě ke kompresi dat především obrazových signálů. 2.1 Vlnky Matematické vyjádření vlnek vychází z principu popsaných S. Mallatem [2]. Úvodní část byla převzata z disertační práce Mgr. Pavla Rajmice Ph.D [1]. Základem vlnkové transformace jsou, jak již samotný název napovídá, vlnky. Vlnka je funkce ψ L 2 ( R) patřící do prostoru L 2 ( R) všech komplexních funkcí, který je definován jako množina L 2 = 2 ( R) f : R C f ( x) dx <, (2.1) kde integrál je uvažován v Lebesgueově smyslu a R,C značí množinu reálných resp. komplexních čísel. Tyto funkce představují signály s konečnou energií. Normu, nebo-li vnitřní součin v L 2 ( R) definujeme f 2 ( x) dx, resp. f, g = f ( x) g( x dx = f ) kde g(x) značí funkci komplexně sdruženou k funkcí g (x) Aby byla funkce ψ vlnkou, musí splňovat podmínku přípustnosti (2.2) 0 < ψˆ ( ω) ω 2 < (2.3) kde ψˆ značí integrální Fourierovu transformaci funkce ψ. Podmínka přípustnosti je postačující podmínkou pro existenci inverzní integrální vlnkové transformace. Zároveň platí podmínka nulové střední hodnoty 10

ψ ( x) dx = 0 (2.4) Z této podmínky vyplívá, že vlnka musí mít oscilatorický charakter a jejich kmity musí být tlumeny směrem k ±. Vlnková transformace spojitého signálu f ( x) je definována vztahem W x b a ( f ; a, b) = f ( x) ψ dx, (2.5) kde a, b R a každá funkce f závisí na těchto dvou spojitých proměnných, avšak pro jednoznačnou existenci inverzní transformace, stačí brát v úvahu pouze některé x b z funkcí ψ. Definujeme tedy jen spočetné množství funkcí ψ j, k a ψ j j ( t) = 2 ( 2 t k ) 2 j, k ψ (2.6) Vlnku ( t) ψ označujeme jako vlnku mateřskou a koeficienty j, k Z, kde Z je množina celých čísel, jako koeficienty dilatace a translace. Energie vlnky odpovídá 2 kvadrátu plochy uzavřené pod vlnkovou funkcí, proto je nutné parametrem 2 j kompenzovat velikost vůči časové délce, aby plocha zůstala totožná a transformace neměnila energii signálu. Byly nalezeny funkce ψ takové, že { j, k } j k Z 2 libovolnou funkci f ( t) L ( R) f ( t) = f ( t) j, k Z, j, k ψ j, k ψ je ortonormální bází L 2 ( R) lze vyjádřit součtem vlnkové řady,. Pak ψ (2.7) kde c j k f j, k, =,ψ je j,k-tý vlnkový koeficient 2.1.2 MR-analýza Použití vlnek s malou hodnotou dilatace j vede k analýze trendu signálu a naopak blíží-li se hodnota tzv. měřítková funkce φ L 2 ( R) lze rozložit L 2 ( R) j dochází k analýze detailů v signálu. Pokud existuje 11

( R) V W W L, 2 L = (2.8) j j j+ 1 kde značí ortogonální součet prostorů a = ω k= ( t) ω( t) = s ψ ( t) W j j, k j, k, s j, k C (2.9) j = 1 V j x j kψ j i= k = ( t) x( t) = s ( t),, k, s j, k C (2.10) Prostory V W W K jsou navzájem ortogonální. Dvě funkce f, g jsou j, j, j+ 1, ortogonální pokud je jejich norma nulová f, g = 0. funkcí f 2 Každou funkci f L ( R) ( x) = a ( x ) + b ( x) l Z lze rozložit jako součet navzájem ortogonálních φ (2.11) 0l 1 j, kψ j, k k, j Z, j 0 kde a 0 l, b C jsou souřadnice funkce f v bázích prostorů V, W, 1 K j, k 0 0, W 2.2 Diskrétní vlnková transformace v diskrétním čase Z výše uvedeného vztahu (2.6) vyplívá, že můžeme změnou koeficientů j a k vytvořit nekonečné množství vlnek z vlnky mateřské a teoreticky tedy i nekonečné množství výstupních dat. Při práci s diskrétním signálem se proto využívají vlnky jejichž koeficienty dilatace a translace jsou mocninou dvojky. Takové vlnky označujeme jako vlnky dyadické a diskrétní vlnková transformace (DWT) rozkládá vstupní diskrétní signál právě do dyadických vlnek. Diskrétní vlnkovou transformaci lze vyjádřit pomocí ortogonální matice W řádu n n. Pokud je vstupní diskrétní signál [ n] pak jeho vlnkovou transformací je vektor ( ) T x uvažován jako vektor x = ( x x x ) T y = Zpětná diskrétní vlnková transformace y y y 1, 2,..., n definovaný rovnicí 1, 2,..., n y = Wx (2.12) 12

1 T x = W y = W y (2.13) Při výpočtu diskrétní vlnkové transformace je s výhodou využíto poznatků S. Mallata [2], kdy je násobení vstupního vektoru x s ortogonální maticí W převedeno na filtraci. Filtrace se provádí pomocí kvadraturní zrcadlové banky filtrů, skládající se ze dvou zrcadlových filtrů typu dolní propust (DP) dolní propust (DP) a HP HP. Tato banka filtrů je zobrazena na obrázku Obr. 2.1. Obr. 2.1. DWT a IDWT pomocí kvadraturní banky zrcadlových filtrů 2.2.2 Dekompozice signálu Zrcadlové filtry jsou filtry, které mají zrcadlově převrácené modulové charakteristiky. Důležité je, aby příslušné zrcadlové filtry měli takové impulsní charakteristiky, aby byla splněna podmínka perfektní rekonstrukce. Signál x[n] vstupuje dvojice filtrů DP D a HP D v dekompoziční části, jsou tedy označeny indexem D. Na výstupu DP D se objeví filtrovaný signál, který má ovšem stejnou délku jako signál vstupní, a proto je provedeno podvzorkování (decimace) dvěma. Tímto procesem jsme získali aproximační koeficienty transformovaného signálu. Obdobně po průchodu vstupního signálu filtrem HP D a podvzorkováním výsledku dvěma, získáváme detailní koeficienty transformovaného signálu. Samotná filtrace je definována jako konvoluce vstupního signálu a koeficientů impulsní charakteristiky příslušného filtru. Při zahrnutí podvzorkování dvěma dostáváme rovnici pro dekompozici vstupních vzorků y [ n] = h[ n]* x[ n] (2.14) 13

a[ n] = h0 [ n]* x[2n] = h0 m= y [ m] x[2n m] d [ n] = g0 [ n]* x[2n] = g0 m= y [ m] x[2n m] (2.15) (2.16) kde y a [ n], y d [ n] jsou aproximační resp. detailní koeficienty a h 0 [ n], [ n] koeficienty impulsní charakteristiky filtru DP D resp. HP D. g 0 jsou Výše popsaný postup představuje jednu úroveň dekompozice diskrétní vlnkové transformace. Další úroveň dekompozice je získána opakováním stejného postupu s aproximačními koeficienty jako vstupním signálem a zachováním koeficientů detailních. Pokud je délka vstupního signálu 2 j, může být dekompozice provedena až do j-té úrovně. Toto je dyadický princip, tj. každá úroveň dekompozice je vzhledem k předchozí poloviční, resp. čtvrtinová v případě 2D-DWT. 2.2.3 Rekonstrukce signálu Rekonstrukce signálu probíhá obdobně jako jeho dekompozice. Aproximační a detailní koeficienty jsou nadvzorkovány dvěma a výsledný signál je filtrován pomocí dvojice rekonstrukčních filtrů DP R a HP R. Nadvzorkování se provádí vložením nulových hodnot mezi vzorky původního signálu, z důvodu zamezení výskytu nežádoucích složek ve výsledném nadvzorkovaném signálu následuje číslicový filtr typu DP, nebo se mezi vzorky nevkládají vzorky s nulovou hodnotou, ale s hodnotou aproximovanou např. z předcházejícího vzorku. Rekonstrukci lze tedy vyjádřit vztahem x [ n] = h + = 1 [ n]* ya[ n] g1[ n]* yd [ n] h1[ m] ya[ n m] + g1 m= m= [ m] y [ n m] d (2.17) kde y a [ n] a [ n] dvěma a h 1 [ n], [ n] y d jsou koeficienty aproximační a detailní nadvzorkované g 1 jsou koeficienty impulsní charakteristiky filtru DP R resp. HP R. Přirozeně může být i rekonstrukce prováděna ve více úrovních, musí se však použít aproximačních a detailních koeficientů vytvořených po provedení dekompozice stejné úrovně. 14

2.3 Lifting princip Při použití lifting metody k výpočtu DWT dochází k rozložení kvadraturní zrcadlové banky filtrů (QMF) na vetší množství odlišných filtrů uspořádaných v tzv. prediction a update krocích. Celý proces výpočtu DWT se výrazně zrychlí a to zejména při použití dlouhých vlnek. 2.3.1 Laurentovy polynomy Filtry s konečnou impulsní odezvou FIR, které jsou většinou použity k vytvoření banky QMF, mají tedy konečné množství hodnot v impulsní charakteristice a obrazem její Z-transformace je Laurentův polynom q h h z (2.18) k k ( z ) = k = p Laurentův polynom se od normálního polynomu liší tak, že může obsahovat záporné exponenty a jeho řád je dán h = q p (2.19) Součet nebo rozdíl dvou Laurentových polynomů je opět Laurentův polynom a součin polynomu řádu a, b je polynom o řádu a+b. přesné dělení většinou není možné, ale dělení se zbytkem vždy. Tedy pokud existují dva nenulové polynomy a(z) a b(z) řádu a( z) b( z) bude vždy existovat Laurentův polynom q(z) řádu q( z) = a( z) b( z) a polynom r(z) s řádem menším než je řád polynomu b(z) a ( z) = b( z) q( z) + r( z) (2.20) 2.3.2 Polyfázové filtry Rozepíšeme-li konvoluci ve vztahu (2.15), který udává výsledný signál po průchodu vstupního signálu dekompozičním filtrem DP D, aproximační koeficienty lze zapsat pomocí rovnice [ n] = h [ ] x[ 2n] + h [ 1] x[ 2n 1] + h [ 2] x[ 2 2] + L 0 0 0 0 n y a (2.21) Oddělíme-li sudé a liché vzorky dostáváme [ n] = h [ ] x[ 2n] + h [ 2] x[ 2n 2] + L+ h [ 1] x[ 2n 1] + h [ 3] x[ 2n 3]L 0 0 0 0 0 y a (2.22) 15

Označíme-li impulsní odezvy sudých vzorků obdobně, získáváme rovnici y [ n] = h n]* x [ n] + h [ n]* x [ n 1] h 0 s a lichých h 0 l a vzorky samotné a 0s[ s 0l l (2.23) Z rovnice je zřejmé, že se jedná o dva různé filtry, jejichž vstupní signál tvoří posloupnosti sudých a lichých vzorků původního signálu, tyto filtry označujeme jako polyfázové. Aplikujeme-li tento rozklad na všechny filtry v bance QMF. Dostáváme jednostupňovou dekompozici a rekonstrukci DWT vyjádřenou pomocí polyfázových filtrů. Blokové schéma je zobrazeno na obrázku Obr. 2.2. Obr. 2.2. DWT a IDWT vyjádřena pomocí polyfázových flitrů [3] P0(z) Zapíšeme-li dekompoziční a rekonstrukční častí jako polyfázové matice P1(z) a P0 ( z) P1 ( z) H = H G = G 0, s 1, s 0, s 1, s H H G G 0, l 1, l 0, l 1, l (2.24) (2.25) Z podmínky perfektní rekonstrukce dostáváme rovnici, k P0 ( z) P1 ( z) = z I (2.26) 16

která představuje skutečnost, že výsledek součinu polyfázových matic, dekompoziční a rekonstrukční časti, se musí rovnat jednotkové matici I s konstantním zpožděním, představující člen k z. Z této rovnice lze vyvodit podmínky pro jednotlivé filtry v rekonstrukční a dekompoziční části H H 0 ( 1 z k z) = z G ( ) (2.27) 1( 0 z k z) = z G ( ) (2.28) V případě, že H 0 (z)=g 0 (z) a H 1 (z)=g 1 (z) jedná se o ortogonální vlnkovou transformaci, v opačném případě jde o biortogonální vlnkovou transformaci [3]. Z toho vyplívá, že pokud mají rekonstrukční a dekompoziční přenosové charakteristiky odlišný počet prvků, jedná se o biortogonální vlnkovou transformaci např. CDF9/7. 2.3.3 Převod vlnky na koeficienty liftingu Pokud dekompoziční matici P ( ) rozložíme na součin dvou matic podle 0 z 1 0 P ( z) = P 0 ( S( z) 1 0 z ) (2.29) Pak z rovnic H H ( z) H ( z) H ( z) S( z) = (2.30) 1, s 1, s + 0, s ( z) H ( z) H ( z) S( z) = (2.31) 1, l 1, l + 0, l lze určit funkci S(z) tak, aby rovnice (2.30)-(2.31) platili zároveň. Tento postup se nazývá primal lifting neboli update krok. Obdobný způsobem lze zavést funkci T (z), pak mluvíme o dual liftingu nebo prediction kroku. Matice P ( ) je opět rozložena na součin dvou matic dle 0 z 1 T ( z) P ( z) = P 0 ( 0 1 0 z ) (2.32) Funkci T (z) lze opět vyjádřit z rovnic 17

H H ( z) H ( z) H ( z) T ( z) = (2.33) 0, s 0, s + 1, s ( z) H ( z) H ( z) T ( z) = (2.34) 0, l 0, l + 1, l Sloučením obou přístupů k rozkladu matice vznikne metoda výpočtu vlnkové transformace zvaná lifting. Pokud se nepodaří rozložit přenosové funkce do součinu matic primal a dual liftingu, může za sebou následovat takových kroků více, dokud z původní matice nezůstane pouze matice s konstantami na hlavní diagonále. V takové případě se postupně střídají primal a dual lifting. Jedna dvojice primal a dual liftingu se nazývá jeden krok liftingu. Pomocí matic se spojení m kroků liftingu zapíše jako P ( z) = z 0 j K 0 1 0 K 2 m i= 1 1 Si ( z) 0 1 1 0 Ti ( z) 1 (2.35) kde konstanty K 1 a K 2 zajišťují normalizaci hodnot z důvodu zachování energie. 2.4 Banka filtrů CDF 9/7 Rodina vlnek CDF M/N, nebo-li Cohen-Daubechies-Feauveau, je historický první rodinou biortogonálních vlnek. Jejich autorem je Ingrid Daubechies. Banka filtrů CDF 9/7 je požívána při ztrátové kompresi u formátu JPEG2000 a využívá principu liftingu. Číslo 9/7 udává počet koeficientů dekompozičního/rekonstrukčního filtru. Dekompoziční filtr je vyjádřen pomocí rovnic 2 2 1 ( z) = H 4 ( z + z ) + H 2 ( z + z ) H 0 H s + (2.36) 2 1 ( z) = H ( z + z ) + H ( z 1) H l (2.37) 3 1 + Koeficienty zbytků Laurentových polynomů jsou 18

r 0 = H 0 2 H 4 H H 1 3 (2.38) r 1 = H 2 H 4 H 4 H H 1 3 (2.39) s 0 = H 1 H 3 H 3 r r 0 1 (2.40) t 0 r0 2r1 Pak jsou definovány konstanty = (2.41) α = H H 1.586134342 (2.42) 4 / 3 β = H r 0.05298011854 (2.43) 3 / 1 γ = r s 0.8829110762 (2.44) 1 / 0 δ = s t 0.4435068522 (2.45) 0 / 0 ς = t = 1.149604398 (2.46) 0 Po lifting rozkladu dostáváme sérii polyfázvých matic 1 ( 1 z ) 1 α + P = 0 ( z) 0 1 1 β ( 1+ z) 1 ( 1 z ) 0 1 γ + 1 0 1 1 δ 0 ς ( 1+ z) 1 0 1/ ς 0 (2.47) která může být vyjádřena pomocí rovnic vhodných k implementaci 19

(0) s j x2 j = (2.48) d (2.49) (0) j = x2 j+ 1 (0) (0) ( s + s ) d α (2.50) (1) (0) j = d j + j j+ 1 (1) (1) ( d + d ) s β (2.51) (1) (0) j = s j + j j= 1 (1) (1) ( s + s ) d γ (2.52) (2) (1) j = d j + j j+ 1 (2) (2) ( d + s ) s δ (2.53) (2) (1) j = s j + j j 1 s = ς (2.54) (2) j s j Kde s j představuje aproximační koeficienty, d j detailní koeficienty a x j vstupní diskrétní signál. Číslo v závorce v horním indexu koeficientů udává pořadí liftingu kroku. d = /ς (2.55) (2) j d j 20

3 VÝPOČET 2D DISKRÉTNÍ VLNKOVÉ TRANSFORMACE K transformaci dvourozměrného diskrétního signálu, např. digitálních obrazových dat, se využívá dvourozměrné vlnkové transformace s diskrétním časem, označovanou jako 2D-DWT. 3.1 Separabilní transformace 2D DWT Separabilní transformace je založena na principu převodu dvourozměrného signálu na více signálu jednorozměrných, které jsou transformovány pomocí jednorozměrné diskrétní vlnkové transformace. Transformace probíhá následujícím způsobem. Nejprve jsou provedeny transformace jednotlivých řádků a výsledek je podvzorkován dvěma. Vznikají tak dvě matice obsahující aproximační (L) a detailní (H) koeficienty transformovaného signálu po řádcích. Obě matice jsou dále transformovány po sloupcích a výsledek je opět podvzorkován dvěma. Vznikají tak čtyři matice LL1, LH1, HL1, HH1. Číslo označuje úroveň dekompozice. Celý postup je zobrazen na obrázku Obr. 3.1. Obr. 3.1. Schéma separabilní 2D DWT 21

Výsledek je možné reprezentovat pomocí matice sestavené ze čtyř výsledných matic podle následujícího obrázku Obr. 3.2. Obr. 3.2. Reprezentace výsledků 2D DWT Dvourozměrná diskrétní vlnková transformace může být prováděna ve více úrovních. Na základě dyadického principu obsahuje další úroveň dekompozice 4x méně vzorků, než bylo v úrovni předcházející. Vstupním signálem je vždy matice LL předcházející úrovně. Tato matice obsahuje pouze aproximační koeficienty. Celkový výsledek víceúrovňové dekompozice má stejný počet prvků, jako signál původní, avšak úplně jiné rozložení energie. Ta je koncentrována do aproximačních koeficientů, tedy především do podmatice LL v nejvyšší úrovni dekompozice. 3.2 Okrajové stavy Je-li transformován konečný signál, vzniká na jeho koncích (okrajích) problém okrajového stavu. Jak konvoluční tak i lifting princip potřebuje k vypočtení okrajových hodnot vycházet z nedefinovaných hodnot původního signálu. Existuje několik řešení toho problému. 3.2.1 Ořezání Při použití metody ořezávání, jsou nedefinované hodnoty, potřebné k výpočtu, nahrazeny nulou. Výsledný signál je pak ořezán na velikost očekávaného signálu. Tento princip nesplňuje podmínku perfektní rekonstrukce a tak při rekonstrukci signálu vzniká chyba v okolí okrajů. 3.2.2 Periodizace Další možnou metodou ošetření okrajových stavů je periodizace. Při použití této metody nejsou nedefinované hodnoty nahrazeny nulovými hodnotami, jak tomu bylo u metody ořezání, ale jsou nahrazeny periodickým prodloužením signálu. Výsledek je 22

opět ořezán na očekávanou velikost. Metoda splňuje podmínku perfektní rekonstrukce a je poměrně rychlá a jednoduchá. 3.2.3 Prodloužení Poslední metoda řešení okrajových jevů, je metoda prodloužení. Zaklaní princip je obdobný jako u metod periodizace a ořezání. Signál je rozšířen různými hodnotami, výsledek po transformaci není ořezán jako u předcházejících dvou metod, ale ponechán prodloužený. Druhy možného rozšíření jsou následující: - Nulové (zero-padding) signál je doplněn nulovými hodnotami podobně jako u metody ořezání - Symetrické Vkládané hodnoty jsou zrcadlově obrácené hodnoty z okraje signálu - Periodické Vkládané hodnoty jsou hodnoty, obdobně jako u metody periodizace, periodického prodloužení signálu - Hladké Prodloužení je realizováno první nebo druhou derivací několika posledních prvků signálu. 23

4 IMPLEMENTACE DWT V MATLBU K implementaci bylo použito nástroje Matlab umožňující jednoduchou práci s maticemi a snadnou interpretaci výsledků. K implementaci byla zvolena banka filtrů CDF 9/7 a to jak s použitím konvoluce, tak i s použitím lifingu. 4.1 Konvoluční princip Program je realizován pomocí funkce y=dwt_cdf97_konv(x,level), jak je vidět funkce má dva vstupní parametry x a level. X představuje vstupní 2D signál reálných hodnot a level požadovanou úroveň dekompozice nebo rekonstrukce zadanou pomocí celého čísla. Pokud zadané číslo bude kladné pak bude prováděna dekompozice vstupního signálu a pokud záporné tak jeho rekonstrukce. Nejprve definujeme koeficienty impulsních charakteristik filtrů v bance QMF pro CDF 9/7. Použité koeficienty jsou zapsány v tabulce Tab. 4.1. n DP D h 0 [ n] HP D g 0 [ n] DP R h 1 [ n] HP R [ n] -4 0,026748757411 0 0 0,053497514822-3 -0,016864118443 0,045635881557-0,091271763114 0,033728236886-2 -0,078223266529-0,028771763114-0,057543526228-0,156446533058-1 0,266864118443-0,295635881557 0,591271763114-0,533728236886 0 0,602949018236 0,557543526229 1,115087052458 1,205898036472 1 0,266864118443-0,295635881557 0,591271763114-0,533728236886 2-0,078223266529-0,028771763114-0,057543526228-0,156446533058 3-0,016864118443 0,045635881557-0,091271763114 0,033728236886 4 0,026748757411 0 0 0,053497514822 g 1 Tab. 4.1. Tabulka koeficientů impulsních charakteristik filtrů CDF 9/7 Dále je podle zadaného parametru level rozhodnuto zda se bude jednat o dekompozici nebo rekonstrukci. 24

4.1.2 Dekompoziční část Vstupní signál je v této části podroben filtraci pomocí DP D h 0 [ n] a HP D [ n] g 0. Nejprve ve směru sloupců a po podvzorkování dvěma ve směru řádků. Vznikají tak podmatice LL, HL, LH a HH, které jsou uloženy na patřičná místa ve výstupní matici y a pokud je to možné, je celý postup opakován, ale tentokrát je vstupní signál podmatice LL. Filtrace je zajištěna pomocí funkce c=sym_conv(x,h,smer). 4.1.3 Funkce c=sym_conv(x,h,smer) Tato funkce zajišťuje filtraci signálu se zadanou impulsní charakteristikou a směrem v jakém bude prováděna tato filtrace. Vstupními parametry tedy jsou x, h, smer, kde x je vstupní signál, h koeficienty impulsní charakteristiky a smer může nabývat hodnot radek nebo sloupec. V této funkci je také zahrnuta metoda ošetření okrajových stavů a to symetrického prodloužení. Před vlastní konvolucí vstupního signálu jsou jednotlivé řádky resp. sloupce prodlouženy o polovinu hodnot (zaokrouhleno směrem dolů) impulsní charakteristiky na každou stranu řádku resp. sloupce. Hodnoty jsou zrcadlově obrácené vzorky, které zůstanou po podvzorkování. Samotná konvoluce je zajištěna pomocí vnitřní funkce Matlabu conv2(x,h), která realizuje konvoluci dvou matic. V našem případě se jedná o vstupní symetricky prodloužený signál a řádkový resp. sloupcový vektor hodnot impulsní charakteristiky filtrů. Výsledný signál je na závěr ořezán na požadovanou velikost. 4.1.4 Rekonstrukční část Tato část zajišťuje rekonstrukci vstupního signálu. Nejprve dojde k nalezení matic LL i, HL i, LH i a HH i, kde i značí úroveň dekompozice signálu. Nadvzorkováním sloupců a následnou filtrací těchto matic, pomocí funkce sym_conv(x,h,smer) v řádcích, dostáváme transformované matice. Sečtením příslušných dvojic těchto matic, při jejich současném nadvzorkování v řádcích, získáváme dvě matice L i a H i, jejichž součet je matice LL i-1. Tato matice je stejným postupem transformována, až je rekonstruován původní signál. 4.2 Lifting princip Obdobně jako u konvolučního principu je program realizován pomocí funkce y=dwt_cdf97_lift(x,level), opět se vstupními parametry x a level, zajišťující funkci popsanou výše. 25

4.2.1 Dekompoziční část Výpočet je prováděn podle rovnic (2.48)-(2.55) použitím konstant definovaných rovnicemi (2.42)-(2.46). Na počátku programu jsou definovány používané konstanty dle tabulky Tab. 4.2. lift(2,4) 1 2 3 4 scale -1.5861-0.0530 0.8829 0.4435 1.1496-1.5861-0.0530 0.8829 0.4435 Tab. 4.2. Tabulka lifting koeficientů a normalizace (zaokrouhleno na 4 desetinná místa) Při dekompozici je oblast signálu, definována pomocí proměnných s1 a s2, rozdělena na liché a sudé vzorky. Toto rozdělení tvoří lifting kroky definované rovnicemi (2.48)-(2.49) k realizaci dalších kroku je nutné vyjádřit člen: Z rovnice (0) (0) ( s j s ) + j+ 1 k tomuto účelu použijeme funkci Matlabu y=filter(b,a,x,zi,dim). Výsledek funkce je definován vztahem Y ( z) α (4.1) (0) (0) ( s + s ) d α (4.2) b = (1) (0) j = d j + j j+ 1 1 ( 1) + b( 2) z + + b( nb + 1) 1 1+ a( 2) z + K + a( na + 1) z nb K z (4.3) X na S počátečními podmínkami zi nad dimenzí dim. Pokud dosadíme za α=b=[b(1),b(2)]=lift[:,1], a=1, dim =1, a za X(z) posloupnost posunutou o jeden vzorek (0) vpřed, což je v Z transformaci X ( z) Z{ s j } = z = + ( z) 1 dostáváme 1 α + αz (0) (0) ( z) z = αz + α = α( z + 1) = Z{ α( )} Y = s j + 1 + s j 1 (4.4) 26

(1) Obdobně pokud za X(z) dosadíme X ( z) Z{ d } = 1 po provedení funkce y=filter(b,a,x,zi,dim). = j a b=β dostáváme výsledek Y 1 β + βz 1 1 (1) (1) ( z) 1 = β + βz = β (1 + z ) = Z{ β ( d j + d )} = j 1 1 (4.5) Jsme tak schopni vyřešit rovnici (1) (1) ( d + d ) s β (4.6) (1) (0) j = s j + j j= 1 Ostatní rovnice v jednotlivých lifting krocích jsou jen obdobou dvou výše popsaných. Jsme tedy schopni vypočítat celkový výsledek po průchodu všemi lifting kroky. Tento výpočet je, obdobně jako u programu využívajícího princip konvoluce, prováděn nejprve ve sloupcích a poté po řádcích. Po provedení lifting kroku je výsledek uložen do paměti na místo vstupních hodnot pro tento lifting krok. Po provedení posledního lifting kroku, který zajišťuje normalizaci koeficientů, obsahuje vstupní matice výsledný transformovaný signál. Jeli potřeba provést další úroveň dekompozice jsou konstanty s1 a s2 sníženy na polovinu a celý postup je opakován. 4.2.2 Rekonstrukční část Při rekonstrukci je nejdříve nalezena matice představující výsledky poslední úrovně dekompozice. Samotný výpočet je podobný jako při dekompozici. Pořadí lifting kroků je opačné a nejprve je výpočet prováděn po řádcích a až poté po sloupcích. Výsledný signál je opět uložen na patřičné místo ve vstupní matici a celý postup se opakuje, až není signál plně rekonstruován. 27

5 IMPLEMENTACE DWT V C++ Protože cílem této práce je porovnání implementací diskrétní vlnkové transformace s využitím konvolučního a lifting principu výpočtu za pomoci programovacích jazyků C++ a Java, bylo nutné nejprve tyto implementace vytvořit. Tato a následující kapitola se zabývá popisem jednotlivých implementací, vytvořených pomocí programovacího jazyku C++ resp. Java. 5.1 Všeobecná specifikace implementace DWT 5.1.1 Specifikace implementace DWT Veškeré implementace byly vytvořeny jako konzolové aplikace. Mohou být spuštěny v případě C++ na jakékoliv platformě, pro kterou byly zkompilovány a v případě jazyku Java na jakékoliv platformě obsahující JVM (Java Virtual Machine). Jedná se tedy o spustitelné soubory s příponami.exe (C++) a archivy.jar (Java). Nastavení funkčnosti implementací se provádí pouze pomocí vstupních parametrů (argumentů), předávaných při spuštění jednotlivých programů. Při implementaci bylo využito objektově orientovaného programování (OOP). 5.1.2 Vstupní parametry a jejich formát Pro správný běh programu jsou vyžadovány následující vstupní parametry: a) Vstupní soubor Název vstupního souboru pokud je uložen ve stejném adresáři jako právě spouštěná aplikace nebo jeho absolutní cesta pokud se nachází v adresáři jiném. Tento vstupní soubor musí obsahovat textovou reprezentaci jednotlivých koeficientů vstupního diskrétního signálu zapsaných tak, že jednotlivé koeficienty jsou odděleny mezerou a každý řádek tohoto vstupního textového souboru představuje příslušný řádek v matici vstupního diskrétního signálů. Jednotlivé koeficienty mohou být zapsány i jako desetinná čísla, ovšem jako oddělovač desetinných míst musí být použita tečka. Při zapisování desetinných čísel je možné využít i tzv. vědecký formát zápisu, kdy je zvlášť zapisována mantisa a exponent desetinného čísla a k jejich vzájemnému oddělení se používá znak E. K vytvoření vstupního souboru ve správném formátu ze souboru představujícího vstupní dvourozměrný diskrétní signál 28

(obrázky, fotky) lze využít m-file preved(vstupni_cesta, vystupni_cesta), jehož vstupní parametry jsou cesta k souboru představující obrazový signál a cesta k souboru představující výstupní textový soubor koeficientů. Z důvodu zjednodušení algoritmu je zpracováván signál reprezentující pouze stupně šedi o rozměrech libovolných mocnin čísla 2 pixelů. b) Výstupní soubor Výstupní soubor je parametr obdobný vstupnímu souboru. Udává cestu, kde bude vytvořen výstupní soubor se zadaným názvem. Formát výstupního souboru je stejný jako formát vstupního souboru a veškeré koeficienty jsou zapisovány ve vědeckém formátu desetinného čísla. c) Úroveň požadované dekompozice/rekonstrukce Tento parametr udává úroveň, do jaké se má provést dekompozice nebo rekonstrukce vstupního signálu. Zadává se ve formátu celého čísla a to tak, že pokud bude zadané číslo kladné, bude se provádět dekompozice vstupního signálu a při zadání záporného čísla, bude prováděna rekonstrukce vstupního signálu. Dekompozice nebo rekonstrukce je prováděna až do úrovně odpovídající absolutní hodnotě zadaného parametru. Pokud je absolutní hodnota zadaného parametru vetší něž úroveň možné dekompozice či rekonstrukce, provede se pouze do této maximální hodnoty. 5.1.3 Výstupy implementace Výstupem implementace je matice koeficientů, vypočtených po provedení dekompozice nebo rekonstrukce do požadované úrovně. Tato matice je uložena do výstupního souboru ve formátu popsaném výše. 5.1.4 Použitý datový typ Pro reprezentaci a veškerou práci s koeficienty je použit datový typ double. Jedná se o typ využívající plovoucí řádovou čárku a oproti datovému typu float má dvojitou přesnost. K zapsání čísla v datovém typu double je využito 8 bajtů, tedy 64 bitů, kdy jeden bit plní funkci znaménkového bitu, 11 bitů je použito k vyjádření hodnoty exponentu a zbývajících 52 bitů představuje mantisu. 29

5.2 Konvoluční princip 5.2.1 Obecný popis algoritmu Algoritmus je implementován přesně podle výše uvedeného teoretického principu. Vypočet prvků DWT je realizován pomocí separabilní transformace, přičemž je využito možnosti převedení transformace na filtraci pomocí kvadraturní banky zrcadlových filtrů QMF. Koeficienty impulsních charakteristik těchto číslicových filtrů jsou zapsány tabulce Tab. 4.1. Řešení okrajových stavů je zajištěno metodou symetrického prodloužení. 5.2.2 Deklarační část V deklarační časti jsou definovány použité hlavičkové soubory, konstanty, globální proměnné, jednotlivé třídy a jejich metody. Program využívá ke své činnosti následující hlavičkové soubory: iostream, conio.h a math.h. Dále jsou zde definovány konstanty, představující koeficienty impulsních charakteristik jednotlivých filtrů, globální proměnné vstup_s a vystup_s, jenž jsou ukazateli na objekt typu FILE. A konečně jsou zde definovány třídy: imp_ch, mat_koef a mat_koef_rek. 5.2.3 Třída imp_ch Třída imp_ch představuje číslicový filtr. V instanci této třídy jsou uloženy koeficienty impulsní charakteristiky příslušného číslicového filtru. Tato třída obsahuje proměnou delka celočíselného datového typu integer a dále jednorozměrné pole hodnoty datového typu double. Konstruktor imp_ch(double *pole, int pocet_hodnot) provede inicializaci pole hodnoty, uloží do něj příslušný počet hodnot (definováno vstupním parametrem pocet_hodnot) ze vstupního parametru pole a nastaví proměnou delka (tridy imp_ch) tak, aby odpovídala počtu prvků v poli hodnoty. Funkce int get_delka() vrací počet prvků v poli hodnoty a funkce double get_data(int pozice) vrací hodnotu prvku na pozici definované pomocí vstupního parametru pozice. 5.2.4 Třída mat_koef Třída mat_koef představuje dvourozměrný diskrétní signál resp. její instance obsahuje matici koeficientů tohoto signálu. Jsou v ní definovány funkce potřebné k načtení, úpravám, rozložení do jednotlivých podmatic a vypsaní příslušného signálu. Obecně tedy definuje veškeré funkce potřebné k provedení DWT. 30

a) Složení třídy mat_koef Třída mat_koef je znázorněna na obrázku Obr. 5.1 Obr. 5.1. Třída mat_koef Z obrázku Obr. 5.1 je zřejmé, že v datové časti třídy mat_koef jsou zapouzdřeny, dvě proměnné datového typu integer p_r, p_s, sloužící k uchování počtu řádku a sloupců matice koeficientů. A dále ukazatel data, což je ukazatel na pole ukazatelů na datový typ double, který slouží k adresaci libovolného dvourozměrného pole s prvky typu double. V tomto poli jsou uloženy samotné koeficienty příslušné instance třídy mat_koef. Tyto proměnné se často označují jako atributy třídy. Třída dále obsahuje deklarace metod, které využívá. Lze je podle jejich funkce rozdělit do několika níže uvedených skupin. b) Konstruktory a destruktor třídy mat_koef Třída mat_koef obsahuje tři konstruktory a jeden destruktor. mat_koef() jedná se o prázdný konstruktor mat_koef(int radky, int sloupce) tento konstruktor inicializuje dvourozměrné pole data na velikost, udanou pomocí vstupních parametrů radky a sloupce, a nastaví proměnné p_r a p_s na příslušné hodnoty. 31

mat_koef(file * vstupni) vstupním parametrem tohoto konstruktoru je objekt typu FILE, představující v C++ soubor. V konstruktoru se provede volání procedury nacti_ze_souboru(vstupni). Tato procedura bude popsána dále. ~mat_koef() destruktor třídy mat_koef provede dealokaci dvourozměrného pole data v paměti. c) Getters and setters metody třídy mat_koef Protože atributy jsou z důvodu zapouzdření z vně třídy nepřístupné (bývají uvozeny klíčovými slovy private nebo protected), veškerá práce s nimi je realizována pomocí veřejných metod (klíčové slovo public) označovaných jako getters and setters. Z jejich názvu je zřejmé, že metody, označené jako getters, slouží k získání hodnoty atributu a naopak metody, označené setters, provádí nastavení atributu na požadovanou hodnotu. Tohoto principu je s výhodou využito při ošetřovaní okrajových stavů. int get_p_radku() funkce vrátí počet řádků dvourozměrného pole data data int get_p_sloupcu() funkce vrátí počet sloupců dvourozměrného pole double gethodn(int i,int j) funkce vrátí hodnotu prvku v poli data na pozici dané vstupními parametry i,j, tedy hodnotu data[i][j]. Pokud hodnoty i, j ukazují na pozici mimo pole data, je vrácen prvek odpovídající symetrickému prodloužení tohoto pole. Takto jsou ošetřeny případné okrajové stavy při výpočtu DWT. void sethodn(int i, int j,double hodnota) procedura nastaví hodnotu prvku v poli data na pozici, určenou vstupními parametry i, j, na hodnotu definovanou vstupním parametrem hodnota. d) Metody pro výpočet konvoluce Do další skupiny metod třídy mat_koef lze zařadit metody, používané při výpočtu konvoluce mezi koeficienty signálu a příslušné impulsní charakteristiky filtru. Jedná se nejdůležitější metody třídy, protože zajišťují samotnou diskrétní vlnkovou transformaci. double konv (int i, int j,imp_ch * imp_char, int smer) tato funkce tvoří jádro vypočtu konvoluce. Vypočítá konvoluci prvku na pozici i, j (vstupní 32

parametry i,j) s koeficienty impulsní charakteristiky imp_char (vstupní parametr, ukazatel na instanci třídy imp_ch) ve směru sloupců nebo řádků. Zda se bude konvoluce provádět ve směru sloupců nebo řádků, záleží na vstupním parametru smer. V případě že jeho hodnota je nulová, bude konvoluce prováděna ve směru sloupců, a naopak pokud bude jeho hodnota různá od nuly, bude konvoluce prováděna ve směru řádků. Vlastní konvoluce je prováděna podle známého vztahu: [ n] = h0 [ n]* x[ n] = h0 m= y [ m] x[ n m] (5.1) mat_koef* sym_konv(imp_ch * imp_char,int smer, int offset) funkce vypočítá konvoluci pro všechny prvky v poli data, které zůstanou po podvzorkování dvěma v zadaném směru, při použití zadané impulsní charakteristiky. Ukazatel na instanci třídy imp_ch, který definuje použitou impulsní charakteristiku, je opět vstupním parametrem funkce, obdobně jako parametr smer, určující směr provádění konvoluce tak, jak bylo popsáno výše. Posledním vstupním parametrem je offset, definující požadovaný posun signálu při provádění konvoluce. Pokud bude nulový, bude konvoluce počítána pro sudé vzorky, pokud bude nenulový, bude konvoluce počítána pro liché vzorky. Před prováděním výpočtu jednotlivých konvolucí voláním funkce double konv (int i, int j,imp_ch * imp_char, int smer) pro požadovaný prvek, je vytvořena nová instance třídy mat_koef a do této třídy jsou ukládány výsledky jednotlivých konvolucí, vypočtených pro příslušné prvky. Hodnoty v poli data instance třídy mat_koef, ze které byla volána funkce sym_konv, zůstávají nezměněny a samotná funkce sym_konv vrací ukazatel na nově vytvořenou instanci třídy mat_koef, která obsahuje v poli data hodnoty po vypočtení konvoluce a podvzorkování dvěma. e) Metody pro zpracování výsledků void sloz_vysledek(mat_koef * LL,mat_koef * HL,mat_koef * LH,mat_koef * HH) procedura sloužící k sestavení výsledné matice ze čtyř podmatic LL, HL, LH a HH podle principu separabilní transformace viz. Obr. 3.1. Vstupními parametry jsou ukazatele na třídu mat_koef. 33

void vypis(file * vystupni) procedura provede výpis pole data do souboru definovaného pomocí vstupního parametru vystupni, který je ukazatelem na objekt FILE. Hodnoty jsou uloženy v textové formě, s použitím vědeckého zápisu desetinného čísla tak, že vždy řádek matice tvoří řádek výstupního textového souboru a jednotlivé hodnoty jsou odděleny mezerou. void nacti_ze_souboru(file * vstupni) - Vstupním parametrem procedury je ukazatel na soubor. Tento soubor je otevřen a nejprve je zjištěn počet řádku vyhledáním počtu specifických znaků, které značí konec jednotlivých řádků ( \n ). Zjištěný počet řádků je uložen do proměnné p_r. Dále je zjištěn počet sloupců tak, že jsou hledány bloky znaků, jiných než je znak pro mezeru, až do nalezení znaku pro ukončení řádku. Počet takto nalezených bloků, udává počet sloupců a je opět uložen po proměnné p_s. V dalším kroku se inicializuje pole data na rozměr daný hodnotami v proměnných p_r a p_s. Soubor je procházen od jeho počátku a pomocí funkce fscanf (vstup_s,"%e",&n) s uvedenými parametry, jsou jednotlivé koeficienty z textového souboru převedeny na datový typ double a následně uloženy na odpovídající místo ve dvourozměrném poli data. 5.2.5 Třída mat_koef_rek Třída mat_koef_rek slouží, obdobně jako třída mat_koef, k reprezentaci dvourozměrného diskrétního signálu. Jsou v ní ovšem definovány metody potřebné k rekonstrukci původního signálu z koeficientů DWT, umožňuje tak provést zpětnou diskrétní vlnkovou transformaci (IDWT). a) Složení třídy mat_koef_rek Mat_koef_rek je dceřiná třída třídy mat_koef. Protože při dědění bylo použito klíčové slovo public a třída mat_koef neobsahuje žádné atributy či metody deklarované jako private, dědí třída mat_koef_rek veškeré atributy i metody třídy mat_koef. Třída mat_koef_rek tedy obsahuje stejné metody jako třída mat_koef a je zbytečné je zde znovu popisovat. Popsány budou pouze metody nové nebo přetížené. Přetížením metody se v tomto případě rozumí předeklarovaní metody zděděné z nadřazené třídy. Struktura třídy mat_koef_rek včetně zděděných metod a atributů z třídy mat_koef je zobrazena na obrázku 0. 34

Obr. 5.2. Třída mat_koef_rek b) Konstruktory a destruktor třídy mat_koef_rek Konstruktory ani destruktory se nedědí a proto je třeba je deklarovat znovu. Deklarace jsou stejné jako u třídy mat_koef. Navíc je deklarován nový konstruktor. mat_koef_rek (mat_koef_rek * A, mat_koef_rek * B, int smer, int offset) Tento konstruktor slouží k vytvoření rekonstrukční matice ze dvou 35