Wprowadzenie do programu Octave - WEMiF

Transkrypt

Wprowadzenie do programu Octave - WEMiF
Politechnika Wrocławska
Wydział Elektroniki Mikrosystemów i Fotoniki
Przetwarzanie sygnałów – laboratorium
ETD5045L
Ćwiczenie 11.
Liniowe przetwarzanie obrazów
1. Splot dwuwymiarowy
Ponieważ obrazy są sygnałami dwumiarowymi, przetwarzające je systemy liniowe również są
systemami dwuwymiarowymi. Charakterystykę takich systemów określa, podobnie jak dla
systemów jednowymiarowych, odpowiedź impulsowa systemu. Impuls jednostkowy w tym
przypadku jest sygnałem dwuwymiarowym, a więc obrazem. Obraz ten ma tylko jeden biały punkt
i pozostałe punkty czarne. Ponieważ wykorzystywane w przetwarzaniu obrazów systemy liniowe
(filtry cyfrowe) rozmywają ten jasny punkt, często odpowiedź impulsową dla sygnałów
dwuwymiarowych nazywa się funkcją rozmycia punktu (ang. Point Spread Function – PSF).
Poniżej pokazano różne funkcje rozmycia. Podobnie jak w przypadku systemów
jednowymiarowych, przetwarzanie obrazów realizuje się za pomocą operacji splotu obrazu z
funkcją rozmycia punktu filtru cyfrowego.
a)
b)
Rys. 1 Przykładowe funkcje rozmycia punktu: a) Gaussowska, b) prostokątna
Funkcję rozmycia punktu wykorzystuje się do przetwarzania obrazów zgodnie z wzorem
R−1 C−1
yi , j = ∑ ∑ PSF  m, n x i−m , j−n
m=0 n=0
R , C−są odpowiednio liczbą wierszy i kolumn PSF
W przypadku obrazów taka postać splotu umożliwia efektywne przetwarzanie obrazu tylko
wtedy, kiedy PSF filtru ma wymiary 3x3 piksele. W przypadku większych funkcji rozmycia czas
przetwarzania znacząco się wydłuża. Istnieje jednak klasa funkcji rozmycia, które można uzyskać
przez filtrację każdego wymiaru obrazu osobno (najpierw filtrowane są po kolei wiersze, a potem
1
kolumny). Jeżeli funkcja rozmycia jest separowalna, to do filtracji wykorzystywana jest albo
klasyczna jednowymiarowa operacja splotu, albo operacja filtracji za pomocą filtru o nieskończonej
odpowiedzi impulsowej. Operacja filtracji jest wówczas przeprowadzana po kolei na wierszach, a
następnie na kolumnach. Współczynniki filtrów wykorzystane do takiej filtracji mogą być takie
same lub różne dla kolumn i wierszy.
Podobnie jak w ćwiczeniu 10-tym obrazy są dwuwymiarowymi tablicami liczb rzeczywistych
z przedziału od 0 do 1 i będą wczytywane z pliku o nazwie tank_data.pic za pomocą polecenia
load sciezka\dostepu\tank_data.pic. Po wykonaniu tego polecenia w środowisku Octave
pojawią się zmienne tank i template, w których są zapisane obrazy. Obraz można wyświetlić za
pomocą polecenia imshow(nazwa_zmiennej).
2. Detekcja krawędzi
Proste operacje filtracji za pomocą funkcji rozmycia o wymiarach 3x3, mogą być z
powodzeniem wykorzystane do detekcji bądź wzmacniania krawędzi. Krawędzie w obrazie
odpowiadają nagłym zmianom sygnałów jednowymiarowych i podobnie jak w sygnałach
jednowymiarowych detekcja takich zmian jest przeprowadzana za pomocą filtracji
górnoprzepustowej.
Rys. 2 Przykład detekcji skoków w sygnalePoniżej przedstawiono przykład detekcji skoku
jednostkowego dla sygnałów jednowymiarowych.
Na rys. 2 czerwona linia przedstawia funkcję skoku jednostkowego natomiast niebieska
pokazuje sygnał po detekcji krawędzi za pomocą prostego filtru górnoprzepustowego o odpowiedzi
impulsowej h=[1,-1] ( dyskretna pierwsza pochodna ).
Odpowiednikiem dyskretnej pochodnej sygnałów jednowymiarowych jest PSF podana na
rys. 3a . Funkcja ta wzmacnia te punkty obrazu, które różnią się od swoich sąsiadów, a tłumi te
które mają jasność podobną do otaczających je punktów. Ponieważ występujące w obrazie
krawędzie zawierają punkty, które różnią się od swojego otoczenia, przedstawiona na rys. 3a PSF
wzmacnia te punkty, sprawiając że obraz wynikowy pokazuje wyraźnie zarysowane krawędzie.
2
a)
-1/8 -1/8 -1/8
-k/8 -k/8 -k/8
-1/8
-k/8 k+1 -k/8
1
-1/8
-1/8 -1/8 -1/8
b)
-k/8 -k/8 -k/8
Rys. 3 Przykłady funkcji rozmycia punktu wykorzystywane do: a) detekcji krawędzi, b)wzmocnienia
krawędzi k jest dowolną liczbą, która decyduje o tym, jak bardzo wzmacniane są krawędzie
Czasami nie ma potrzeby detekcji krawędzi a jedynie ich wzmocnienie, czyli sprawienie by
były nieco bardziej widoczne. Wówczas można zmodyfikować PSF (rys. 3b) tak, aby nie tłumiła w
tak dużym stopniu jednorodnych obszarów obrazu, a jedynie wzmacniała punkty krawędziowe. Na
rys. 4 przedstawiono działanie tych dwóch PSF dla obrazu noktowizyjnego czołgu.
a)
b)
c)
Rys. 4 Przykład działanie PSF: a) obraz oryginalny, b) detekcja krawędzi, c) wzmocnienie krawędzi
3. Splot FFT
Większość funkcji PSF w przetwarzaniu obrazów to funkcje o rozmiarach 3x3 lub 5x5
punktów. W przypadku większych PSF tradycyjna forma obliczania splotu przestaje być efektywna.
Wówczas należy się zastanowić albo nad funkcją PSF, która jest separowalna, albo realizować splot
za pomocą szybkiej transformacji Fouriera. Aby zrealizować operację splotu za pomocą FFT,
należy w pierwszej kolejności ustalić rozmiar obrazu wynikowego. Liczba wierszy i liczba kolumn
obrazu wynikowego wynosi odpowiednio RxC, gdzie R i C są dane wzorem
R= R1R2−1 i C=C 1C 2−1 . Ponieważ FFT wykonywana jest tylko na obrazach, których
liczba wierszy i liczba kolumn jest równa potędze liczby 2, należy obliczone R i C zwiększyć do
najbliższej liczby będącej potęgą liczby 2. Dopiero wtedy uzyskuje się prawdziwy rozmiar obrazu
po operacji splotu FFT. Przed wykonaniem operacji splotu FFT, konieczne jest rozszerzenie
obrazów o punkty o jasności zero tak, aby obrazy te miały liczbę kolumn i wierszy równą
wynikowi splotu FFT. Szybką transformację Fouriera dla obrazów wykonuje się po kolei najpierw
dla wszystkich wierszy, a następnie dla kolumn. Takie rozdzielenie jest możliwe, ponieważ DFT
jest transformacją separowalną. Po wykonaniu DFT, należy pomnożyć punkt po punkcie widma
splatanych obrazów i wykonać odwrotną FFT wyniku. Wynikiem splotu dwóch obrazów jest część
rzeczywista wyniku odwrotnej FFT. Poniżej przedstawiono przykład wykonania operacji splotu dla
obrazu czołgu, który jest splatany tylko z odwróconym (lewo – prawo, góra – dół) obrazem samego
pojazdu. Jest to zatem operacja korelacji, w wyniku której powinniśmy otrzymać obraz, w którym
maksimum jasności będzie pokazywać położenie pojazdu na obrazie.
3
a)
b)
c)
d)
Rys. 5 Przykład zastosowania splotu FFT do najprostszego rozpoznawania wzorca: a) obraz, na
którym znajduje się lokalizowany obiekt, b) wzorzec będący wyciętym obiektem, c) wynik korelacji
FFT obrazu i wzorca (punkt przecięcia czarnych linii pokazuje punkt o maksymalnej jasności, d)
związek punktu o maksymalnej jasności w obrazie korelacji z położeniem lokalizowanego obiektu
4. Zadania do realizacji na zajęciach
Na zajęciach student powinien opracować i zaimplementować niżej wymienione funkcje.
Dodatkowo do każdej funkcji, musi być napisany skrypt, który prezentuje i testuje działanie tej
funkcji. Obrazki testowe (plik tank_data.pic) jest do pobrania ze strony internetowej.
Zadanie nr 1
W zadaniu pierwszym należy napisać funkcję w postaci
function h=gauss_kernel(r,c)
#definicja ciała funkcji
endfunction
która będzie generować Gaussowską funkcję rozmycia punktu wymiarach R x C.
Zaprezentować obraz otrzymanej PSF dla R=7 i C=7.
4
Zadanie nr 2
W zadaniu drugim należy napisać funkcję w postaci
function y=my_conv2D(x,h)
#definicja ciała funkcji
endfunction
, która będzie realizować dwuwymiarowy splot obrazu x z funkcją rozmycia punktu h.
Działanie zademonstrować dla PSF do detekcji i wzmacniania krawędzi, oraz dla funkcji Gaussa;
Zadanie nr 3
W zadaniu trzecim należy napisać funkcję w postaci
function X=fft2D(x)
#definicja ciała funkcji
endfunction
, która będzie realizować dwuwymiarową transformację Fouriera. Do realizacji zadania
można wykorzystać wbudowaną funkcję fft programu Octave, realizującą jednowymiarową FFT.
Zadanie nr 4
W zadaniu czwartym należy napisać funkcję w postaci
function y=ifft2D(x,N)
#definicja ciała funkcji
endfunction
która realizuje odwrotną dwuwymiarową DFT, za pomocą wbudowanej funkcji fft
programu Octave realizującej jednowymiarową szybką transformację Fouriera. Działanie funkcji
fft2D i ifft2D zaprezentować transformując obrazek tank. Należy pokazać, że po wykonaniu
transformacji prostej i odwrotnej otrzymujemy z powrotem ten sam obraz.
Zadanie nr 5
W zadaniu piątym należy napisać funkcję w postaci
function y=FFT_conv(x1,x2)
#definicja ciała funkcji
5
endfunction
, która realizuje splot FFT dwóch obrazów x1 i x2 . Działanie należy zademonstrować na
przykładzie korelacji i detekcji położenia czołgu w obrazie tank z wykorzystaniem wzorca
template.
5. Pytania na kartkówkę
1.
2.
3.
4.
5.
6.
Napisać funkcję gauss_kernel.
Napisać funkcję my_conv2D.
Napisać funkcję fft2D.
Napisać funkcję ifft2D.
Napisać w jaki sposób wykonuje się splot FFT.
Napisać w jaki sposób oblicza się korelację dwóch obrazów.
6