Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace



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

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

3. Matice a determinanty

5 Rekurze a zásobník. Rekurzivní volání metody

FOURIEROVA ANAL YZA 2D TER ENN ICH DAT Karel Segeth

Determinant. Definice determinantu. Permutace. Permutace, vlastnosti. Definice: Necht A = (a i,j ) R n,n je čtvercová matice.

Matice se v některých publikacích uvádějí v hranatých závorkách, v jiných v kulatých závorkách. My se budeme držet zápisu s kulatými závorkami.

ROZ1 - Cv. 2 - Fourierova transformace ÚTIA - ZOI

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

8. Posloupnosti, vektory a matice

Transformace obrazu Josef Pelikán KSVI MFF UK Praha

Kódy pro detekci a opravu chyb. INP 2008 FIT VUT v Brně

v Praze mezi kanály EEG Ondřej Drbal 5. ročník, stud. sk. 9

Skalár- veličina určená jedním číselným údajem čas, hmotnost (porovnej životní úroveň, hospodaření firmy, naše poloha podle GPS )

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

Gymnázium, Brno. Matice. Závěrečná maturitní práce. Jakub Juránek 4.A Školní rok 2010/11

Lenka Zalabová. Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita. zima 2012

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

2 Spojité modely rozhodování

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Fourierova transformace

Lineární algebra : Násobení matic a inverzní matice

Algoritmus pro generování normálních magických čtverců

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

VYUŽITÍ OBRAZOVÉ ANALÝZY PRO ODHAD DOSTAVY TKANINY

a m1 a m2 a mn zobrazení. Operaci násobení u matic budeme definovat jiným způsobem.

1 Zpracování a analýza tlakové vlny

Spektrální analyzátory

Lineární algebra : Násobení matic a inverzní matice

Matice. Přednáška MATEMATIKA č. 2. Jiří Neubauer. Katedra ekonometrie FEM UO Brno kancelář 69a, tel

(Auto)korelační funkce Statistické vyhodnocování exp. dat M. Čada ~ cada

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

SPM SPECTRUM NOVÁ UNIKÁTNÍ METODA PRO DIAGNOSTIKU LOŽISEK

A0M15EZS Elektrické zdroje a soustavy ZS 2011/2012 cvičení 1. Jednotková matice na hlavní diagonále jsou jedničky, všude jinde nuly

Signál v čase a jeho spektrum

Matematická statistika

Soustavy lineárních rovnic

+ ω y = 0 pohybová rovnice tlumených kmitů. r dr dt. B m. k m. Tlumené kmity

Spektrální analýza a diskrétní Fourierova transformace. Honza Černocký, ÚPGM

Toto zadání je podepsané děkanem a vedoucím katedry, po obhajobě).

Regulární matice. Věnujeme dále pozornost zejména čtvercovým maticím.

Algoritmus sledování objektů pro funkční vzor sledovacího systému

Aplikovaná numerická matematika - ANM

Algoritmus pro hledání nejkratší cesty orientovaným grafem

přetížení operátorů (o)

Při návrhu FIR filtru řešíme obvykle následující problémy:

Několik poznámek na téma lineární algebry pro studenty fyzikální chemie

1/10. Kapitola 12: Soustavy lineárních algebraických rovnic

4. Trojúhelníkový rozklad p. 1/20

2. Matice, soustavy lineárních rovnic

Jarníkův algoritmus. Obsah. Popis

Filtrace obrazu ve frekvenční oblasti

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

31ZZS 9. PŘEDNÁŠKA 24. listopadu 2014

3. D/A a A/D převodníky

1 Elektronika pro zpracování optického signálu

FILTRACE VE FOURIEROVSKÉM SPEKTRU

3. ročník, 2013/ 2014 Mezinárodní korespondenční seminář iks

Matice. a m1 a m2... a mn

Lingebraické kapitolky - Počítání s maticemi

1 Determinanty a inverzní matice

(Cramerovo pravidlo, determinanty, inverzní matice)

