Detekcja krawędzi

 

przygotował
Cezary Aniśko
cezary@anisko.net

 
 
        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.
 
 

  literatura (źródła)


 powrót do góry