poniedziałek, 5 marca 2012

Algorytm Perona-Malik

5 komentarze
Pełny kod źródłowy
Jak usunąć szum z obrazu nie tracąc przy okazji cennej informacji o lokalizacji krawędzi? Odpowiedź na to pytanie można znaleźć w mojej Rozprawie doktorskiej w rozdziale 3.2 - Nieliniowe wygładzenie obrazu bazujące na funkcji Gaussa. Rozpoczyna się on tak:

Pomimo tego, że rozmycie funkcją Gaussa lepiej sobie radzi z zachowaniem granic między obiektami niż zastosowanie średniej arytmetycznej, to w rzeczywistości każdy punkt jest tak samo przetwarzany, niezależnie od tego czy leży wewnątrz obiektu, czy też w pobliżu jego granicy. Jest to znana cecha filtrów liniowych. Skuteczniejszym rozwiązaniem mogłoby się okazać indywidualne traktowanie każdego punktu w zależności od jego lokalizacji, tak aby proces filtracji był wzmocniony na obszarach jednolitych, a zahamowany w pobliżu krawędzi. Jedną z pierwszych prac w tym zakresie był artykuł Perona i Malika[53].

[53] P. Perona, J. Malik. Scale-space and edge detection using anisotropic diffusion. IEEE Transactions on Pattern Analysis and Machine Intelligence, 12(7):629–639,July 1990.
[Rozprawa doktorska, str. 28]

Nie będę tutaj powtarzał treści, którą można doczytać we właściwym tekście rozprawy. Chciałbym jedynie podzielić się dodatkowymi materiałami, które opracowałem przy okazji jej pisania.

Najpierw chciałbym polecić rozprawę doktorską Bartosza Jabłońskiego "Równania różniczkowe cząstkowe w problemach filtracji obrazów i trajektorii przestrzennych" jako świetne wprowadzenie do tematyki nieliniowej filtracji obrazów. Jest ona w całości dostępna w sieci jako plik PDF. Drugi rozdział tej pracy "Porównanie metod filtracji dla obrazów dwuwymiarowych" to w mojej opinii najlepszy polskojęzyczny materiał na ten temat.

Ja osobiście poza krótkim opisem w rozprawie jak działa algorytm Perona-Malik i porównaniem tego algorytmu do klasycznej filtracji Gaussa mogę podzielić się jeszcze jego implementacją. Opracowałem ją na podstawie książki "Mathematical Problems in Image Processing" (autorzy: Gilles Aubert i Pierre Kornprobst) z wykorzystaniem biblioteki CImg. Kod jest dostępny w moim publicznym repozytorium GitHub.

I jeszcze na "deser" prezentacja działania algorytmu Perona-Malik dla kilku wybranych obrazów.