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 yi , 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= R1R2−1 i C=C 1C 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