|
Detekcja brzegów obszarów pozwala na identyfikację położenia
obiektów w obrazie. Z tego też względu metody detekcji brzegów
należą do najważniejszych narzędzi w przetwarzaniu i analizie
obrazów. |
| |
| Czym jest krawędź? |
Zdefiniowanie krawędzi wbrew pozorom nie jest takie proste gdyż,
krawędzie na obrazie mogą występować pod różnymi postaciami.
Najczęściej krawędź identyfikujemy z przejściem od obszaru ciemnego
do jasnego lub na odwrót, dlatego też często możemy natknąć się na
definicje krawędzi jako granice pomiędzy dwoma obszarami o różnych
jasnościach.
Najłatwiejsze do identyfikacji jest gwałtowne, skokowe przejście
(jak w obrazach binarnych), jednak zazwyczaj przejście to bywa mniej
lub bardziej rozmyte. Inny rodzaj krawędzi to lokalne rozjaśnienie
lub ściemnienie. Można też spotkać krawędzie wynikające ze zmiany
wzoru (tekstury) tworzonego przez punkt obrazu.
Każdy z wymienionych rodzajów krawędzi wymaga nieco innego sposobu
detekcji. Ponieważ jednak najczęściej spotykamy krawędzie takie, jak
na rysunku poniżej, to właśnie im poświęcam najwięcej uwagi. |
|

|
Jednoznaczne ustalenie, gdzie przebiega krawędź jest trudne z powodu
różnic w „ostrości” przejścia oraz w poziomach szarości
poszczególnych cząstek. Większość metod detekcji brzegów
bazuje na wyznaczeniu lokalnych pochodnych obrazu (tzw. operatorów
gradientowych). |
|

|
| |
| Wykorzystanie różniczkowania do detekcji krawędzi. |
Jednym z najprostszych sposobów detekcji krawędzi jest wykorzystanie
w tym celu pierwszej pochodnej funkcji opisującej zmiany stopni
szarości obrazu (rysunek poniżej). Po zróżniczkowaniu sygnału
wystarczy wykorzystać odpowiedni próg detekcji podczas binaryzacji i
mamy już obraz krawędzi. Dodatkową zaletą tego rozwiązania jest
fakt, że dla bardziej rozmytych krawędzi (łagodniejsze przejście)
maksimum pierwszej pochodnej ma niższą wartość. Jeszcze bardziej
jednoznaczne wyniki daje zastosowanie drugiej pochodnej. W tym
przypadku krawędź odpowiada wprost miejscu zerowemu drugiej
pochodnej. |
|

|
Oczywiście na obrazie komputerowym trudno jest wyznaczyć pochodną.
Jednakże wystarczająco dobrym przybliżeniem pochodnej są lokalne
gradienty. |
| |
Gradienty. |
Podstawowe własności operatorów gradientowych:
- pierwsza pochodna obrazu może być wykorzystana do detekcji brzegu
oraz jego kierunku,
- punkt zmiany znaku drugiej pochodnej, tj. jej miejsce zerowe (ang.
zero crossing) obrazu może służyć do wyznaczania miejsca wystąpienia
brzegu.
Wadą operatorów gradientowych jest uwypuklanie zakłóceń impulsowych
w obrazach (może to powodować pogorszenie jakości obrazu lub
detekcje fałszywych brzegów)
Gradient obrazu I(x, y) definiuje się w dwóch prostopadłych
kierunkach x i y jako: |
|

|
W przypadku obrazu traktowanego jako tablica liczb - gradient może być
w przybliżeniu wyznaczony jako różnica wartości dwóch sąsiednich
punktów. Wykonuje się to praktycznie dzięki zastosowaniu tzw.
operatorów Robertsa, które pozwalają na wyznaczenie gradientów w
czterech różnych kierunkach. |
|
|
Operatory Robertsa |
|

|
Przedstawione operatory (lub inaczej maski) używa się w ten sposób,
że macierz porównuje się z analizowanym obrazem (środkowy punkt
macierzy odpowiada analizowanemu punktowi), a następnie oblicza się
nową wartość środkowego punktu, która jest sumą wartości
odpowiednich punktów obrazu pomnożonych przez wartości
poszczególnych komórek matrycy. |
|