VLASTNOSTI KOMPONENTŮ MĚŘICÍHO ŘETĚZCE - ANALOGOVÁČÁST

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Karnaughovy mapy. Pravdivostní tabulka pro tři vstupní proměnné by mohla vypadat například takto:

Zpracování obrazů. Honza Černocký, ÚPGM

Teorie informace a kódování (KMI/TIK)

A7B31ZZS 10. PŘEDNÁŠKA Návrh filtrů 1. prosince 2014

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

V praxi pracujeme s daty nominálními (nabývají pouze dvou hodnot), kategoriálními (nabývají více

Využití modální analýzy pro návrh, posouzení, opravy, kontrolu a monitorování mostů pozemních komunikací

skladbu obou směsí ( v tunách komponenty na 1 tunu směsi):

Y36BEZ Bezpečnost přenosu a zpracování dat. Úvod. Róbert Lórencz. lorencz@fel.cvut.cz

Maticový a tenzorový počet

DIGITÁLNÍ KOMUNIKACE S OPTICKÝMI VLÁKNY. Digitální signál bude rekonstruován přijímačem a přiváděn do audio zesilovače.

ALGEBRA. Téma 5: Vektorové prostory

" Furierova transformace"

Vlastnosti IIR filtrů:

Parametrické přístupy k filtraci ultrazvukových signálů

Skalární součin je nástroj, jak měřit velikost vektorů a úhly mezi vektory v reálných a komplexních vektorových prostorech.

1 Projekce a projektory

Řešení problému batohu dynamickým programováním, metodou větví a hranic a aproximativním algoritmem

GRAFY A GRAFOVÉ ALGORITMY

Několik aplikací. Kapitola 12

BAKALÁŘSKÁ PRÁCE. Martina Klejchová Rychlá Fourierova transformace

5. Maticová algebra, typy matic, inverzní matice, determinant.

FP - SEMINÁŘ Z NUMERICKÉ MATEMATIKY. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

11 Soustavy rovnic a nerovnic, Determinanty a Matice

Kapitola 1. Tenzorový součin matic

9. Úvod do teorie PDR

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto

Dynamické programování. Optimální binární vyhledávací strom

Jazyk matematiky Matematická logika Množinové operace Zobrazení Rozšířená číslená osa

Poslední nenulová číslice faktoriálu

Matematika pro studenty ekonomie

0.1 Úvod do lineární algebry

Determinanty. Determinanty. Přednáška MATEMATIKA č. 3. Jiří Neubauer

Základy programování (IZP)

Transkript:

Filtrace snímků ve frekvenční oblasti Rychlá fourierova transformace semestrální práce z předmětu KIV/ZVI zpracoval: Jan Bařtipán A03043 bartipan@students.zcu.cz Obsah Úvod....3 Diskrétní Fourierova transformace v 1D (DFT)......3 Rychlá Fourierova transformace (FFT)...3

In-place implementace algoritmu FFT......4 Přeřazení vstupní posloupnosti......4 Motýlkový algoritmus......5 ormalizace zpětné Fourierovy transformace...7 Fourierova transformace ve 2D......7 Posunutí výstupu FFT......8 Reprezentace výsledků Fourierovy transformace...9 Filtrování pomocí Fourierovy transformace......9 Implementace......10 Závěr......12 Reference......12

Úvod Fourierova transformace je pojmenována po Jean Baptiste Joseph Fourierovi (1768-1830), francouzském matematikovi a fyzikovi. Jde o matematický nastroj, s jehož pomocí lze vyjádřit jakýkoliv signál jako součet sinových vln s různou frekvencí. Fourierova transformace F převádí tedy posloupnost vzorků (označme ji x=x 0, x 1,,x 1 ) na jinou posloupnost vzorků (označme ji X=X 0,X 1,,X 1 ). Tato transformace se nazývá dopřednou Fourierovou transformací. K této transformaci existuje transformace inverzní F 1, která analogicky posloupnost X převede na posloupnost x. F x =X F 1 X =f X =x Prvky x k x se nazývají prvky v časové oblasti. Prvky X k X se označují za prvky v oblasti frekvenční. Prvky posloupností x, x k C X k C X jsou komplexní čísla. Diskrétní Fourierova transformace v 1D (DFT) Mějme diskrétní signál vzorků, vyjádřených posloupností hodnot f n,n 0 ; 1. Tento signál pomocí Fourierovy transformace může převést z časové oblasti do frekvenční takto: i 2 k n 1 f n F k = n =0 Této transformaci se říká dopředná. Obdobně lze převést signál z frekvenční oblasti do časové takto: f k = 1 i 2 k n 1 Fn n=0 Je patrné, že kdybychom implementovali výpočet fourierovy transformace podle tohoto vzorce, tento výpočet by měl složitost O n 2. Rychlá Fourierova transformace (FFT) V roce 1965 objevili 1 J. W. Cooley a J. W. Tukey metodu výpočtu Fourierovy transformace s výpočetní složitostí O n log 2 n. Princip tohoto urychlení spočívá v rozkladu posloupnosti na podposloupnosti s lichými a sudými prvky původní posloupnosti. Koeficienty Fourierovy transformace se vypočtou z Fourierových transformací vzniklých podposloupností. Platí totiž [Wolfram]: 1 Ve skutečnosti tato metoda výpočtu byla objevena poprvé německým matematikem Karlem Fridrichem Gaussem (1777-1855) o více než století dříve.

F k = n=0 F k = n=0 i 2 k n 1 F k = n=0 f n i 2 k 2n /2 1 f 2n i 2 k n /2 1 f e /2 n F k =F k e e i 2 k 2n 1 /2 1 f2n 1 n=0 j 2 e k n=0 j 2 k o F k i 2 kn / 2 1 f o / 2 n Tento rozklad posloupností na podposloupnosti lze provádět rekurzivně, dokud nezískáme podposloupnost obsahující jen jeden prvek. Koeficient Fourierovy transformace této podposloupnosti je sám tento prvek. Abychom bez problémů mohli rekurzivně rozkládat posloupnosti, je třeba, aby signál, který chceme transformovat, měl právě 2 n vzorků. In-place implementace algoritmu FFT Algoritmus FFT se nejčastěji implementuje jako in-place algoritmus. To znamená, že pro výpočet FFT si vystačíme pouze s operační pamětí pro uchování prvků posloupnosti. void fft(array& arr, bool forward) Přeřazení vstupní posloupnosti Abychom mohli pohodlně provádět in-place implementaci FFT, před samotným výpočtem přeřadíme vstupní posloupnost. Tímto dostaneme v posloupnosti vždy vedle sebe dva bloky, které tvoří v určitém stupni lichou a sudou podposloupnost. Princip přeřazení posloupnosti o osmi prvcích je naznačen na obrázku 1. size_t n = arr.size(); // Do the bit reversal u32 i2 = n >> 1; u32 j = 0; for (u32 i=0; i < n-1; i++) if (i < j) Complex tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; u32 k = i2; while (k <= j) j -= k; k >>= 1; j += k;

0 1 2 3 4 5 6 7 0 2 4 6 1 3 5 7 0 4 2 6 1 5 3 7 0 4 2 6 1 5 3 7 Obrázek 1: Přeskládání vstupní posloupnosti osmi prvků. Původní index ový index Dec. Bin. Dec Bin 0 000 0 000 1 001 4 100 2 010 2 010 3 011 6 110 4 100 1 001 5 101 5 101 6 110 3 011 7 111 7 111 Tabulka 1: Původní a nový index jednotlivých prvku posloupnosti. Princip výpočtu nového indexu prvku nám bude zřejmější, pokud si přepíšeme do tabulky hodnoty původního a nového indexu prvku. Při vyjádření hodnot indexů ve dvojkové soustavě si povšimněte, že hodnota nového indexu vznikne překlopením jednotlivých bitů kolem prostředního bitu (vzhledem k velikosti posloupnosti ). Samotný výpočet pak provádí sestavování podposloupností a dopočítání koeficientů Fourierovy transformace. Motýlkový algoritmus Samotné skládání jednotlivých podposlouností provádí specializovaný algoritmus tzv. Motýlkový algoritmus. Ten provádí postupné skládání prvků z liché a sudé posloupnosti do dvou po sobě jdoucí prvků nové posloupnosti.

Lichá podposloupnost Sudá podposloupnost xs xs xs xs - - - - + + + + + + + + Výsledná posloupnost Obrázek 2: Motýlkový algoritmus na posloupnosti =8 Jak je vidět na obrázku 2, každý prvek výsledné posloupnosti vznikne z příslušného prvku liché a sudé posloupnosti, tedy: F k =F k e e S k =e // do computation u32 l1; u32 l2 = 1; u32 m = static_cast<u32>(log(n)/log(2)); // sign of exponent f64 sign = (forward)? -1.0 : 1.0; // base component of exponent of C f64 cexpbase = sign * M_PI; // initial //Complex c = -1.0; // loop for each level for (u32 l = 0; l < m; l++) // loop for each sub DFT element // count of sub frequency spectras l1 = l2; // sub DFT stride l2 <<= 1; j 2 k o F k j 2 k

// W ^ 0 Complex w(1,0); // W ^ 1 Complex c(cos(cexpbase/l1), sin(cexpbase/l1)); for (u32 j = 0; j < l1; j++) // loop for each butterfly (sub DFT) for (u32 i = j; i < n; i += l2) u32 i2 = i + l1; Complex t = w * arr[i2]; arr[i2] = arr[i] - t; arr[i] += t; // compute new w w *= c; ormalizace zpětné Fourierovy transformace akonec nesmíme u zpětné Fourierovy transformace zapomenout normalizovat celou posloupnost: // normalize if (!forward) arr /= static_cast<f64>(n); Fourierova transformace ve 2D Algoritmus výpočtu DFT ve 2D je dán jako výpočet koeficientů dle vzorce: M 1 1 X k,l = m=0 xm,n n=0 j2 k m M ln pro dopřednou Fourierovu transformaci a pro inverzní: x k, l = 1 M 1 m=0 M 1 n=0 X m,n j km M ln Je zřejmé, že takto formulovaný výpočet DFT má složitost O n 4. Pro výpočet dvou rozměrné Fourierovy transformace lze využít algoritmus výpočtu Fourierovy transformace v 1D. Snadno lze dokázat, že: 1,i =F 1D x i,1 M X 1,i =F 1D 1,i kde x je matice vzorků v časové oblasti, x i.1 M je sloupec (resp. řádek) v matici x, je matice složená po řádcích z jednotlivých transformovaných sloupců ve frekvenční oblast a obdobně X 1 M,i je sloupec (resp. řádek) v této matici. ic nám tedy nebrání pro výpočet Fourierovy transformace v 2D využít algoritmus FFT pro,

výpočet 1D Fourierovy transformace. Pro úplnost uvádím zdrojový kód pro 2D FFT: void fft2(array& arr, u32 w, bool forward) u32 h = arr.size() / w; // perform 1D FFT for each row Array rarr(w); for (u32 i = 0; i < h; i++) for (u32 j = 0; j < w; j++) rarr[j] = arr[i * w + j]; fft(rarr, forward); for(u32 j = 0; j < w; j++) arr[i * w + j] = rarr[j]; // perform 1D FFT for each column Array carr(h); for (u32 i = 0; i < w; i++) for (u32 j = 0; j < h; j++) carr[j] = arr[j * w + i]; fft(carr, forward); for(u32 j = 0; j < h; j++) arr[j * w + i] = carr[j]; Posunutí výstupu FFT Výstupem dvourozměrné FFT je matice, která svými rozměry odpovídá vstupní matici. Každý prvek této matice vyjadřuje velikost a fázi frekvence, která odpovídá pozici prvku v matici. Rozložení frekvencí v matici je znázorněno na obrázku 3. a tomto obrázku DC představuje (prvek na pozici 0,0) tzv. stejnosměrnou složku (součet všech prvků původního obrázku), X_max označuje prvky matice, které obsahují koeficienty pro největší frekvencí ve vodorovném směru, obdobně Y_max označuje prvky matice s největší frekvencí ve svislém směru. Aby se nám lépe pracovalo s výstupní maticí, přemístíme jednotlivé kvadranty tak, aby DC složka byla uprostřed matice, koeficient frekvence (-X_max, -Y_max) byl v levém horním rohu a koeficient frekvence (X_max, Y_max) v pravém dolním rohu.

DC max_x -max_x max_y -max_y Obrázek 3: Rozložení frekvencí na jednotlivých prvcích výstupní matice Reprezentace výsledků Fourierovy transformace Výstupem dopředné Fourierovy transformace je posloupnost X, kde jednotlivé prvky této posloupnosti X i C. Jednotlivé prvky X i vyjadřují zastoupení i-té frekvence v posloupnosti x. Pro snazší pochopení významu jednotlivých prvků, se používá polárního vyjádření koeficientu. Z něj lze zjistit velikost amplitudy frekvence ( M i ), nebo její fázový posun ( i ): i =atan R X i IX i M i = X i = R X i 2 I X i 2 Filtrování pomocí Fourierovy transformace Pomocí Fourierovy transformace lze provádět filtrování ve frekvenčníoblasti. Princip fungování takovýchto filtrů je v těchto krocích: 1) transformace z časové do frekvenční oblasti 2) aplikování masky, na prvky ve frekvenční oblasti 3) zpětná transformace z frekvenční do časové oblasti Aplikace masky v kroku dvě změníme (nastavíme na nulu) některé členy ve frekvenční oblasti. Maska tedy určuje pozice bodů, které budou nastaveny na nulu a pozice bodů, které zůstanou nezměněny. Při aplikování masky je třeba se vyvarovat odstranění stejnosměrné složky. Ta má význam těžiště a při její ztrátě dojde k citelné deformaci signálu.

