Przetwarzanie obrazów - Politechnika Warszawska

Transkrypt

Przetwarzanie obrazów - Politechnika Warszawska
Laboratorium Cyfrowego Przetwarzania Sygnałów
Preskrypt do v.2014Z
ćwiczenie nr 9 z 10
(ale w kolejności wykonania – siódme!!!)
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: [email protected] tel. 5441
Warszawa, 8 grudnia 2014, 19:54
Spis treści
9
Przetwarzanie obrazów
9.1 Podstawy teoretyczne . . . . . . . . . . . . . . . . . . . . . .
9.1.1 Definicje podstawowe . . . . . . . . . . . . . . . . .
9.1.2 Obliczanie widma obrazu cyfrowego . . . . . . . . . .
9.1.3 Filtracja liniowa . . . . . . . . . . . . . . . . . . . .
9.1.4 Filtracja nieliniowa. Filtr medianowy . . . . . . . . .
9.1.5 Poprawa kontrastu za pomocą operacji na histogramach
9.1.6 Wykrywanie prostych – transformacja Hough'a . . . .
9.1.7 Wstęp do kompresji obrazu . . . . . . . . . . . . . . .
9.1.8 Transformacja falkowa . . . . . . . . . . . . . . . . .
9.2 Zadania do pracy własnej studenta . . . . . . . . . . . . . . .
9.3 Eksperymenty do wykonania w laboratorium . . . . . . . . .
9.3.1 Widmo sygnału dwuwymiarowego . . . . . . . . . . .
9.3.2 Filtrowanie sygnałów dwuwymiarowych . . . . . . . .
9.3.3 Wykrywanie krawędzi i detekcja prostych . . . . . . .
9.3.4 Usuwanie szumów . . . . . . . . . . . . . . . . . . .
9.3.5 Proste metody kompresji obrazu . . . . . . . . . . . .
9.3.6 Zakres dynamiczny obrazów . . . . . . . . . . . . . .
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
10
13
18
19
20
21
22
23
23
26
29
31
32
34
Ćwiczenie 9
Przetwarzanie obrazów
Opiekun ćwiczenia: MKB
Uwaga: to jest wersja NOWSZA niż ta wydrukowana – jest bogatsza o kilka akapitów
teorii
Część teoretyczna będzie jeszcze poważnie edytowana. Proszę o zgłaszanie tylko
uwag merytorycznych, zgłaszanie problemów redakcyjnych nie ma sensu.
9.1. Podstawy teoretyczne
9.1.1. Definicje podstawowe
Ćwiczenia 1-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:
xa (t1 , t2 , t3 , .., tK )
(9.1)
gdzie t1 , t2 , t3 , .., tK - zmienne niezależne.
W równaniu (9.1) oznaczyliśmy je jako ti , 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 mikorofonowego) – 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:
xa (t1 , t2 )
3
(9.2)
4
Przetwarzanie obrazów
2014-12-08 19:54
dla których zmienne niezależne t1 , t2 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ą
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 fs1 , fs2 (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.1).
W wyniku próbkowania otrzymujemy sygnał dyskretny:
Rys. 6. 1.
x(n1 , n2 , n3 , . . . , nK )
(9.3)
gdzie ni = ti /Tsi = ti · fsi
Zauważmy, że w przypadku obrazu (sygnału dwuwymiarowego), zmienne n1 , n2 mają sens
odległości (od początku układu współrzędnych) unormowanej względem okresów próbkowania Ts1 , Ts2 . 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.
Widmo sygnału dwuwymiarowego x[n1 , n2 ] wyraża się wzorem:
X(ejθ1 , ejθ2 ) =
+∞
X
+∞
X
x(n1 , n2 )e−jnθ1 e−jnθ2
(9.4)
n1 =−∞ n2 =−∞
k
oznaczają pulsacje unormowane względem częstotliwości
Wielkości θk = ωk · Tsk = 2πf
fsk
próbkowania fs1 , fs2 .
Zwróćmy uwagę, że T s1 , 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 ma kształt kwadratu o określonym boku T (gdy T s1 = T s2 = T ), lecz zdarzają się
również piksele prostokątne (gdy T s1 T s2 ).
Przetwarzanie obrazów
2014-12-08 19:54
5
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.1. . Próbkowanie obrazu analogowego. Przyjmijmy, że mamy spróbkować obraz
analogowy zarejestrowany w postaci czarno-białej fotografii o wymiarach X=13 cm i Y=9cm.
Załóżmy, że chcemy, aby na spróbkowanym obrazie były widoczne elementy fotografii o rozmiarach rzędu 0,1 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 = 1/0.1 mm−1 = 10mm−1 , zatem częstotliwość próbkowania (zakładamy jednakowe próbkowanie w dwóch wymiarach) powinna wynieść fs = 20mm−1 , co odpowiada okresowi próbkowania T = 0.05mm.
Oznaczając liczbę kolumn i wierszy obrazu cyfrowego jako odpowiednio N1 i N2 , możemy
policzyć, że:
N1 = X / T czyli N1 = 130 / 0.05 = 2600 pikseli
N2 = Y / T czyli N2 = 90 / 0.05 = 1800 pikseli
Załóżmy, że do reprezentacji jasności każdego piksela użyjemy 1 bajta (8 bitów - 256
poziomów jasności).
Rozmiar pliku wyniesie w tym przypadku:
R = N1 N2 = 2600 x 1800 = 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 1000 dpi i większej.
Łatwo zauważyć, że rozpatrywana w tym przykładzie fotografia spróbkowana z rozdzielczością 1000 dpi zajęłaby ok. 18 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.1.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, Nliczba kolumn.
Widmo dyskretne obrazu x (m,n) obliczamy próbkując widmo (6.4) w punktach θ1k =2πk/M
i θ2l =2πl/N. Otrzymamy więc:
X(k, l) =
M
−1 N
−1
X
X
m=0
x(m, n)e−j2πkm/M e−j2πln/N
(9.5)
n=0
i – dla sygnału skończonego w obu wymiarach – możemy określić przekształcenie odwrotne:
6
Przetwarzanie obrazów
x(m, n) =
−1 N
−1
X
1 MX
X(k , l)ej2πkm/M ej2πln/N
M N k=0 l=0
2014-12-08 19:54
(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)
Rys. 6. 2.
b)
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)
2014-12-08 19:54
Rys. 6. 3.
Przetwarzanie obrazów
7
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 1 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
a)
2014-12-08 19:54
b)
1
2
1
1
1
1
1
1
1
1
d)
c)
X frequency
2500
2500
2000
2000
1500
Magnitude
Magnitude
1500
1000
1000
500
0
1
0.5
1
500
0.5
0
0
-0.5
-1
Y frequency
-0.5
-1
0
-1
X frequency
-0.5
0
Y frequency
0.5
1
e)
Y frequency
2500
2000
Magnitude
1500
1000
500
0
-1
Rys. 6. 4.
-0.5
0
X frequency
0.5
1
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.
Przetwarzanie obrazów
2014-12-08 19:54
a)
9
b)
1
2
1
1
1
1
1
1
1
1
d)
c)
X frequency
2500
2500
2000
2000
1500
Magnitude
Magnitude
1500
1000
1000
500
0
1
0.5
1
500
0.5
0
0
-0.5
-1
Y frequency
-0.5
-1
0
-1
X frequency
-0.5
0
Y frequency
0.5
1
e)
Y frequency
2500
2000
Magnitude
1500
1000
500
0
-1
Rys. 6. 5.
-0.5
0
X frequency
0.5
1
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.
10
Przetwarzanie obrazów
2014-12-08 19:54
140
120
100
80
60
40
20
0
-1
-0.5
0
0.5
1
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.1.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) =
+∞
X
+∞
X
x(i, j) · h(m − i, n − j)
(9.7)
i=−∞ j=−∞
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.
Przetwarzanie obrazów
2014-12-08 19:54
11
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ć)1 . 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:
x=
1
3
2
5
6
...
3
7
6
12
10
...
8
7
10
6
5
...
14
13
8
5
1
...
1
12
5
2
0
...
2
8
2
6
2
...
5
...
1
...
3
...
4
...
5
...
...
h=
-1
-1
-1
-1
8
-1
-1
-1
-1
...
Obraz przefiltrowany y wyznaczamy jako splot x i h (por. wzór (6.11)).
np. y(4,2)=8 x (-1)+7 x (-1)+10 x (-1)+14 x (-1)+13 x 8+8 x (-1)+1 x (-1)+12 x (-1)+5 x
(-1) = 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
1
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.
12
Przetwarzanie obrazów
a)
2014-12-08 19:54
b)
12
12
10
Magnitude
10
8
8
6
6
4
2
4
0
1
2
0.5
1
0.5
0
-0.5
-1
Y Frequency
0
-1
0
-0.5
-1
-0.5
0
0.5
1
X Frequency
c)
12
10
8
6
4
2
0
-1
-0.5
0
d)
0.5
1
Rys. 6. 7 Przykład filtracji obrazu za pomocą filtru górnoprzepustowego
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,
X=0
d) obraz oryginalny
e) obraz po filtracji
e)
9.1.3.1. 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.
2014-12-08 19:54
Przetwarzanie obrazów
13
– 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.1.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.14)
po filtracji jest opisana zależnością
Y (k,l) = X(k,l) H(k,l)
(6.15)
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.15) 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.1.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-
14
Przetwarzanie obrazów
2014-12-08 19:54
Rys. 9.1: Związek między filtracją w dziedzinie obrazu i dziedzinie częstotliwości
malnym2 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+1 próbek, jest N+1 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.
2014-12-08 19:54
Przetwarzanie obrazów
a)
c)
b)
d)
15
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, 1, 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”)
16
Przetwarzanie obrazów
2014-12-08 19:54
Rys. 9.3: Filtr medianowy – sposób pracy
Rys. 9.4: Filtr medianowy a filtr uśredniający (pokazano filtry 9 rzędu)
Przetwarzanie obrazów
2014-12-08 19:54
17
– 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)
x=
1
3
2
5
6
...
3
7
6
12
10
...
8
7
10
6
5
...
14
13
8
5
1
...
1
12
5
2
0
...
2
8
2
6
2
...
5
...
1
...
3
...
4
...
5
...
...
h=
1
1
1
1
1
1
1
1
1
...
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ść “1”
oznacza, że dany piksel ma być brany pod uwagę podczas filtracji, a “0” - ignorowany.
Filtracja medianowa przebiega następująco:
1. Wartości pikseli z sąsiedztwa piksela filtrowanego określone przez maskę filtru są szeregowane w porządku rosnącym, tu:
1, 5, 7, 8, 8, 10, 12, 13, 14
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ą
18
Przetwarzanie obrazów
2014-12-08 19:54
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 obrazu3 , dokonaniu odpowiedniej filtracji liniowej, i na koniec – powrocie
do oryginalnej dziedziny (czyli zastosowaniu funkcji wykładniczej).
9.1.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 =( P0 - Pmin ) / (Pmax - Pmin )
gdzie:
P
P0
- nowa wartość jasności piksela
Pmin
- najmniejsza wartość jasności w obrazie
(6.16)
- oryginalna wartość jasności piksela
- największa wartość jasności w obrazie
Pmax
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 =( P0 - Plow ) / (Phigh - Plow )
gdzie:
(6.17)
P
P0
- nowa wartość jasności piksela
Plow
- dolny próg wartości podlegających przeskalowaniu Plow = - 2σ
Phigh
- górny próg wartości podlegających przeskalowaniu Plow = + 2σ
- oryginalna wartość jasności piksela
- 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.
2014-12-08 19:54
Przetwarzanie obrazów
19
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. 10.
Obraz satelitarny a) i jego histogram b)
9.1.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
2014-12-08 19:54
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.1.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 obrazu4 .
Jedną z miar błędu dla kompresji stratnej jest błąd średniokwadratowy, zdefiniowany
w następujący sposób :
erms =
v
u
u
u
t
−1
−1 M
X
1 NX
[F (i, j) − F ′ (i, j)]2 .
N · M i=0 j=0
(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 :
PN −1 PM −1
i=0
SN Rms = PN −1 P
M −1
i=0
j=0
[F ′ (i, j)]2
[F (i, j) − F ′ (i, j)]2
j=0
(9.10)
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.
2014-12-08 19:54
Przetwarzanie obrazów
21
Rys. 9.5: Poglądowe przedstawienie dekompozycji widmowej przy transformacie falkowej
9.1.8. Transformacja falkowa
Transformacja falkowa5 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 (1,
1/2, 1/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
2
N /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
2014-12-08 19:54
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”.
1) 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 16 × 16 pikseli:
a)
b)
c)
d)
e)
całkowicie czarnego (wypełnionego zerami)
całkowicie białego (wypełnionego jedynkami)
zawierającego tylko jeden biały piksel w pozycji (0, 0)
zawierającego osiem pionowych białych pasów i osiem pionowych czarnych pasów
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 16 × 16 pikseli zawierający tylko jeden biały piksel w
pozycji (8, 8) przefiltrowano filtrem liniowym o odpowiedzi impulsowej
lp2=[ 1 1 1;...
1 2 1;...
1 1 1];
6
Przyczynowość można badać oddzielnie dla każdego wymiaru!
Przetwarzanie obrazów
2014-12-08 19:54
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 16 × 16 pikseli filtrem wykrywającym
krawędzie:
a) Obraz czarny z jednym białym pikselem, filtr (nieprzyczynowy)
edg1=[0
-1
0
0
1
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)
b)
c)
d)
e)
(0, 0)
(0, π/2)
(0, −π/4)
(10, 0)
(wymyśl jeszcze kilka)
7) Przefiltruj podany sygnał filtrem medianowym rzędu 5 (dla uproszczenia rozpatrzymy sygnały jednowymiarowe):
a)
b)
c)
d)
skok jednostkowy δ(n)
impuls jednostkowy u(n)
skok jednostkowy z dodanym impulsem: u(n) + δ(n − 2)
skok jednostkowy z dziurką: u(n) − δ(n − 3)
9.3. Eksperymenty do wykonania w laboratorium
9.3.1. Widmo sygnału dwuwymiarowego
9.3.1.1. Widma prostych obrazów
Utwórz obraz o jednolitej jasności o rozmiarze 32 × 16 pikseli
» img1=ones(32,16);
Wyświetl obraz, oblicz i wyświetl jego widmo
» imagesc(img1)
» IMG1=fft2(img1);
» figure;imagesc(abs(IMG1));
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
Zanotuj
24
Odpowiedz
Przetwarzanie obrazów
2014-12-08 19:54
Ł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(IMG1)));
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.10: Szachownica o niskiej częstotliwości.
Wygeneruj obrazy podobne do przedstawionych na rys. 9.7 – rys. 9.10. Dokładne parametry
obrazów wybierz zgodnie z numerem stanowiska z tabeli 9.1.
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; 1 1; 1 1]
Aby uzyskać obraz 8 × 16, 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);
Przetwarzanie obrazów
2014-12-08 19:54
25
Tabela 9.1
Nr stan.
1
2
3
4
5
6
7
8
9
10
11
12
13
Liczba wierszy w obrazie M
32
64
48
16
32
64
45
40
24
32
48
64
16
Liczba kolumn w obrazie N
16
32
48
48
32
24
60
48
64
16
36
48
32
Rozmiar szerokiego pasa/kratki [px]
4
8
8
4
8
16
5
8
6
8
6
8
4
Rozmiar wąskiego pasa/kratki [px]
1
2
3
2
4
4
3
1
4
1
3
4
2
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.
9.3.1.2. Widmo obrazu rzeczywistego
Przygotowanie obrazu do przetwarzania
W zadaniu tym zaleca się pracę na obrazie własnoręcznie uzyskanym z kamery. 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). 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 oknem7 . . . ) 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.
Wczytaj obraz do zmiennej środowiska Matlab. 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');
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 .
7
Widok za oknem najwygodniej będzie użyć studentowi siedzącemu koło okna. Okno, jeśli brudne, trzeba
otworzyć (nie tłuc!)
Odpowiedz
26
Przetwarzanie obrazów
2014-12-08 19:54
» 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;
Widmo obrazu
Odpowiedz
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 · log10 (x), w drugim 10 · log10 (x).
Odpowiedz
Wskazówka: W Matlabie istnieje funkcja dB, zwracająca domyślnie 20*log10(x).
Odpowiedz na pytanie: Czym różni się widmo badanego obrazu rzeczywistego od widm
obrazów z rys. 9.7 – rys. 9.10?
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 :
lp1=[ 1, 1, 1;...
1, 1, 1;...
1, 1, 1];
lp2=[ 1, 1, 1;...
1, 2, 1;...
1, 1, 1];
lp3=[ 1, 2, 1;...
2, 4, 2;...
1, 2, 1];
Przetwarzanie obrazów
2014-12-08 19:54
lp4=[ 1,
1,
2,
1,
1,
1,
2,
4,
2,
1,
2,
4,
8,
4,
2,
1,
2,
4,
2,
1,
1;...
1;...
2;...
1;...
1];
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 :
hp1=[ -1, -1, -1;...
-1, 9, -1;...
-1, -1, -1];
hp2=[
0, -1, 0;...
-1, 5, -1;...
0, -1, 0];
hp3=[
1, -2, 1;...
-2, 5, -2;...
1, -2, 1];
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:
edg1=[0,
-1,
0,
0,
1,
0,
edg2=[-1,
0,
0,
0;...
0;...
0];
0,
1,
0,
edg3=[-1, 1,
-1, -2,
-1, 1,
0;...
0;...
0];
1;...
1;...
1];
27
28
Przetwarzanie obrazów
edg4=[-1, -1,
-1, -2,
1, 1,
2014-12-08 19:54
1;...
1;...
1];
edg5=[0, -1, 0;...
-1, 4, -1;...
0, -1, 0];
edg6=[-1,
0,
-1,
0, -1;...
4, 0;...
0, -1];
edg7=[1, 2, 1;...
0, 0, 0;...
-1, -2, -1];
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.1. Filtracja obrazu
Tabela 9.2
Zanotuj
Odpowiedz
Nr stan.
1
2
3
4
5
6
7
8
9
10
11
12
13
Filtr dolnoprzepustowy
1
2
3
4
1
2
3
4
1
2
3
4
1
Filtr górnoprzepustowy
1
2
3
1
2
3
1
2
3
1
2
3
1
Filtr krawędziowy
1
2
3
4
5
6
7
1
2
3
4
5
6
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.
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żnaby zmodyfikować współczynniki filtru, aby uniknąć drastycznej zmiany zakresu wartości próbek?
2014-12-08 19:54
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 10 razy. Pomiar wykonaj dla badanego obrazu
rzeczywistego oraz dla zapamiętanej szachownicy z zadania 9.3.1.1 – 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?
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.1.6) do odnalezienia odcinków prostych w tak wzmocnionym obrazie.
9.3.3.1. Wykrywanie krawędzi. Miniprojekt
W ramach miniprojektu przygotujemy obraz do wykrywania linii, wzmacniając wyrazistość
R implementujące:
krawędzi, a następnie zastosujemy gotowe procedury MATLABa⃝
– 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, 1-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);
Zanotuj
Zanotuj
Odpowiedz
30
Przetwarzanie obrazów
2014-12-08 19:54
.
Rys. 9.11: Przykład obrazu przygotowanego do wywołania na nim funkcji hough
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.1.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.11).
Wskazówka: Konstrukcja Ab=boolean(A>0.5) zwróci macierz binarną z wartościami 1
dla indeksów, dla których wyrażenie logiczne jest prawdziwe.
Obejrzyj wynik przetwarzania – jeśli nie jest poprawny, skoryguj sposób przetwarzania
figure(1)
imagesc(BW); colormap(gray); colorbar
Zanotuj
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);
2014-12-08 19:54
Przetwarzanie obrazów
31
figure(2)
plot_hough(H,T,R);
figure(3)
imshow(BW);
hold on
plot_lines(L);
hold off
Odpowiedz
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.
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.1. 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:
R że
Konwersje typów wynikają z założeń poczynionych przez programistów MATLABa⃝,
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.10))
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 elegancki8 .
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 ?
8
W zagadnieniach matematycznych “elegancja” jest pojęciem oznaczającym mniej więcej “uniwersalność i
prostota zapisu”.
Zanotuj
Zanotuj
Odpowiedz
32
Przetwarzanie obrazów
>> image_mask(0.5,16,16)
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
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2014-12-08 19:54
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.12: 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 addytywny9 . 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.1. Kompresja obrazu przez obcinanie widma. Miniprojekt
Dla wczytanego obrazu wyznacz widmo.
Wybierz współczynnik kompresji k z przedziału 0 do 1. 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, 1). 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 SN Rms . Wyraź go w decybe9
Tę technikę nazywa się w literaturze przetwarzaniem homomorficznym.
2014-12-08 19:54
Przetwarzanie obrazów
33
lach10 .
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 SN Rms (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 = 10 + 2 · numerstanowiska.
Odpowiedz na pytanie: Jak możnaby 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, 1, 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(1:end/2,1:end/2)=wv(1:end/2,1: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);
10
Zastanów się, jakiego wyrażenia użyć: 20 · log10 (x), czy 10 · log10 (x)
Zanotuj
34
Przetwarzanie obrazów
2014-12-08 19:54
9.3.6. Zakres dynamiczny obrazów
9.3.6.1. Rozciąganie zakresu dynamicznego poszczególnych kanałów
Odpowiedz
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?