|
W stosowaniu masek, występuje „efekt brzegowy” – polega to na tym,
że analizowany pierwszy i ostatni wiersz oraz pierwsza i ostatnia
kolumna punktów obrazu nie posiadają 8 sąsiadów, przez co nie mogą
być równoważnie analizowane. Jednym z rozwiązań tego problemu jest
pominięcie w analizie tych wierszy i kolumn, w efekcie obraz po
filtracji jest mniejszy.
Dodatkowo, na podstawie analizy wartości składowych można wyznaczyć
amplitudę i kąt gradientu. Należy zwrócić uwagę, że w kierunku
detekcji gradientu otrzymujemy zarówno wartości dodatnie, jak i
ujemne, co ma znaczenie przy tworzeniu wynikowego obrazu, gdzie
wartości kolorów składowych RGB muszą mieścić się w dziedzinie
0-255. Dodatkowo, obraz po obróbce operatorem gradientowym ma
niecodzienny, nieraz trudny do akceptacji wygląd.
Niestety, operator Robertsa jest bardzo czuły na lokalne zakłócenia
obrazu, czyli szumy i z powodów znacznych błędów nie może być
używany do analizy obrazów o dużym poziomie szumów. |
|

|
| |
Maski Prewitta i Sobela |
Kolejnymi przykładami masek do detekcji krawędzi są macierze
Prewitta i Sobela (podane kolejno w konfiguracji dla 00 i 900) |
|


|
Także operatory Prewitt’a i Sobel’a używa się w ten sam sposób, co
macierze Roberts’a. We wdrażaniu jako algorytmy, mają one te same
wady co maski Roberts’a czy wspominany efekt brzegowy.
Przedstawione poniżej przykłady działania omówionych operatorów:
Robertsa, Sobela i Prewitta pokazują pewne różnice w wykrytych
krawędziach w zależności od wykorzystanego filtru. |
|


|
| |
Laplasjan |
Laplasjan dla obrazu traktowanego jako funkcja dwóch zmiennych
I(x,y)
można zdefiniować jako: |
|

|
Laplasjan jest izotropowym operatorem różniczkowym drugiego stopnia.
Jego przybliżeniem w przypadku dyskretnego obrazu będzie,
analogiczne jak dla wcześniej opisanych gradientów, suma różnic
wartości poszczególnych punktów i punktu centralnego. Ponieważ
różnica jest obliczana dla czterech kierunków, to przy zapisie
odpowiedniej macierzy punkt centralny musi być pomnożony przez
cztery: |
|

|
Taki zapis nie jest w istocie izotropowy, gdyż kierunek: pionowy i
poziomy są wyraźnie uprzywilejowane. Można to poprawić poprzez
uwzględnienie pozostałych czterech kierunków: |
|

|
|

|
W najprostszym przypadku detekcja krawędzi wykorzystująca Laplasjan
jest oparta na binaryzacji obrazu poddanego temu przekształceniu.
Rozwiązanie to jest niekorzystne, gdyż laplasjan, będący operatorem
wykorzystującym drugą pochodną, jest szczególnie czuły na szum.
Korzystniejsze jest wykorzystanie wspomnianego już przejścia przez
zero, czyli detekcja punktów, w których laplasjan zmienia znak.
Najłatwiej można to zrobić w następujący sposób:
- Wykonać laplasjan.
- Przeprowadzić binaryzację otrzymanego obrazu z progiem dolnym o
wartości 0 (w ten sposób wykryjemy wszystkie punkty o wartościach
większych lub równych 0).
- Przeprowadzić detekcje brzegu obrazu binarnego – w ten sposób
wychwycimy te punkty, które miały wartość równą lub bardzo bliską 0.
Jedną z głównych zalet tego rozwiązania jest fakt, że otrzymane
krawędzie są cienkie (mają grubość jednego punktu obrazu). Wpływ
szumów można w pewnym stopniu ograniczyć, jeżeli wykorzysta się
macierz o większym rozmiarze, obejmującą większy obszar obrazu.
Poniżej zamieszczam macierz do wyznaczania laplasjanu o rozmiarze
5x4 i 7x7 punktów: |
|

|
Niezależnie od metody detekcji krawędzi, jeżeli wymaga ona
binaryzacji jako ostatniego kroku postępowania, sposób
przeprowadzania tej binaryzacji ma znaczny wpływ na ostateczny wynik
detekcji krawędzi. Dość często wykorzystuje się binaryzację z
histerezą, która pozwala osiągnąć kompromis pomiędzy skutecznością
wykrywania krawędzi a eliminacją szumów.
Przeprowadzanie poprawnej
detekcji krawędzi jest znacznie utrudnione po zastosowaniu
niektórych filtrów, zwłaszcza wyostrzających. Zatem wynik
przekształcenia jest nieco paradoksalny: nasze oko odbiera obraz
jako wyraźniejszy, natomiast dla komputera jest on bardziej
zakłócony. Można, rzecz jasna, usunąć znaczną część szumów, ale
prowadzi to z powrotem do rozmycia szczegółów. Tak, więc niemal
zawsze musimy dokonywać kompromisowych wyborów, tak by balansować
między precyzją detekcji i eliminacją szumów. Co gorsza, każdy obraz
jest inny i nie ma jednego, uniwersalnego sposobu detekcji krawędzi,
który byłby równie skuteczny we wszystkich przypadkach. |
| |