ANALIZA I PRZETWARZANIE OBRAZÓW Implementacja filtru Canny ego Autor: Katarzyna Piotrowicz Kraków,2015-06-11
Spis treści 1. Wstęp... 1 2. Implementacja... 2 3. Przykłady... 3 Porównanie wykrytych krawędzi dla różnych wartości progów... 3 Porównanie operatora Sobela i Previtta.... 7 Wprowadzenie szumów... 7 Detekcja krawędzi filtrem Canny ego a operatorem Sobela.... 9 Podsumowanie... 9 Kraków,2015-06-11
1. Wstęp 1 Tematem projektu była implementacja filtru Canny ego. Algorytm ten pozwala na detekcję krawędzi na obrazie. Jest to algorytm wieloetapowy. Pierwszym etapem jest przefiltrowanie obrazu filtrem Gaussa. Operacja ta ma na celu rozmycie obrazu wejściowego, a przez to redukcję drobnych szumów. Ważnymi parametrem filtru Gaussa jest odchylenie standardowe. Na jego podstawie można za pomocą wzoru: ( ) wyliczyć współczynniki maski filtru. Operacja filtrowania, polega na wykonaniu splotu macierzy obrazu z wyliczoną maską filtru Gaussa. Kolejnym etapem jest szukanie pochodnych kierunkowych, czyli gradientu korzystając z operatorów krawędziowych, np. operatora Sobela. Zwraca on pierwszą pochodną zarówno dla kierunku poziomego jak i pionowego. Następnie końcowy gradient można wyliczyć jako średnią geometryczną gradientu poziomego i pionowego korzystając ze wzoru: Następnie określany jest kierunek krawędzi na obrazie. Można do tego wykorzystać obliczone pochodne kierunkowe, czyli oraz. Dla każdego punktu obrazu obliczono kąt między wektorem gradientu a kierunkiem wierszy. Symbolicznie można zapisać to następująco: ( ) Czwarty etap polega na wygaszeniu pikseli, które nie mają maksymalnej wartości natężenia. Dzięki temu krawędzie będą odpowiednio wyraźne, oraz zostanie zredukowany efekt rozmazania krawędzi. W tym celu należy policzyć gradient z prawej i lewej strony krzywej. Dla każdego piksela krzywej wyznacza się otoczenie złożone z 8 pikseli. Ponieważ znamy już orientację krzywej wybieramy te piksele otoczenia, przez które przechodzi prosta prostopadła do krawędzi. Wartości gradientu można uzyskać za pomocą prostej interpolacji korzystając ze współrzędnych wybranych pikseli otoczenia. ( ) ( ) 1 Katarzyna Piotrowicz. Aplikacja do biometrycznej identyfikacji osób na podstawie indywidualnych cech tęczówki oka. Praca Inżynierska, 2015, str.7-9.
( ) ( ) Poglądowy rysunek znajduje się poniżej: Piksel o współrzędnych ( ) jest gaszony gdy jego natężenie jest mniejsze od natężenia obrazu w punkach lub. Tak przygotowany obraz jest poddawany progowaniu histogramu. Progowanie nadaje krawędziom ostatecznego kształtu. Wyróżnia się tutaj 2 parametry, próg górny oraz dolny. Dla każdego piksela potencjalnie nalężącego do krawędzi sprawdza się trzy przypadki: 1) gdy ( ) ( ) piksel to krawędź, jest maksymalnie rozjaśniany 2) gdy ( ) ( ( ) ( )) należy zbadać otoczenie piksela. Gdy uśredniony gradient wszystkich pikseli otoczenia jest większy od to piksel jest uznawany jako część krawędzi. 3) gdy ( ) ( ) piksel należy do krawędzi, jest maksymalnie wygaszany. Ostatnim elementem potrzebnym do poprawnego wykrycia krawędzi jest ponowne zbadanie otoczenia w celu domknięcia i wygładzenia krawędzi. 2. Implementacja Algorytm został zaimplementowany w języku Java przy wykorzystaniu biblioteki ImageJ. Po uruchomieniu programu wyświetla się niewielkie okno w którym można ustawić parametry progu górnego i dolnego, wybrać promień rozmycia Gaussowskiego oraz zaznaczyć czy do szukania gradientu ma służyć operator Sobela postaci:
[ ] [ ] gdzie * oznacza operację splotu. czy maska Previtty postaci: [ ] [ ] Poza tym jest wyświetlany także obraz, którego krawędzie chcemy znaleźć. Rysunek 1 Okienko doboru parametrów Po wybraniu przycisku Apply wybrane ustawienia zostaną pobrane z okna dialogowego oraz rozpocznie się przetwarzanie obrazu. Uwaga: Opcja Ok powodują zakończenie programu bez przetwarzania obrazu. Przycisku Apply można używać wielokrotnie. 3. Przykłady Porównanie wykrytych krawędzi dla różnych wartości progów Poniżej przestawiono kilka przykładów dla różnych wartości progowych wykorzystując operator Sobela. Obraz oryginalny wygląda następująco:
Próg dolny: 15, próg górny: 100 : Próg dolny: 40, próg górny: 100
Próg dolny: 80, próg górny: 100 Próg dolny: 30, próg górny: 150
Próg dolny 150, próg górny: 100 W zależności od tego jak bardzo dokładnych krawędzi potrzebujemy, można zmieniać wartości progów tak, by osiągnąć satysfakcjonujące wyniki. Przeważnie przyjmuje się, że próg górny jest o około 2/3 wyższy niż próg dolny. Potwierdzają to przeprowadzone testy.
Porównanie operatora Sobela i Previtta. Poniżej przedstawiono wyniki operacji przeprowadzonych dla operatora Sobela i Previtta. Dla obu operatorów wartość górna progu wynosiła 100 a dolna 20. Operator Sobela Operator Previtta Krawędzie znalezione przy użyciu Previtta są nieco grubsze, jaśniejsze i bardziej wyraźne. Nie ma to jednak dużego wpływu na jakość przetwarzania. Wprowadzenie szumów Kolejnym testem jaki wykonano jest sprawdzenie czy algorytm poradzi sobie z zaszumionymi obrazami. W tym celu zmieniano wartość parametru odpowiadającego za promień funkcji Gaussa przy rozmyciu. Aby wyznaczyć odpowiednie próg dolny i górny skorzystano najpierw ze zdjęcia niezaszumionego. Zostały one ustawione odpowiednio na 27 i 143. Promieniu rozmycia to 3. Wykryte krawędzie dla zdjęcia niezaszumionego:
Obraz oryginalny, zaszumiony oraz wynik przetwarzania dla promienia równego 3: Wynik przetwarzania dla promienia równego 4 oraz promienia równego 5 : Dla wartości promienia równej 5, krawędzie zostały dosyć dobrze znalezione. Ustawienie wartości mniejszych lub większych daje gorsze wyniki. Oczywiście wartość promienia (jak i pozostałe parametry) należy zawsze ustawiać indywidualnie dla każdego zdjęcia.
Detekcja krawędzi filtrem Canny ego a operatorem Sobela. Ostatnim z wykonanym testem jest porównanie filtru Canny ego z filtrem Sobela. Poniżej po lewej stronie znajduje się obraz przefiltrowany filtrem Canny ego a po prawej operatorem Sobela. Widad bardzo dużą różnicę w filtrach. Krawędzie znalezione filtrem Canny ego są cieosze oraz mają tylko jeden kolor. Są także bardziej wyraźne, lepiej domknięte. Obraz jest wyraźniejszy i łatwiejszy do dalszego przetwarzania (na przykład łatwiej na nim znaleźd konkretne kształty). Natomiast przefiltrowanie filtrem Sobela dało ciekawszy efekt. Krawędzie nie są jednorodne, mają różną szerokośd. Podsumowanie Celem projektu była implementacja filtry Canny ego. Jest to filtr wieloetapowy, który pozwala na znalezienie krawędzi na obrazie. Zaimplementowano możliwość zmiany następnujących parametrów: progu górnego i dolnego promienia funkcji Gaussa wybór między maską a operatorem Sobela. Algorytm dobrze radzi sobie z zaszumionymi obrazami. Dzięki możliwości zmiany parametrów, może być używany do różnego rodzaju zdjęć oraz można decydować jak bardzo szczegółowo ma wyglądać obraz po przetworzeniu.