Projekt

Za ovaj projekt napravljeno je postizanje 3 vrste efekata kod obrade slike (ringing, blur i convolution), svaki pomoću jedne vrste filtera (low pass, butterworth, high pass) u frekvencijskoj domeni. Za prijelaz iz sustava koji svakom pikselu dodjeljuje vrijednost kompleksnog broja u frekvencijsku domenu korišten je FFT algoritam. Program je napravljen u C programskom jeziku, a za FFT je korištena C biblioteka FFTW (Fast Fourier Transform in the west). Program koristi slike u PGM formatu. Slika bilo kojeg formata može se konvertirati u PGM format uz pomoć programa GIMP. Nakon učitavanja dovoljno provoditi jednostavne akcije na temelju uputa u programu kako bi se dobila obrađena nova slika u PGM formatu.

FFTW

C biblioteku FFTW (Fast Fourier Transform in the west) potrebnu za izvršavanje ovog programa jednostavno je skinuti i instalirati sa službene stranice fftw.org.

Također ju je vrlo lako instalirati iz linux terminala pomocu naredbe sudo apt-get install fftw3 fftw3-dev.

Na početak svakog programa koji koristi ovu biblioteku potrebno je dodati liniju #include <fftw3.h>.

Pri kompiliranju programa potrebno je na kraju dodati dvije zastavice -lfftw3 -lm (npr. gcc -o program obrada.c -lfftw3 -lm ).

Program

Na početku programa unosi se ime slike koju se želi učitati, te se unose podatci potrebni za izvršavanje programa prema uputama. Pošto su to osnovni elementi i akcije mnogih C programa oni neće posebno biti prikazani ovdje.

Prvi zanimlji element ovoga programa je implementacija FFT algoritma u kodu pomoću FFTW biblioteke.

fftwKod

Prvi korak je alociranje memorije koje će koristiti u ovom primjeru izlazno polje "out". "Out" je tipa fftw_complex koji je polje veličine 2 tipa double. Sastoji se od realnog i imaginarnog dijela, a predstavlja kompleksni broj.

Sljedeći korak je kreiranje plana. Prvi i drugi elemnti predstavljaju veličinu transformacije u 2D. 3. argument je ulazno , a 4. argument izlazno poslje vrijednosti koje se trensformiraju. 5. argument predstavlja smjer trasformacije. Zastavica FFTW_FORWARD predstavlja prelazak u frekvencijsku domenu, dok zastavica FFTW_BACKWARD predstavlja izlazak iz frekvencijske domene.

Navedeni planovi izvršavaju se pomoću funkcije fftw_execute(fftw_plan). Na samom kraju potrebno je osloboditi zauzete resusrse

lpKod

Funkcija za filtriranje pomoću low pass filtera na početku sadrži dohvaćanje svakog pojedinog pixela. Slijedi postavljanje i računanje vrijednosti na temelju opisa iz kartice Implementacija u RG. Filter se postavlja tako da propušta sve vrijednosti manje od granične frekvencije postavljene od strane korisnika. Na kraju se svaki element polja u frekvencijskoj domeni množi s odgovarajućom vrijednošću filtera čime se postiže željeni efekt.

hpKod

Funkcija za filtriranje pomoću high pass filtera vrlo je slična funkciji za filtriranje pomoću low pass filtera, jedina razlika je što filter propušta jedino vrijednosti veće od granične frekvencije.

bwKod

Funkcija za filtriranje pomoću butterworth filtera ponešto je drugačija. Osim granične frekvencije zahtjeva i cijeli broj koji djeluje na jačinu filtera (u ovom slučaju zamagljenja). Za razliku od prethodno navedenih filtera gdje sve vrijednosti ili ostaju iste (množe se s 1.0) ili dobivaju vrijednost 0 (množe se s 0.0), u ovom slučaju one se množe s mnogo različitih vrijednostidobivenih po već poznatim formulama

top