Obrázek 4: Maska dolní propusti Obrázek 5: Maska horní propusti Obrázek 6: Maska pásmové propusti Implementace Součástí této semestrální práce je i implementace rychlé Fourierovy transformace a její použití pro realizaci filtru dolní propustina obrázek. Program je napsán v jazyce C++ s použitím knihovny STL (třída valarray). Aplikace dále využívá knihovnu DevIL

(http://openil.sf.net/) pro práci s obrázky. Program byl vyvíjen v prostředí GU/Linux s použitím překladače GU C++ (g++), nicméně jsme striktně používal přenositelné knihovny, a proto by překlad pro jiný operační systém neměl být problém. Tato implementace je přístupná na adrese http://home.zcu.cz/~bartipan/zvi/fft.tar.bz2 Obrázek 7: Původní obrázek Obrázek 8: Obrázek po filtrování dolní propustí Obrázek 9: Původní obrázek Obrázek 10: Obrázek po filtraci horní propustí

Závěr V této práci jsem se pokusil objasnit algoritmus rychlé Fourierovy transformace. Uvedl jsem matematický vztah pro složení sudé a liché podposloupnosti, který je základem FFT algoritmu. Dále jsem popsal postup, jak vypočíst Fourierovu transformaci ve 2D s použítím algoritmu FFT pro 1D transformaci. a závěr jsem naznačil jak tento algoritmus použít k realizaci dolní propusti pro odstranění šumu z obrázku a horní propusti pro detekci hran. Implementace filtru dolní propusti v jazyce C++ je přístupná na adrese http://home.zcu.cz/~bartipan/zvi/fft.tar.bz2. Reference 1. [DSPGuide] - The Scientist guide to DSP, http://www.dspguide.com/pdfbook.htm 2. [Wolfram] - http://mathworld.wolfram.com/fastfouriertransform.html 3. [RecipC] - umerical Recipes in C, http://www.library.cornell.edu/nr/bookcpdf.html 4. [FFT2] - http://astronomy.swin.edu.au/~pbourke/other/fft2d/ 5. [Impl] - How to implement the FFT algorithm - http://www.codeproject.com/cpp/howtofft.asp