Laboratorium Cyfrowego Przetwarzania Sygnałów Preskrypt do v.205l ćwiczenie nr 9 z 0 temat: Przetwarzanie obrazów na prawach rękopisu Lista Autorów Zakład Teorii Obwodów i Sygnałów Instytut Systemów Elektronicznych Wydział Elektroniki i Technik Informacyjnych Politechnika Warszawska Uwagi redakcyjne prosimy zgłaszać do: jmisiure@elka.pw.edu.pl tel. 544 Warszawa, 5 maja 205, 4:30
Spis treści 9 Przetwarzanie obrazów 3 9. Podstawy teoretyczne.............................. 3 9.. Definicje podstawowe......................... 3 9..2 Obliczanie widma obrazu cyfrowego.................. 5 9..3 Filtracja liniowa............................ 0 9..4 Filtracja nieliniowa. Filtr medianowy................. 3 9..5 Poprawa kontrastu za pomocą operacji na histogramach........ 8 9..6 Wykrywanie prostych transformacja Hough'a............ 9 9..7 Wstęp do kompresji obrazu....................... 20 9..8 Transformacja falkowa......................... 2 9.2 Zadania do pracy własnej studenta....................... 22 9.3 Eksperymenty do wykonania w laboratorium................. 23 9.3. Widmo sygnału dwuwymiarowego................... 23 9.3.2 Filtrowanie sygnałów dwuwymiarowych................ 27 9.3.3 Wykrywanie krawędzi i detekcja prostych............... 29 9.3.4 Usuwanie szumów........................... 3 9.3.5 Proste metody kompresji obrazu.................... 32 9.3.6 Zakres dynamiczny obrazów...................... 34 2
Ćwiczenie 9 Przetwarzanie obrazów Opiekun ćwiczenia: MKB Uwaga: to jest wersja NOWSZA niż ta wydrukowana jest bogatsza o kilka akapitów teorii i kilka uwag w części wykonawczej Część teoretyczna będzie jeszcze poważnie edytowana. Proszę o zgłaszanie tylko uwag merytorycznych, zgłaszanie problemów redakcyjnych nie ma sensu. 9.. Podstawy teoretyczne 9... Definicje podstawowe Ćwiczenia -5 poświęcone były przetwarzaniu sygnałów jednowymiarowych, w których rolę zmiennej niezależnej (indeksu) pełnił czas unormowany. Na codzień często mamy do czynienia z sygnałami więcej niż jednowymiarowymi, w których zmienne niezależne nie muszą mieć i często nie mają sensu czasu. Zapiszmy analogowy sygnał wielowymiarowy jako: x a (t, t 2, t 3,.., t K ) (9.) gdzie t, t 2, t 3,.., t K - zmienne niezależne. W równaniu (9.) oznaczyliśmy je jako t i, ale w poniższych przykładach łatwo odnaleźć zmienne niezależne nie oznaczające czasu. Obraz płaski (np. zdjęcie) ma dwa wymiary przestrzenne. Obraz ruchomy (film) ma dwa wymiary przestrzenne i jeden czasowy. Sygnał z wieloelementowego, liniowego szyku antenowego (albo mikrofonowego) ma jeden wymiar przestrzenny (pozycja elementu odbiorczego) i jeden czasowy. Sygnał z radaru z obrotową anteną ma zasadniczo jeden wymiar czasowy, ale można go podzielić na fragmenty, wewnątrz których czas (zwany także fast time ) jest równoważnikiem odległości jaką przebyło echo, a indeks fragmentu (zawny slow time ) jest równoważnikiem kąta. Tu mogą wystąpic rysunki poglądowe. W ćwiczeniu ograniczymy się do analizy sygnałów dwuwymiarowych: x a (t, t 2 ) (9.2) 3
4 Przetwarzanie obrazów 205-05-5 4:30 dla których zmienne niezależne t, t 2 są współrzędnymi przestrzennymi. Podobnie, jak w przypadku sygnałów jednowymiarowych, dwuwymiarowy sygnał analogowy musi zostać spróbkowany przed dalszym cyfrowym przetwarzaniem a) b) Przykład próbkowania sygnału dwuwymiarowego (obrazu) z różną Rys. 6.. częstotliwością a) częstotliwość wybrana właściwie b) częstotliwość zbyt mała Zgodnie z twierdzeniem o próbkowaniu, częstotliwości próbkowania f s, f s2 (próbkowanie odbywa się w dwóch wymiarach) muszą być co najmniej dwukrotnie wyższe od najwyższych częstotliwości występujących w widmie sygnału analogowego, aby można go było odtworzyć z sygnału spróbkowanego (patrz rys. 6.). W wyniku próbkowania otrzymujemy sygnał dyskretny: x(n, n 2, n 3,..., n K ) (9.3) gdzie n i = t i /T si = t i f si Zauważmy, że w przypadku obrazu (sygnału dwuwymiarowego), zmienne n, n 2 (czyli indeksy piksela obrazu) mają sens odległości (od początku układu współrzędnych) unormowanej względem okresów próbkowania T s, T s2. Zauważ, że okresy próbkowania też mają wymiar odległości a więc jednostką dla nich jest metr. W ogólnym przypadku możliwe jest oczywiście próbkowanie z różnymi okresami próbkowania np. zdarzają się skanery, które mają różne rozdzielczości w pionie i w poziomie choć najczęściej T s = T s2. Widmo sygnału dwuwymiarowego x[n, n 2 ] wyraża się wzorem: X(e jθ, e jθ 2 ) = + n = + n 2 = x(n, n 2 )e jnθ e jnθ 2 (9.4) Wielkości θ k = ω k T sk = 2πf k f sk oznaczają pulsacje unormowane względem częstotliwości próbkowania f s, f s2. Zwróćmy uwagę, że T s, T s2 opisują rozmiary elementów (zwanych niekiedy punktami obrazu) składających się na obraz spróbkowany. Punkt obrazu cyfrowego nie jest więc punktem w sensie rozumienia geometrii, lecz elementem obrazu o określonych wymiarach. Element taki nazywa się pikselem (ang. pixel - picture element -element obrazu). Najczęściej piksel
205-05-5 4:30 Przetwarzanie obrazów 5 ma kształt kwadratu o określonym boku T (gdy Ts = Ts2 = T), lecz zdarzają się również piksele prostokątne (gdy Ts Ts2 ). Wartość piksela ma sens jasności i zapisywana jest cyfrowo w pamięci. Najczęściej stosuje się zapis jasności na 8 bitach (256 poziomów). Przykład 9... Próbkowanie obrazu analogowego. Przyjmijmy, że mamy spróbkować obraz analogowy zarejestrowany w postaci czarno-białej fotografii o wymiarach X=3 cm i Y=9cm. Załóżmy, że chcemy, aby na spróbkowanym obrazie były widoczne elementy fotografii o rozmiarach rzędu 0, mm. Zastanówmy się jak należy dobrać okres próbkowania i jaki rozmiar będzie miał plik cyfrowy, który powstanie po próbkowaniu? Arbitralnie przyjęliśmy, że widmo naszego obrazu ucinamy dla częstotliwości wyższych od f = /0. mm = 0mm, zatem częstotliwość próbkowania (zakładamy jednakowe próbkowanie w dwóch wymiarach) powinna wynieść f s = 20mm, co odpowiada okresowi próbkowania T = 0.05mm. Oznaczając liczbę kolumn i wierszy obrazu cyfrowego jako odpowiednio N i N 2, możemy policzyć, że: N = X / T czyli N = 30 / 0.05 = 2600 pikseli N2 = Y / T czyli N2 = 90 / 0.05 = 800 pikseli Załóżmy, że do reprezentacji jasności każdego piksela użyjemy bajta (8 bitów - 256 poziomów jasności). Rozmiar pliku wyniesie w tym przypadku: R = N N2 = 2600 x 800 = 4680000 bajtów czyli ponad 4,5 MB (megabajta) Zauważmy, że dla okresu próbkowania T = 0.05 mm na każdy centymetr próbkowanego obrazu przypada 200 pikseli co odpowiada ok. 500 punktom na cal (500 dpi - ang. dots per inch - punktów na cal). Nie jest to więc wartość wygórowana. Często spotyka się próbkowanie obrazów z częstotliwością rzędu 000 dpi i większej. Łatwo zauważyć, że rozpatrywana w tym przykładzie fotografia spróbkowana z rozdzielczością 000 dpi zajęłaby ok. 8 MB. Przykład ten wyjaśnia dlaczego taką popularnością cieszą się metody kompresji obrazów. Pamiętać jednak należy, że współczynniki kompresji w większości tych metod silnie zależą od treści obrazu i zwykle wynoszą od kilku do kilkunastu (wyjątkowo kilkudziesięciu). 9..2. Obliczanie widma obrazu cyfrowego Podobnie jak w przypadku sygnałów jednowymiarowych do obliczania widma (6.4) obrazu dyskretnego stosuje się dwuwymiarową dyskretną transformatę Fouriera. Przyjmijmy, że dany jest obraz x(m,n) o rozmiarze M x N pikseli, M-liczba wierszy, N- liczba kolumn. Widmo dyskretne obrazu x (m,n) obliczamy próbkując widmo (6.4) w punktach θ k =2πk/M i θ 2l =2πl/N. Otrzymamy więc: X(k, l) = M m=0 N n=0 x(m, n)e j2πkm/m e j2πln/n (9.5)
6 Przetwarzanie obrazów 205-05-5 4:30 i dla sygnału skończonego w obu wymiarach możemy określić przekształcenie odwrotne: x(m, n) = M MN k=0 N l=0 X(k, l)e j2πkm/m e j2πln/n (9.6) czyli zrekonstruować sygnał za pomocą dwuwymiarowego szeregu Fouriera Widmem amplitudowym dyskretnym określamy ciąg X[k,l] modułów widma obrazu. Zwykle widmo amplitudowe obrazu przedstawia się graficznie jako obraz, w którym jasność poszczególnych punktów określa wartość odpowiednich współczynników widma. Częstotliwość zerowa umieszczana jest zwykle w centrum takiego obrazu, a im dalej od środka, tym bardziej rosną częstotliwości. Uwaga: W przypadku widm obrazów mówimy o częstotliwości przestrzennej, której sens jest nieco inny niż w przypadku sygnałów jednowymiarowych, dla których zmienną niezależną jest czas. Częstotliwość przestrzenną definiuje się jako: liczbę zmian wartości jasności na jednostkowym odcinku dowolnego fragmentu obrazu. [4] Mówimy, że w obrazie występują duże częstotliwości, gdy na jego fragmentach na krótkich odcinkach następują duże zmiany jasności (duże różnice wartości sąsiadujących pikseli). Fragmenty obrazu na których zmiany jasności zachodzą łagodnie (wartości sąsiadujących pikseli różnią się nieznacznie) charakteryzują małe częstotliwości. Aby lepiej zrozumieć sens częstotliwości przestrzennej rozważmy dwie przykładowe linie obrazu (rys. 6.2). a) b) Rys. 6. 2. Linia obrazu o małej a) i dużej częstotliwości b) oraz wykresy wartości jasności pikseli w funkcji odległości (numeru piksela)
205-05-5 4:30 Przetwarzanie obrazów 7 Rys. 6. 3. Kolumna obrazu o małej a) i dużej częstotliwości b) oraz wykresy wartości jasności pikseli w funkcji odległości (numeru piksela) Zauważmy, że w przypadku linii z rys. 6.2a wartości jasności narastają od do 2 na odcinku 8 pikseli, a w przypadku rys. 6.2b taka sama zmiana jasności następuje na odcinku 3 pikseli. Częstotliwość przestrzenna w przypadku b) jest więc większa niż w przypadku a). Łatwo spostrzec, że analogiczne rozumowanie można by przeprowadzić dla kolumn obrazu (rys. 6.3). Należy podkreślić, że rozpatrywany fragment obrazu nie musi być równoległy do żadnej krawędzi obrazu, może to być fragment zorientowany pod dowolnym kątem w stosunku do tych krawędzi. Rozumowanie dotyczące częstotliwości nie ulega zmianie. W przypadku widma obrazów dwuwymiarowych jednakowe częstotliwości przestrzenne tworzą współśrodkowe okręgi o środku w punkcie odpowiadającym częstotliwości zerowej. Występowanie dużych częstotliwości przestrzennych wiąże się z istnieniem w obrazie małych detali (kontrastowych elementów o małych rozmiarach), natomiast małe częstotliwości są powiązane z dużymi i w miarę jednolitymi obszarami (por rys. 6.4). Przykład 9.2.. Widmo obrazu. Rozważmy obraz składający się z poziomych pasów o łagodnie zmieniającej się jasności (rys. 6.4a). Widmo amplitudowe tego obrazu przedstawiono na rys. 6. 4b i 6.4c. Na rysunkach 6.4d i 6.4e przedstawiono widoki widma odpowiednio w kierunku poziomym 6.4d i pionowym 6.4e
8 Przetwarzanie obrazów 205-05-5 4:30 a) b) 2 c) d) X frequency 2500 2500 2000 2000 Magnitude 500 000 500 Magnitude 500 000 e) 0 0.5 0 Y frequency -0.5 - - -0.5 0 X frequency 0.5 500 0 - -0.5 0 0.5 Y frequency Y frequency 2500 2000 500 Magnitude 000 500 Rys. 6. 4. 0 - -0.5 0 0.5 X frequency Obraz pasów poziomych o łagodnie zmieniającej się jasności i jego widmo W widmie amplitudowym wyraźnie widać prążek dla częstotliwości zerowej (środek obrazu widma) i brak wyraźnych prążków dla wyższych częstotliwości. Przykład 9.3. Rozważmy obraz składający się z poziomych ciemnych i jasnych pasów jak na rys. 6.5a. Widmo amplitudowe tego obrazu przedstawiono na rys. 6.5b i rys. 6.5c. Na rysunkach rys. 6.5d i rys.6.5e przedstawiono widoki widma odpowiednio w kierunku poziomym rys.6.5d i pionowym rys.6.5e.
205-05-5 4:30 Przetwarzanie obrazów 9 a) b) 2 c) d) X frequency 2500 2500 2000 2000 Magnitude 500 000 500 Magnitude 500 000 e) 0 0.5 0 Y frequency -0.5 - - -0.5 0 X frequency 0.5 500 0 - -0.5 0 0.5 Y frequency Y frequency 2500 2000 500 Magnitude 000 500 Rys. 6. 5. 0 - -0.5 0 0.5 X frequency Obraz kontrastowych pasów poziomych i jego widmo. W widmie amplitudowym widać prążek dla częstotliwości zerowej (składowa stała) i wyraźne prążki dla częstotliwości równej połowie częstotliwości maksymalnej w pionie. Wyobraźmy sobie przekrój obrazu z rys. 6.5a wzdłuż osi pionowej. Rozważmy kolumnę (linię pionową) tego obrazu i jej widmo.
0 Przetwarzanie obrazów 205-05-5 4:30 40 20 00 80 60 40 20 0 - -0.5 0 0.5 Rys. 6. 6. Fragment linii obrazu i jego widmo. Łatwo spostrzec podobieństwa między widmem kolumny obrazu i widokiem widma z rys. 6.5d. Dla danej kolumny obrazu, wartości pikseli w kolejnych wierszach możemy traktować jako zapis pewnego sygnału jednowymiarowego i analizować ten sygnał (i jego widmo) jednowymiarowo. Uwaga: Obrazy rzeczywiste zwykle charakteryzują się znacznie większym zróżnicowaniem przebiegu widma niż w przytoczonym powyżej przykładzie. Trudniej jest również wyznaczyć tam uprzywilejowany kierunek (poziomy, pionowy). 9..3. Filtracja liniowa Filtracja sygnału jednowymiarowego polega na spleceniu sygnału z odpowiedzią impulsową filtru, tzn.: y[n] = x[n] * h[n] lub po rozpisaniu: + y( n) = x( k) h( n k) k = W przypadku sygnałów dwuwymiarowych splot ma postać: y(m, n) = + i= + j= x(i, j) h(m i, n j) (9.7) gdzie h(m,n) jest odpowiedzią impulsową filtru dwuwymiarowego, definiowanego jako odpowiedź układu (przy zerowych warunkach początkowych) na pobudzenie dwuwymiarową funkcją delta Kroneckera W przypadku obrazów filtracja liniowa ogranicza się w zasadzie do filtrów o skończonej odpowiedzi impulsowej (SOI). Filtracja realizowana jest jako splot odpowiedzi impulsowej filtru z obrazem. Odpowiedź impulsowa filtru bywa nazywana jądrem lub maską filtru. W ćwiczeniu będziemy dla odpowiedzi impulsowej używali nazwy jądro filtru, a termin maska filtru zarezerwujemy do opisu filtracji nieliniowej. Po angielsku używa się też pojęcia point spread function, nawiązując do rozmycia każdego piksela poprzez splot z h(m, m). W praktyce odpowiedź impulsowa filtru (jego jądro) ma w przypadku obrazów skończony wymiar (typowo: 3x3, 5x5, 7x7, rzadziej większy). W takiej sytuacji oczywiście obliczając splot można ograniczyć się do sumowania w skończonym zakresie.
205-05-5 4:30 Przetwarzanie obrazów Warto pamiętać, że skoro wymiary m i n nie mają znaczenia czasu, to nie ma sensu mówić o przyczynowości filtru (ani też jej wymagać). Przeciwnie, zazwyczaj wolelibyśmy, aby filtr nie wprowadzał przesunięcia w obrazie. Dlatego zazwyczaj jądro filtru jest nieprzyczynowe, lecz symetryczne względem punktu (0, 0). Ostatecznie sumowanie w sumie splotowej (9.7) odbywać się będzie w przedziałach symetrycznych względem zera. Charakterystykę amplitudowo-fazową filtru SOI o odpowiedzi impulsowej h(i,j) można wyznaczyć za pomocą dwuwymiarowej dyskretnej transformaty Fouriera. Otrzymamy wówczas: Przykład 9.4. Przyjmijmy, że dany jest obraz x(m,n) i jądro filtru h(i,j), takie że: 3 2 5 6... 3 7 6 2 0... 8 7 0 6 5... - - - x = 4 3 8 5... h = - 8-2 5 2 0... - - - 2 8 2 6 2... 5 3 4 5..................... Obraz przefiltrowany y wyznaczamy jako splot x i h (por. wzór (6.)). np. y(4,2)=8 x (-)+7 x (-)+0 x (-)+4 x (-)+3 x 8+8 x (-)+ x (-)+2 x (-)+5 x (-) = 39 Na rys. 6.7 przedstawiono charakterystykę częstotliwościową filtru o jądrze h - rys 6.7a, jej przekroje wzdłuż osi X i Y- odpowiednio 6.7.b i 6.7.c oraz wynik filtracji 6.7.e obrazu oryginalnego 6.7.d Bywają przypadki sygnałów wielowymiarowych, dla których jeden z wymiarów ma sens czasu i wtedy wracamy do tematu przyczynowości, ale tylko w tym wymiarze.
2 Przetwarzanie obrazów 205-05-5 4:30 a) b) 2 2 0 0 8 8 Magnitude 6 4 6 2 4 0 0.5 0 Y Frequency -0.5 - - -0.5 0 0.5 X Frequency 2 0 - -0.5 0 0.5 c) 2 Rys. 6. 7 Przykład filtracji obrazu za pomocą filtru górnoprzepustowego 0 8 6 4 a) charakterystyka amplitudowa filtru z Przykład 6. 4 b) przekrój charakterystyki wzdłuż osi X, Y=0 c) przekrój charakterystyki wzdłuż osi Y, 2 X=0 d) obraz oryginalny 0 - -0.5 0 0.5 e) obraz po filtracji d) e) 9..3.. Problem krawędzi Zwróćmy uwagę, że przy filtracji punktów znajdujących się na krawędziach obrazu mamy do czynienia z sytuacją, gdy jądro filtru wystaje poza obraz. W jaki sposób w takiej sytuacji wyznaczyć splot? Można przyjąć, że tam gdzie jądro filtru wystaje poza obraz, wartości pikseli są równe zero. Sposób taki prowadzi jednak z reguły do zafałszowania obrazu przefiltrowanego, tym wyraźniejszego im większy jest rząd filtru. Można ten efekt porównać do znanego z przetwarzania sygnałów jednowymiarowych powstawania stanu przejściowego.
205-05-5 4:30 Przetwarzanie obrazów 3 Można przyjąć, że filtracji podlega obraz bez krawędzi, dla których nie można wyznaczyć splotu. Obraz będący wynikiem filtracji jest w tej metodzie mniejszy od obrazu oryginalnego. Odpowiada to odrzuceniu początkowych próbek w przypadku filtracji jednowymiarowej. Można uzupełnić brakujące wartości pikseli np. metodą lustrzanego odbicia względem krawędzi obrazu. Metoda ta pozwala na możliwie niewielkie zafałszowanie wyniku filtracji i zachowanie wymiarów obrazu oryginalnego. 9..3.2. Filtracja obrazów w dziedzinie częstotliwości Jeśli x(m,n) jest obrazem o rozmiarze MxN (M - liczba wierszy N - liczba kolumn), a h(i,j) jest jądrem filtru o rozmiarze IxJ ( I - liczba wierszy J - liczba kolumn) to dyskretna transformata Fouriera obrazu y(m,n) = x(m,n) * h(i,j) (6.4) po filtracji jest opisana zależnością Y(k,l) = X(k,l) H(k,l) (6.5) gdzie X(k,l), H(k,l) - są dyskretnymi transformatami Fouriera odpowiednio obrazu x(m,n) i jądra filtru h(i,j). Filtracji w dziedzinie obrazu (splot) odpowiada zatem mnożenie transformat obrazu i filtru w dziedzinie częstotliwości. Uwaga: Podobnie jak dla sygnałów jednowymiarowych, należy zachować szczególną ostrożność przy obliczaniu splotu liniowego za pomocą dyskretnej transformaty Fouriera, iloczyn (6.5) oznacza bowiem w dziedzinie obrazu splot funkcji okresowych. Filtrację można więc realizować na dwa sposoby: w dziedzinie częstotliwości w dziedzinie obrazu Schematycznie przedstawiono tę odpowiedniość na rys. 6.8. W niektórych przypadkach filtracja w dziedzinie obrazu jest niewygodna i czasochłonna (szczególnie dla wysokich rzędów filtrów). Filtracja w dziedzinie częstotliwości pozwala precyzyjniej modyfikować widmo filtrowanego obrazu. Edycja widma pozwala na usuwanie określonych (i tylko tych) częstotliwości, których nie udałoby się tak prosto wyeliminować stosując filtrację w dziedzinie obrazu, co ilustruje następujący przykład. Przykład 9.5. Przypuśćmy, że obraz jest zakłócony sygnałem okresowym w postaci pasów. Widma obrazu oryginalnego rys.rys. 9.2a i obrazu zakłóconego rys.rys. 9.2.c przedstawiono odpowiednio na rys. rys. 9.2b i rys. 9.2d. Na widmie obrazu zniekształconego wyraźnie widać prążki odpowiadające zniekształceniom okresowym. Możliwe jest ich wyeliminowanie poprzez filtrację w dziedzinie częstotliwości. 9..4. Filtracja nieliniowa. Filtr medianowy Przy filtracji liniowej każda próbka sygnału wyjściowego jest kombinacją liniową próbek wejściowych w otoczeniu badanego punktu. Liniowe przetwarzanie sygnałów jest zazwyczaj opty-
4 Przetwarzanie obrazów 205-05-5 4:30 Rys. 9.: Związek między filtracją w dziedzinie obrazu i dziedzinie częstotliwości malnym 2 rozwiązaniem, gdy zakłócenie jest addytywne i ma rozkład gaussowski. W sytuacjach zakłóceń o innych rozkładach często lepsze rezultaty dają tzw. filtry statystyczne. Działają one podobnie do filtrów liniowych, tj. każdy piksel obrazu wynikowego powstaje na podstawie danego piksela i jego otoczenia w obrazie oryginalnym. Jego wartość jednak nie jest kombinacją liniową pikseli wejsciowych z pikseli wejściowych zostaje wybrany reprezentant zgodnie z regułą, opisaną za pomocą statystyki porządkowej (rank-order statistics). Przykładowo, w filtrze medianowym wybierana jest wartość środkowa posortowanych wartości otoczenia. Filtr taki pozwala na usunięcie szumu z obrazu bez jego rozmywania jest on jednym z najpopularniejszych i najczęściej stosowanych filtrów nieliniowych. W filtrze minimalnym oraz maksymalnym wybierana jest odpowiednio wartość minimalna oraz maksymalna z otoczenia wyznaczanego piksela. Inne możliwości to wybieranie zadanego kwantyla. Medianą dla fragmentu sygnału o długości 2N+ próbek, jest N+ wartość próbki w szeregu powstałym przez uporządkowanie wartości próbek fragmentu sygnału w porządku rosnącym. Filtr medianowy można określić jako nieliniowy filtr dolnoprzepustowy. Bywa on często stosowany w przypadku zakłóceń polegających na pojawianiu się w obrazie wartości pikseli znacznie różniących się od pikseli sąsiadujących np. szum typu sól i pieprz (ang. salt and pepper). 2 W sensie minimalizacji błędu średniokwadratowego.
205-05-5 4:30 Przetwarzanie obrazów 5 a) c) b) d) Rys. 9.2: Widmo obrazu zakłóconego sygnałem okresowym Filtr medianowy w odróżnieniu od liniowych filtrów dolnoprzepustowych bywa nazywany filtrem zachowującym krawędzie (ang. edge-preserving filter). Najłatwiej będzie prześledzić właściwości tego filtru dla przypadku sygnału jednowymiarowego. Rozważmy następujący fragment sygnału, którego kolejnych 9 próbek ma następujące wartości: 3, 8, 5, 6, 5, 2, 4,, 7 (patrz rys. poniżej) Załóżmy, że mamy filtr medianowy 9 rzędu, tzn. długość okna w którym jest widoczny fragment sygnału wynosi 9 próbek. Filtracja polega na uszeregowaniu wartości sygnału znajdujących się w oknie filtru i przypisaniu sygnałowi wyjściowemu wartości środkowej (mediany). Zerowa próbka sygnału wyjściowego będzie miała w rozważanym przykładzie wartość 5. Na rys. 9.4 przedstawiono w poglądowy sposób niektóre właściwości filtracji medianowej. Przedstawione ilustracje ukazują tylko fragmenty sygnałów wejściowych przed pierwszą pokazana próbką należy sobie wyobrazić wiele takich samych próbek. W przypadku silnych zakłóceń impulsowych filtry liniowe np. uśredniające znacznie zmieniają sygnał wyjściowy, w przeciwieństwie do filtru medianowego. Na przedstawionych przykładach widać następujące właściwości filtru medianowego: zachowywanie krawędzi (sygnał schodka )
6 Przetwarzanie obrazów 205-05-5 4:30 Rys. 9.3: Filtr medianowy sposób pracy Rys. 9.4: Filtr medianowy a filtr uśredniający (pokazano filtry 9 rzędu)
205-05-5 4:30 Przetwarzanie obrazów 7 usuwanie zakłóceń krótszych niż połowa rzędu filtru (pojedynczy impuls, podwójny impuls) Rozpatrzmy teraz filtr medianowy dwuwymiarowy. Wyjaśnijmy jego działanie na przykładzie. Załóżmy, że mamy obraz x(m,n) jak na rys. i filtr medianowy o masce h(i,j) 3 2 5 6... 3 7 6 2 0... 8 7 0 6 5... x = 4 3 8 5... h = 2 5 2 0... 2 8 2 6 2... 5 3 4 5..................... Uwaga: Liczby zawarte w masce h nie są współczynnikami filtru! Wyznaczają one jedynie obszar sąsiedztwa piksela, na którym działa filtr nieliniowy. Przyjmuje się, że wartość oznacza, że dany piksel ma być brany pod uwagę podczas filtracji, a 0 - ignorowany. Filtracja medianowa przebiega następująco:. Wartości pikseli z sąsiedztwa piksela filtrowanego określone przez maskę filtru są szeregowane w porządku rosnącym, tu:, 5, 7, 8, 8, 0, 2, 3, 4 2. Pikselowi filtrowanemu jest przypisywana wartość środkowa z tego szeregu, tu: - - - - 8 - - - -...................................................... y =... 8.................................................................................... Szum multiplikatywny Szum multiplikatywny polega na tym, że wartości próbek sygnału mnożone są przez wartość probki szumu. Takie zjawisko może zachodzić, gdy wzmocnienie w torze sygnału zmienia się losowo (np. losowa zmiana czułosci pikseli w kamerze). Również efekty nierównomiernego oświetlenia (światło i cień) są zakłóceniami multiplikatywnymi. Zakłócenia multiplikatywne można usuwać filtrami nieliniowymi, albo przy pomocy technik przetwarzania homomorficznego. W dużym uproszczeniu, przetwarzanie homomorficzne polega na przekształceniu sygnału do postaci, w której operacja zakłócania staje się operacją
8 Przetwarzanie obrazów 205-05-5 4:30 dodawania. W przypadku zakłóceń multiplikatywnych takim przekształceniem jest logarytmowanie. Filtracja homomorficzna obrazu w celu usunięcia zakłóceń multiplikatywnych polega więc na zlogarytmowaniu obrazu 3, dokonaniu odpowiedniej filtracji liniowej, i na koniec powrocie do oryginalnej dziedziny (czyli zastosowaniu funkcji wykładniczej). 9..5. Poprawa kontrastu za pomocą operacji na histogramach Ponieważ rejestrowane cyfrowo obrazy nie zawsze wykorzystują w pełni dostępny zakres dynamiczny (np. 0-255 dla rejestracji 8-bitowej na kanał) często zachodzi potrzeba rozciągnięcia tego zakresu w momencie wyświetlania obrazu na monitorze. Najprostszym sposobem poprawy czytelności obrazu jest przeskalowanie oryginalnych wartości tak, by wypełniały cały zakres dynamiczny. Operację przeskalowania jasności pojedynczego piksela można zapisać następująco: P =( P 0 - P min ) / (P max - P min ) (6.6) gdzie: P P 0 P min - nowa wartość jasności piksela - oryginalna wartość jasności piksela - najmniejsza wartość jasności w obrazie P max - największa wartość jasności w obrazie Metoda ta, jak będzie można się przekonać w trakcie ćwiczenia, ma jednak pewne wady, dlatego stosuje się często wiele innych metod pozwalających na lepszą wizualizację zarejestrowanego obrazu. Metody te, jak np. metoda odchylenia standardowego, wykorzystują informacje statystyczne dla danego obrazu (lub kanału obrazu wielokanałowego). Załóżmy, że wartości jasności pikseli zarejestrowanego obrazu mają rozkład normalny. Wiadomo, że dla takiego rozkładu ok. 90% wszystkich wartości mieści się w odległości dwóch odchyleń standardowych od wartości średniej. Można zatem przy założeniu gaussowskiego rozkładu wartości jasności pikseli dokonać operacji przeskalowania w następujący sposób: P =( P 0 - P low ) / (P high - P low ) (6.7) gdzie: P P 0 P low P high - nowa wartość jasności piksela - oryginalna wartość jasności piksela - dolny próg wartości podlegających przeskalowaniu P low = - 2σ - górny próg wartości podlegających przeskalowaniu P low = + 2σ - wartość średnia jasności pikseli σ - odchylenie standardowe wartości pikseli Istotne jest pytanie, na ile spełnione jest założenie o rozkładzie normalnym wartości pikseli? 3 Na szczęście obraz jest reprezentowany przez liczby dodatnie, inaczej byłby tu problem.
205-05-5 4:30 Przetwarzanie obrazów 9 W przypadku wielu typów obrazów często możemy przyjąć że założenie to jest spełnione, choć zdarzają się oczywiście wyjątki (przykładowo dla obrazów na których obserwujemy na znacznej powierzchni obszary o małym zróżnicowaniu jasności). Teza o gaussowskim rozkładzie wartości pikseli wymaga więc sprawdzenia, którego najczęściej dokonuje się przy użyciu histogramu wyznaczonego dla danego obrazu (lub kanału obrazu). Poniżej, jako przykład przedstawiono histogramy dla wybranego obrazu satelitarnego zarejestrowanego cyfrowo. Warto zwrócić uwagę, że kształt histogramów przypomina (w pewnym przybliżeniu) przebieg funkcji opisujących rozkład normalny. a) b) Rys. 6. 0. Obraz satelitarny a) i jego histogram b) 9..6. Wykrywanie prostych transformacja Hough'a Jedną z najpopularniejszych metod detekcji prostych jest transformacja Hougha. Niech piksele obrazu odpowiadają próbkom dwuwymiarowego sygnału w układzie kartezjańskim. Prostą w takim układzie reprezentują dwa niezależne parametry. W transformacji Hougha są to: odległość prostej od początku układu współrzędnych ρ oraz kąt nachylenia odcinka reprezentującego tę odległość θ. Przez każdy punkt o współrzędnych x oraz y przechodzi nieskończenie wiele prostych o równaniu: ρ = x cos(θ) + y sin(θ). (9.8) Transformacja Hougha pojedynczego punktu obrazu polega na znalezieniu w zbiorze parametrów wszystkich par, opisujących mozliwe proste przechodzące przez dany punkt. Obrazem punktu jest więc zbiór ułożony wzdłuż sinusoidy. Wykrywanie linii przy pomocy transformacji Hougha opiera się na procedurze głosowania (można ją też interpretować jako rzutowanie wsteczne (backprojection)). Każdy piksel w obrazie wejściowym, którego wartość jest większa od zera, dodaje wartość swej amplitudy do wszystkich punktów ze zbioru reprezentującego ten piksel w przestrzeni parametrów. Gdy przerzutujemy do przestrzeni parametrów zbiór pikseli ułożony w obrazie wzdłuż prostej, otrzymamy w przestrzeni parametrów zbiór sinusoid, przecinających się w punkcie od-
20 Przetwarzanie obrazów 205-05-5 4:30 powiadającym parametrom tej prostej. W punkcie przecięcia więc zgromadzą się głosy od wszystkich pikseli z prostej. Po przerzutowaniu całego analizowanego obrazu, w przestrzeni parametrów otrzyma się obraz, którego maksima odpowiadają prostym zawartym w oryginalnym obrazie. 9..7. Wstęp do kompresji obrazu Zasadniczym elementem kompresji sygnału (obraz jest sygnałem dwuwymiarowym) jest rozłożenie (dekompozycja) obrazu na składowe i znalezienie składowych, które nie są istotne (są mało istotne) do odtworzenia obrazu. Następnie współczynniki składowych nieistotnych zastępuje się zerami lub kwantuje z małą dokładnością. Tak otrzymany zestaw współczynników łatwo poddaje się kodowaniu Huffmanna. Taka kompresja jest kompresją stratną po wyzerowaniu składowych mało istotnych otrzymujemy inny obraz (mamy jednak nadzieję, że różnice są niewielkie i mało zauważalne). Stratność wynika z operacji zerowania mało istotnych składowych etap kodowania Hufmanna jest bezstratny. W tej części ćwiczenia będziemy analizować tylko etap dekompozycji obrazu i zerowania części składowych. Upraszczając ocenę stopnia kompresji, w zadaniu tym przyjmiemy, że zerowane składowe zajmują w zakodowanym obrazie pomijalną ilość informacji, natomiast pozostające składowe są kodowane z pełną dokładnością. Praktycznie oznacza to, że za stopień kompresji uznamy stosunek liczby składowych pozostawionych do wszystkich składowych obrazu 4. Jedną z miar błędu dla kompresji stratnej jest błąd średniokwadratowy, zdefiniowany w następujący sposób : e rms = N M N i=0 M j=0 [F (i, j) F (i, j)] 2. (9.9) gdzie F to obraz oryginalny (o rozmiarze N M), a F odtworzony z zapisu skompresowanego. Możliwe jest również zdefiniowanie średniokwadratowego stosunku sygnału do szumu : SNR ms = N i=0 N M i=0 j=0 [F (i, j)] 2 M (9.0) j=0 [F (i, j) F (i, j)] 2 W ocenie jakości obrazów stosuje się też stosunek maksimum sygnału do szumu (PSNR peak signal to noise ratio). Warto zauważyć, że wszystkie trzy wymienione miary mierzą dokładnie tę samą wielkość błędu, różniąc się tylko sposobem skalowania go do zakresu dynamiki obrazu. 4 W rzeczywiście używanych standardach składowe o różnej istotności kwantuje się z różną precyzją, i wtedy nie jest to takie czarno-białe stopień kompresji można oceniać dopiero na podstawie rozmiaru pliku wynikowego, i często nie jest on dokładnie równy założonemu z góry.
205-05-5 4:30 Przetwarzanie obrazów 2 Rys. 9.5: Poglądowe przedstawienie dekompozycji widmowej przy transformacie falkowej 9..8. Transformacja falkowa Transformacja falkowa 5 jest sposobem dekompozycji sygnału stosowanym np. w standardzie kompresji JPEG2000. Sygnał dekomponujemy tu na składowe, będące przesuniętymi i przeskalowanymi w czasie kopiami funkcji-matki, spełniającej pewne założenia matematyczne. (tu rysunek przykładowej falki i jej kopii przeskalowanej i symbolicznie przesuniętej) (tu można w kilku prostych ruchach pokazać, że dekompozycja na przesunięte składowe to w istocie splot czyli filtracja) Ze względu na efektywność obliczeń, dyskretną transformatę falkową oblicza się najczęściej kolejno dla różnych wartości parametru skali, ułozonych w postępie geometrycznym (, /2, /4,...). Na każdym takim etapie sygnał zawierający N próbek rozkładamy na N/2 składowych szybkozmiennych i N/2 składowych wolnozmiennych. Składowe szybkozmienne zazwyczaj nie podlegają dalszej dekompozycji, składowe wolnozmienne (na następnym etapie skalowania) rozkładamy ponownie na N/4 składowych wolnozmiennych (względem aktualnie analizowanej skali), i N/4 szybkozmiennych. Uzyskuje się w ten sposób dekompozycję sygnału na podpasma o zmiennej szerokości. Ilustruje to (w jednym wymiarze) poglądowo rys. 9.5. W przypadku obrazu N N podział na pierwszym etapie następuje na cztery grupy po N 2 /4 składowych (patrz rys. 9.6) wolnozmienne (LO na rysunku) i szybkozmienne w 3 kierunkach pionowym (V), poziomym (H) i ukośnym (HI). 5 Niektórzy twierdzą, że wynalazł ją Falkow, ale w języku angielskim nazywa się ją wavelet transform (wave fala), co dostarcza silnego kontrargumentu w tej sprawie.
22 Przetwarzanie obrazów 205-05-5 4:30 Rys. 9.6: Poglądowe przedstawienie czterech grup składowych przy transformacie falkowej obrazu 9.2. Zadania do pracy własnej studenta Podobne zadania mogą znaleźć się na wejściówce. Nie dotyczy to zadań oznaczonych tu jako trudne. ) Przetwarzamy na bieżąco (w czasie rzeczywistym) sygnał dwuwymiarowy z anteny wieloelementowej x(m, n), gdzie indeks m odpowiada numerowi anteny, a indeks n numerowi próbki czasowej. Czy możemy zastosować filtr nieprzyczynowy? (Uwaga, pytanie podchwytliwe!) 6 2) Oblicz dwuwymiarową DTF obrazu o rozmiarze 6 6 pikseli: a) całkowicie czarnego (wypełnionego zerami) b) całkowicie białego (wypełnionego jedynkami) c) zawierającego tylko jeden biały piksel w pozycji (0, 0) d) zawierającego osiem pionowych białych pasów i osiem pionowych czarnych pasów e) to samo, tylko pasy poziome (zakładamy, że czarny oznaczamy zerem, biały jedynką). Wskazówka: Zauważ, że 2D-DTF można obliczać kolejno najpierw poziomo, potem pionowo (lub odwrotnie). 3) Jakiemu obrazowi bedzie odpowiadać widmo o jednej niezerowej próbce w punkcie (0, 0)? Przyjmij wartość próbki taką, aby uzyskać w obrazie tylko czerń lub biel (uwaga na wspołczynnik skalujący w ODTF). 4) Obraz (sygnał 2D) o rozmiarze 6 6 pikseli zawierający tylko jeden biały piksel w pozycji (8, 8) przefiltrowano filtrem liniowym o odpowiedzi impulsowej lp2=[ ;... 2 ;... ]; 6 Przyczynowość można badać oddzielnie dla każdego wymiaru!
205-05-5 4:30 Przetwarzanie obrazów 23 Zakładając, że jest to filtr nieprzyczynowy (o zerowej fazie): a) zastanów się, która próbka odpowiedzi impulsowej filtru jest próbką h(0, 0) b) oblicz obraz po filtracji (czyli sygnał wyjściowy) c) uzasadnij, że rzeczywiście charakterystyka fazowa jest zerowa 5) Oblicz ręcznie wynik filtracji obrazu o rozmiarze 6 6 pikseli filtrem wykrywającym krawędzie: a) Obraz czarny z jednym białym pikselem, filtr (nieprzyczynowy) edg=[0 0 0;... - 0;... 0 0 0]; b) Obraz z jedną pionową białą linią, filtr jak wyżej c) (wymyśl sobie inne kombinacje) 6) Narysuj linię prostą w obrazie, której odpowiada podany punkt w przeciwdziedzinie transformacji Hough'a: a) (0, 0) b) (0, π/2) c) (0, π/4) d) (0, 0) e) (wymyśl jeszcze kilka) 7) Przefiltruj podany sygnał filtrem medianowym rzędu 5 (dla uproszczenia rozpatrzymy sygnały jednowymiarowe): a) skok jednostkowy δ(n) b) impuls jednostkowy u(n) c) skok jednostkowy z dodanym impulsem: u(n) + δ(n 2) d) skok jednostkowy z dziurką: u(n) δ(n 3) 9.3. Eksperymenty do wykonania w laboratorium 9.3.. Widmo sygnału dwuwymiarowego Uwaga: w prezentowanym przykładowym kodzie staramy się konsekwentnie pisać nazwy zmiennych małymi literami, jeśli oznaczają one sygnał, a wielkimi jeśli oznaczają widmo. 9.3... Widma prostych obrazów Utwórz obraz o jednolitej jasności o rozmiarze 32 6 pikseli» img=ones(32,6); Wyświetl obraz, oblicz i wyświetl jego widmo» imagesc(img)» IMG=fft2(img);
24 Przetwarzanie obrazów 205-05-5 4:30 Zanotuj Odpowiedz» figure;imagesc(abs(img)); Zanotuj rozmiar tablicy z transformatą, wartość maksimum widma i lokalizację maksimum (jako parę indeksów tablicy) Wskazówka: Użyj polecenia colorbar zorientujesz się wtedy jaka jest skala wartości Łatwiej interpretuje się widmo, gdy jest ono wyswietlone symetrycznie (zero częstotliwości w środku). Użyj polecenia fftshift, które zamienia miejscami dwie połówki wektora lub cztery ćwiartki macierzy.» imagesc(fftshift(abs(img))); Wskazówka: fftshift użyty drugi raz przywróci oryginalny układ ćwiartek widma (będzie to potrzebne, gdy w nastepnych zadaniach będziesz odtwarzać sygnał z jego widma). Odpowiedz na pytanie: Jakie wielkości reprezentowane są na osiach? Jak powinny być wyskalowane osie (podaj jedną z kilku możliwości)? Rys. 9.7: Poziome linie o dużej częstotliwości. Rys. 9.8: Poziome linie o małej częstotliwości. Rys. 9.9: Szachownica o dużej częstotliwości. Rys. 9.0: Szachownica o niskiej częstotliwości. Wygeneruj obrazy podobne do przedstawionych na rys. 9.7 rys. 9.0. Dokładne parametry obrazów wybierz zgodnie z numerem stanowiska z tabeli 9.. W porozumieniu z prowadzącym można obrazy takie wczytać fotografując za pomocą kamery tablice kartonowe dostępne w laboratorium. Róznice parametrów linii między stanowiskami niech wtedy wynikają z fotografowania z różnej odległości oczywiście nie uda się dokładnie wybrać ich z tabeli.
205-05-5 4:30 Przetwarzanie obrazów 25 Tabela 9. Nr stan. 2 3 4 5 6 7 8 9 0 2 3 Liczba wierszy w obrazie M 32 64 48 6 32 64 60 40 24 32 48 64 6 Liczba kolumn w obrazie N 6 32 48 48 32 24 60 48 64 6 36 48 32 Rozmiar szerokiego pasa/kratki [px] 4 8 8 4 8 6 5 8 6 8 6 8 4 Rozmiar wąskiego pasa/kratki [px] 2 3 2 4 4 3 4 3 4 2 Jest wiele sprytnych sposobów utworzenia takich obrazów jedną z możliwości jest przygotowanie wzorca, który bedzie powielony odpowiednią liczbę razy:» wzor=[0 0; 0 0; ; ] Aby uzyskać obraz 8 6, wzorzec 4 2 powielimy 2 razy w pionie i 8 razy w poziomie» IleKopiiPionowo=2; IleKopiiPoziomo=8; Matlab dostarcza specjalne polecenie do powielania macierzy:» img2=repmat(wzor, IleKopiiPionowo, IleKopiiPoziomo); Innymi eleganckimi sposobami będzie: przemnożenie dwóch odpowiednio uformowanych wektorów, albo też utworzenie zerowej macierzy i wypełnienie jedynkami sprytnie zaindeksowanych fragmentów. Dla każdego z 4 przypadków oblicz i obejrzyj widmo dwuwymiarowego sygnału wyświetl je w układzie symetrycznym (zero pośrodku czyli po użyciufftshift). Aby zrozumieć, co oznaczają kolory użyj colorbar. Odpowiedz na pytania: Jakie składowe widoczne są na widmie? Opisz je używając pojęcia częstotliwości przestrzennej (cz. pozioma, cz. pionowa). Czym rożni się widmo sygnału pasiastego od widma sygnału kraciastego? Jakiemu sygnałowi (obrazowi) odpowiadają częstotliwości reprezentowane na skraju wykresu? Odpowiedzi możesz udzielić słowami, albo poprzez naszkicowanie czterech widm i zaznaczenie na nich istotnych elementów z krótkim podpisem. Obraz szachownicy o małej częstotliwości zachowaj w zmiennej o wybranej nazwie bedzie jeszcze potrzebny. Odpowiedz 9.3..2. Widmo obrazu rzeczywistego Przygotowanie obrazu do przetwarzania W zadaniu tym zaleca się pracę na obrazie własnoręcznie uzyskanym z kamery. Tematyka zdjęcia może być dowolna, natomiast zalecane jest, aby studenci na sąsiadujących stanowiskach wybrali różne tematy (twarz, widok sali, scenka na biurku, widok za oknem 7...) i nastepnie porównywali między sobą wyniki. Jeśli nie ma możliwości pozyskania ciekawszego obrazu można posłużyć się obrazem znajdującym się w katalogu ćwiczenia Lenna.png. 7 Widok za oknem najwygodniej będzie użyć studentowi siedzącemu koło okna. Okno, jeśli brudne, trzeba otworzyć (nie tłuc!)
26 Przetwarzanie obrazów 205-05-5 4:30 Wczytaj obraz do zmiennej środowiska Matlab. Dla kamery Hercules można posłużyć się jej firmowym oprogramowaniem: Po podłączeniu kamery należy wywołać program WSE (Hercules Webcam Station Evolution), ustawić ostrość kręcąc ręcznie obiektywem, i zapisać zdjęcie na dysku (np. na pulpicie). Obrazy wczytujemy poleceniem imread ewentualnie przez przeciągnięcie pliku myszką na okno workspace Matlab'a (nazwa zmiennej bedzie identyczna z nazwą pliku, bez rozszerzenia).» myimagergb=imread('sciezkadopliku.png'); Dowolny typ kamery można obsłużyć przy pomocy drivera vcapg po podłączenii kamery wystarczy wywołać z poziomu Matlab'a kod:» myimagergb=getsnapshot(); Jeżeli driver się zawiesił można go zresetować poprzez wywołanie getsnapshot();. Jeśli obraz jest barwny, otrzymasz trójwymiarową tablicę M N 3 z trzema kanałami barw R, G, B; wydobądź jeden z kanałów wczytanego obrazu lub transformuj go do odcieni szarości procedurą rgb2gray, aby uzyskać tablicę M N.» myimagegray=rgb2gray(myimagergb); Obrazy typu JPG i PNG wczytywane są w postaci z całkowitoliczbową skalą barwy lub jasności (uint8). Aby uniknąć ograniczeń przy obliczeniach, przerzutuj obraz na typ liczb zmiennoprzecinkowych:» myimage=double(myimagegray); Wskazówka: W następnych zadaniach przy każdym wczytaniu nowego obrazu trzeba będzie powtórzyć powyższe operacje. Wyświetl obraz w skali szarości (gray zamiast domyślnego mapowania wartości pikseli w skalę fałszywych barw jet):» imagesc(myimage);colormap(gray);colorbar; Odpowiedz Widmo obrazu Oblicz i obejrzyj widmo rzeczywistego dwuwymiarowego sygnału. Pamiętaj o użyciu fftshift, żeby częstotliwości zerowe były wyświetlane na środku widma. Odpowiedz na pytanie: Jakiej częstotliwości odpowiada dominująca próbka widma? Jakiej składowej odpowiada ona w badanym obrazie? Widmo wyświetlone w skali liniowej jest zazwyczaj nieczytelne zawiera jedną dominującą próbkę, przy której pozostałe są niewidoczne. Wyświetl widmo w skali logarytmicznej (wyskaluj je w db). Zawsze przy użyciu miary decybelowej należy zastanowić się, czy mamy do czynienia z amplitudą (lub stosunkiem amplitud) czy też z mocą (lub kwadratem amplitudy albo wariancją, ew. ich stosunkiem); w pierwszym przypadku obliczamy 20 log 0 (x), w drugim 0 log 0 (x). Odpowiedz Wskazówka: W Matlabie istnieje funkcja db, zwracająca domyślnie 20*log0(x). Odpowiedz na pytanie: Czym różni się widmo badanego obrazu rzeczywistego od widm obrazów z rys. 9.7 rys. 9.0?
205-05-5 4:30 Przetwarzanie obrazów 27 9.3.2. Filtrowanie sygnałów dwuwymiarowych Filtry dolnoprzepustowe przepuszczają tylko składowe obrazu o niskiej częstotliwości. Składowe o wyższej częstotliwości są tłumione. Przykłady dwuwymiarowych filtrów dolnoprzepustowych : lp=[,, ;...,, ;...,, ]; lp2=[,, ;..., 2, ;...,, ]; lp3=[, 2, ;... 2, 4, 2;..., 2, ]; lp4=[,, 2,, ;..., 2, 4, 2, ;... 2, 4, 8, 4, 2;..., 2, 4, 2, ;...,, 2,, ]; Filtry górnoprzepustowe przepuszczają tylko składowe obrazu o wysokiej częstotliwości. Składowe o niższych częstotliwościach są tłumione. Przykłady dwuwymiarowych filtrów górnoprzepustowych : hp=[ -, -, -;... -, 9, -;... -, -, -]; hp3=[, -2, ;... -2, 5, -2;..., -2, ]; hp2=[ 0, -, 0;... -, 5, -;... 0, -, 0]; Piksele obrazu zasadniczo reprezentowane są przez liczby dodatnie. Wskutek odejmowania liczb dodatnich mogą jednak powstać wartości mniejsze od zera. Decyzja, jak postąpić w takiej sytuacji (obciąć wartości ujemne, przesunąć wszystkie wartości w górę, zastąpić wartością bezwzgledną,...) powinna zależeć od interpretacji danych w konretnym przypadku. Jeśli obraz wyświetlany jest funkcją imagesc, jest on automatycznie przesuwany i skalowany co do wartości tak, aby najmniejszej wartości odpowiadał czarny piksel, a największej biały. Filtry wykrywające krawędzie polegają na odejmowaniu przesuniętych kopii obrazu. Liczba tych kopii i przesunięcie zależy od konkretnego filtru. Matematycznie jest to przybliżone obliczanie wartości pochodnej cząstkowej w danym kierunku. Przykładowe filtry do wykrywania krawędzi:
28 Przetwarzanie obrazów 205-05-5 4:30 edg=[0, 0, 0;... -,, 0;... 0, 0, 0]; edg2=[-, 0, 0;... 0,, 0;... 0, 0, 0]; edg3=[-,, ;... -, -2, ;... -,, ]; edg5=[0, -, 0;... -, 4, -;... 0, -, 0]; edg6=[-, 0, -;... 0, 4, 0;... -, 0, -]; edg7=[, 2, ;... 0, 0, 0;... -, -2, -]; edg4=[-, -, ;... -, -2, ;...,, ]; Jeżeli zależy nam na wykryciu krawędzi niezależnie od ich kierunku, można zastosować kombinację wyników filtracji w wielu kierunkach np. sumować moduły (albo kwadraty) wyników filtracji. 9.3.2.. Filtracja obrazu Tabela 9.2 Nr stan. 2 3 4 5 6 7 8 9 0 2 3 Filtr dolnoprzepustowy 2 3 4 2 3 4 2 3 4 Filtr górnoprzepustowy 2 3 2 3 2 3 2 3 Filtr krawędziowy 2 3 4 5 6 7 2 3 4 5 6 Zanotuj Odpowiedz Dla wczytanego w poprzednim zadaniu obrazu wykonaj filtrację, wykorzystując filtry przedstawione w części wstępnej do tego zadania, wybrane wg. tabeli 9.2 dla Twojego stanowiska. Dla każdego filtru zanotuj jego współczynniki. Dwuwymiarową filtrację wykonuje się używając polecenia filter2(h,x). Polecenie filter2 w Matlabie realizuje filtrację filtrem nieprzyczynowym zero opóźnienia odpowiada środkowemu elementowi macierzy współczynników filtru. Wyświetl obraz po filtracji, znajdź jego wartość maksymalną i minimalną. Wskazówka: max(max(x)) i min(min(x)) pomogą Ci znaleźć maksimum/minimum w dwywymiarowej macierzy x. Odpowiedz na pytania: (dla każdego z 3 filtrów) Opisz słowami efekt filtracji (możesz, lecz nie musisz naszkicować w protokole wynik filtracji). Jak zmieniła się maksymalna wartość próbek obrazu? Pamiętaj o uzyciu colorbar, bo imagesc skaluje obraz. Jak można by zmodyfikować współczynniki filtru, aby uniknąć drastycznej zmiany zakresu wartości próbek?
205-05-5 4:30 Przetwarzanie obrazów 29 Dla jednego wybranego filtru wykonaj filtrację metodą mnożenia transformaty obrazu i transformaty odpowiedzi impulsowej filtru. Porównaj oba wyniki. Wskazówka: Do mnożenia potrzebujesz obu transformat w tym samym rozmiarze. Gdy odpowiedż impulsowa filtru jest krótsza niż sygnał, musisz ją uzupełnić zerami do rozmiaru M N (zero-padding), wywołując funkcję fft2z dodatkowymi parametrami:» X=fft2(x,M,N); Zanotuj zauważone różnice. Zmierz czasy wykonania filtracji dla tych dwóch sposobów, powtarzając je w pętli (dla poprawy dokładności pomiaru czasu) np. po 0 razy. Pomiar wykonaj dla badanego obrazu rzeczywistego oraz dla zapamiętanej szachownicy z zadania 9.3.. zobaczysz jak czasy wykonania zależą od rozmiaru obrazu. Zanotuj te czasy oraz zapisz wybrany do testu filtr. Wskazówka: Użyj funkcji tic() do uruchomienia stopera i toc() do jego zatrzymania. Odpowiedz na pytanie: Czy wyniki filtracji w obu metodach różnią się, czy też są jednakowe? Czy znajdujesz zastosowania gdzie jedna bądź druga metoda jest lepsza? Zanotuj Zanotuj Odpowiedz 9.3.3. Wykrywanie krawędzi i detekcja prostych W praktyce automatycznego rozpoznawanie elementów obrazów np. w układzie wzroku robota poruszającego się w przestrzeni często konieczne jest rozróżnianie kształtów. Podstawową operacją wykorzystywaną w tym celu jest identyfikacja odcinków prostych, stanowiących krawędzie kształtów. W tym zadaniu użyjemy filtrów potrafiących wykrywać (wzmacniać) krawędzie, poznanych w poprzedniej części ćwiczenia, a następnie zastosujemy transformację Hough'a (patrz rozdział 9..6) do odnalezienia odcinków prostych w tak wzmocnionym obrazie. 9.3.3.. Wykrywanie krawędzi. Miniprojekt W ramach miniprojektu przygotujemy obraz do wykrywania linii, wzmacniając wyrazistość krawędzi, a następnie zastosujemy gotowe procedury MATLABa R implementujące: transformację Hougha (hough()), wizualizację wyniku (plot_hough()), wykrywanie maksimów w przekształconym obrazie (houghpeaks()), odnajdowanie w oryginalnym obrazie odcinków, odpowiadających odnalezionym maksimom (houghlines()), i na koniec narysujemy odnalezione odcinki na oryginalnym obrazie (plot_lines()). Procedura środowiska Matlab hough, która implementuje transformację Hougha wymaga na wejściu macierzy binarnej (wypełnionej zerami i jedynkami), a więc obrazu dwubarwnego (piksele czarne i białe). W poniższym kodzie założono, że w zmiennej BW jest obraz oryginalny sprogowany do postaci binarnej (0-czarny, -biały). Sprawdź, jak wygląda transformacja pojedynczego punktu i prostej: przygotuj obraz binarny z jednym jasnym punktem (a potem - z jedną jasną prostą pionową) Oblicz i wyświetl transformatę» [H,T,R] = hough(bw,'rhoresolution',0.5,'theta',-90:0.5:89.5);» plot_hough(h,t,r);
30 Przetwarzanie obrazów 205-05-5 4:30. Rys. 9.: Przykład obrazu przygotowanego do wywołania na nim funkcji hough Zanotuj Zanotuj Zanotuj parametry użytej linii (ρ i θ) i lokalizację odpowiadającego im punktu w transformacie. Wczytaj obraz, który będzie zawierał linie: zrób zdjęcie odpowiedniej sceny, ewentualnie jeśli nie ma możliwości pozyskania indywidualnego zdjęcia skorzystaj ze zdjęcia w katalogu ćwiczenia 'bariera.jpg'. Jeśli zdjęcie jest kolorowe, wybierz jeden z kanałów lub przetwórz je na czarno-białe (jak w 9.3..2). Korzystając z wiedzy na temat filtrów detekujących krawędzie przetwórz obraz, i następnie wykonaj operację progowania do wymaganej macierzy binarnej (przykład rys. 9.). Wskazówka: Konstrukcja Ab=boolean(A>0.5) zwróci macierz binarną z wartościami dla indeksów, dla których wyrażenie logiczne jest prawdziwe. Obejrzyj wynik przetwarzania jeśli nie jest poprawny, skoryguj sposób przetwarzania figure() imagesc(bw); colormap(gray); colorbar Zanotuj parametry użytego filtru (oraz ewentualne inne parametry przetwarzania obrazu). Gdy już uzyskasz macierz BW w której pozostały głównie linie, to wywołaj następujące polecenia w celu detekcji linii i ich wyświetlenia [H,T,R] = hough(bw,'rhoresolution',0.5,'theta',-90:0.5:89.5); P = houghpeaks(h,9,'threshold',ceil(0.3*max(h(:)))); % współczynnik 0.3 w powyższej linii %należy dobrać empirycznie L = houghlines(bw,t,r,p,'fillgap',5,'minlength',7);
205-05-5 4:30 Przetwarzanie obrazów 3 figure(2) plot_hough(h,t,r); figure(3) imshow(bw); hold on plot_lines(l); hold off Odpowiedz na pytania: Czy wszystkie linie, które ludzkei oko dostrzega na obrazie zostały wykryte procedurą Hough'a? Czy może pojawiły się fałszywe linie? Spróbuj skomentować skuteczność tej metody wykrywania linii w obrazie. Odpowiedz 9.3.4. Usuwanie szumów W tym zadaniu porównamy wyniki filtracji liniowej i nieliniowej (konkretnie medianowej) w zastosowaniu do usuwania szumów różnego typu. Filtracje medianową obrazu w środowisku Matlab można wykonać poleceniem medfilt2. Natomiast filtry oparte na innych statystykach porządkowych (w tym filtr maksymalny i minimalny) mogą być zrealizowane poleceniem ordfilt2. 9.3.4.. Usuwanie addytywnego szumu typu sól i pieprz Do wczytanego obrazu image dodaj szum addytywny poleceniem:» NoisyImage=double(imnoise(uint8(image),'salt & pepper',0.2)); Uwaga: Konwersje typów wynikają z założeń poczynionych przez programistów MATLABa R, że obrazy będą typu uint8, i naszej potrzeby operowania na wartościach double. Zmierz średniokwadratowy stosunek sygnału do szumu dla otrzymanego obrazu (patrz ). Zanotuj otrzymaną wartość. Wskazówka: Sumę kwadratów elementów macierzy (występującą we wzorze (9.9) i (9.0)) można oczywiście liczyć w pętli for, ale taka pętla jest nieefektywna z punktu widzenia zarówno programisty, jak i komputera. Znacznie szybciej obliczy się ją poprzez sum(a(:).^2) zwróć uwagę na rozwijanie macierzy do wektora (:) i na podnoszenie do kwadratu element po elemencie. Natomiast zapis A(:)'*A(:) będzie poprawny także dla liczb zespolonych, i na dokładkę bardzo elegancki 8. Spróbuj usunąć zakłócenie używając zarówno filtrów dolnoprzepustowych jak i filtru medianowego. Zmierz średniokwadratowy stosunek sygnału do szumu dla otrzymanych obrazów. Zanotuj otrzymane wartości i wykorzystane filtry. Odpowiedz na pytanie: Który filtr lepiej usuwa szumy addytywne? Zanotuj Zanotuj 8 W zagadnieniach matematycznych elegancja jest pojęciem oznaczającym mniej więcej uniwersalność i prostota zapisu. Odpowiedz
32 Przetwarzanie obrazów 205-05-5 4:30 >> image_mask(0.5,6,6) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> Rys. 9.2: Wynik działania polecenia image mask 9.3.4.2. Usuwanie szumu multiplikatywnego Zanotuj Odpowiedz Szum multiplikatywny polega na tym, że wartości próbek sygnału mnożone są przez wartość probki szumu. Takie zjawisko może zachodzić, gdy wzmocnienie w torze sygnału zmienia się losowo (np. losowa zmiana czułosci pikseli w kamerze). Również efekty nierównomiernego oświetlenia (światło i cień) są zakłóceniami multiplikatywnymi. Do wczytanego obrazu dodaj szum multiplikatywny poleceniem:» MulNoisyImage=double(imnoise(uint8(image),'speckle')); Spróbuj usunąć zakłócenie używając zarówno filtrów dolnoprzepustowych jak i filtru medianowego. Zmierz średniokwadratowy stosunek sygnału do szumu dla otrzymanych obrazów. Zanotuj otrzymane wartości i wykorzystane filtry. Wskazówka: Szum multiplikatywny lepiej usuwać po zlogarytmowaniu obrazu wtedy szum multiplikatywny zmienia się w szum addytywny 9. Nie zapomnij przed wyświetleniem dokonać operacji odwrotnej do logarytmowania! Odpowiedz na pytanie: Który filtr lepiej usuwa szumy multiplikatywne? 9.3.5. Proste metody kompresji obrazu 9.3.5.. Kompresja obrazu przez obcinanie widma. Miniprojekt Dla wczytanego obrazu wyznacz widmo. Wybierz współczynnik kompresji k z przedziału 0 do. Dla wybranej wartości współczynnika kompresji wytnij ze środka widma koło, tak by stosunek jego pola powierzchni do pola powierzchni całego widma wynosił k (zakładamy nadal, że środek widma odpowiada składowej stałej pamietaj o uzyciu fftshift). Kołową (lub eliptyczną dla M N) maskę zerojedynkową o promieniu r i rozmiarach M, N można uzyskać za pomocą funkcji image_mask(r,m,n);, gdzie r (0, ). Funkcja ta została napisana na potrzeby tego ćwiczenia. Sprawdź, czy rzeczywiście pozostawiłeś w masce k M N jedynek.» sum(maska(:))/numel(maska) Odtwórz obraz z uciętego widma. Wyznacz średniokwadratowy stosunek sygnału do szumu SNR ms. Wyraź go w decybe- 9 Tę technikę nazywa się w literaturze przetwarzaniem homomorficznym.
205-05-5 4:30 Przetwarzanie obrazów 33 lach 0. Powtórz procedurę dla trzech różnych różnych wartości współczynnika kompresji k i zanotuj wyniki. Ekstra Możliwe jest uruchomienie procedury w pętli, zebranie informacji do wektora i wyświetlenie wyniku w postaci wykresu SNR ms (k). Na wykresie znajdź i zanotuj wartość współczynnika kompresji, dla której stosunek sygnału do szumu wynosi w przybliżeniu KdB, gdzie K = 0 + 2 numerstanowiska. Odpowiedz na pytanie: Jak można by ocenić błąd kompresji bez odtwarzania obrazu? Wskazówka: Przypomnij sobie twierdzenie Parsevala Zanotuj Zanotuj Odpowiedz 9.3.5.2. Extra Kompresja obrazu z wykorzystaniem transformacji falkowej Przygotuj filtry odpowiadające falce Daubechies stopnia 8» [LoD, HiD, LoR, HiR] = DAUBECHIES(2*8); Dokonaj dekompozycji» [wv idx] = DWT2(img,, LoD, HiD); Wyświetl zdekomponowany obraz» imagesc(wv); Wskazówka: Obraz zdekomponowany może być wyraźniejszy, jeśli wyświetlimy jego moduł. Zrekonstruuj obraz idealnie oraz po usunięciu składowych szybkozmiennych:» img_idrec = IDWT2(wv, idx, LoR, HiR);» wvc=zeros(size(wv));» wvc(:end/2,:end/2)=wv(:end/2,:end/2);» img_crec = IDWT2(wvc, idx, LoR, HiR); Wyświetl oba obrazy Oblicz i zanotuj średniokwadratowy stosunek sygnału do szumu po rekonstrukcji. Zanotuj 9.3.5.3. Ekstra Miniprojekt wyznaczenie progu dla zadanego stopnia kompresji Analizując histogram wartości współczynników, dla zadanego stopnia kompresji wyznacz wartość progową lambda, poniżej której współczynniki bedą zerowane. Wyzeruj te współczynniki» ch(abs(ch) <= lambda) = 0.0;» cv(abs(cv) <= lambda) = 0.0;» cd(abs(cd) <= lambda) = 0.0; a następnie odtwórz obraz. Oblicz i zanotuj średniokwadratowy stosunek sygnału do szumu po rekonstrukcji. Przeanalizuj oddzielnie histogramy wartości współczynników w 4 grupach składowych; spróbuj zastosować oddzielne progi dla każdej grupy. Sprawdź, na ile zmniejszyło to błąd rekonstrukcji. Jeżeli nie uda się uzyskać zaadanego stopnia kompresji, użyj dekompozycji w dwóch lub więcej skalach (Kscales=2).» [wv idx] = DWT2(img, Kscales, LoD, HiD); Zanotuj 0 Zastanów się, jakiego wyrażenia użyć: 20 log 0 (x), czy 0 log 0 (x)
34 Przetwarzanie obrazów 205-05-5 4:30 Odpowiedz 9.3.6. Zakres dynamiczny obrazów 9.3.6.. Rozciąganie zakresu dynamicznego poszczególnych kanałów Dla wczytanego kolorowego obrazu wyznacz histogramy dla poszczególnych kanałów. Można do tego wykorzystać gotowe narzędzie w postaci polecenia imhist. Wskazówka: Dobrze jest wykreślić wszystkie histogramy na jednym oknie wykorzystując polecenie subplot. Rozciągnij zakres dynamiczny poszczególnych kanałów obrazu tak by wykorzystany był ich cały zakres dynamiczny. Wyświetl poprawiony obraz. Porównaj z obrazem oryginalnym. Odpowiedz na pytanie: Opisz swoje wrażenia po rozciągnięciu zakresu dynamicznego obrazu. Czy taki zabieg ma wpływ na wierność odtworzenia kolorów?