5. FILTRY LINIOWE I STATYSTYCZNE. WYRÓWNYWANIE TŁA. Znacznie większe znaczenie w przetwarzaniu obrazu niż operacje punktowe mają takie przekształcenia w których zmiana poziomu szarości piksela zależy nie tylko od jego oryginalnej wartości, ale również od poziomów szarości pikseli sąsiednich. W naprostszym przypadku przez otoczenie rozumie się 4 sąsiadujące piksele, po bokach, oraz na górze i na dole. Bardziej skomplikowana sytuacja uwzględnia również piksele sąsiadujące po skosie - w takim przypadku otoczenie składa się z 8 pikseli. 4 i 8 w nazwach niektórych makr i pluginów odnosi się właśnie do tego, jakie otoczenie piksela uwzględnia dany proces. 5.1 KONWOLUCJE - FILTRY LINIOWE Konwolucja (splot) to operacja matematyczna służąca do łączenia dwóch funkcji. W analizie obrazów istota konwolucji opiera się na interakcji dwóch tablic z liczbami, z których jedną jest obraz wyjściowy a drugą filtr (maska, kernel). Taki filtr jest tablicą, najczęściej kwadratową, o nieparzystej liczbie kolum i wierszy. Rys. 5.1 Maska o wymiarach 3 x 3 przesuwa się po obrazie zaczynając od lewego górnego rogu (początek obrazu). Wartość nowego poziomu szarości każdego piksela, na który kolejno wypada środek maski (na rysunku np. N 22 ), jest zmieniana zgodnie z przedstawioną na rysunku regułą. Zależy więc nie tylko od swojej początkowej wartości, ale również od wartości sąsiednich pikseli, czyli od kontekstu. M to wartości w tablicy tworzącej maskę, O i N to początkowe i wynikowe wartości poziomów szarości pikseli w obrazie. Nowa wartość każdego piksela zależy nie tylko od starej wartości, ale też od wartości poziomów szarości pikseli sąsiednich. Wielkość otoczenia zależy od wielkości maski, najprostsze maja rozmiary 3 x 3, czyli pod uwagę brane jest 8 pikseli otoczenia. Wielkość maski może być dowolna, choć używanie masek niewiele mniejszych od obrazu nie ma większego sensu. Załóżmy, że wszystkie wartości M rys. 3.1 wynoszą 1. Maskę takiego filtru możemy przedstawić w postaci:
Załóżmy, że wszystkie wartości M rys. 3.1 wynoszą 1. Maskę takiego filtru możemy przedstawić w postaci: 1 1 1 1 1 1 1 1 1 W takiej sytuacji formuła na rysunku upraszcza się do postaci N 22 = (O 11 + O 12 +... + O 33 )/9 czyli nowa wartość poziomu szarości danego piksela to średnia z jego starego poziomu szarości i poziomów szarości 8 pikseli w sąsiedztwie. Filtr o takiej masce nazywamy filtrem uśredniającym. Filtry można podzielić na dolnoprzepustowe i górnoprzepustowe. Filtry dolnoprzepustowe (Low-pass) to filtry służące do usuwaniu zakłóceń z obrazu. Najczęściej jest to szum - piksele lub małe skupiska pikseli odbiegające poziomem szarości od otoczenia. Filtry te wygładzają obraz, mogą jednak spowodować rozmycie konturów, co nie jest efektem pożądanym Najbardziej znane filtry tej grupy to filtr uśredniający (Mean) i filtr Gaussa - ten drugi zazwyczaj daje nieco lepsze wyniki. Filtr uśredniający zmienia wartość piksela na wartość równą średniemu poziomowi szarości w jego otoczeniu - wielkość tego otoczenia zależy od wielkości zastosowanej maski. Nazwa filtru Gaussa nawiązue do tego, że rozkład wartości w masce stanowi przybliżenie krzywej dzwonowej Gaussa, z majwiększymi wartościami w centrum i coraz mniejszymi ku obrzeżom. 1 1 1 1 2 1 1 4 1 1 1 1 2 4 2 4 8 4 1 1 1 1 2 1 1 4 1 Rys. 5.2 Najprostsze filtry dolnoprzepustowe: Mean i i dwa filtry Gaussa, o masce 3 x 3 Określenie: dolnoprzepustowy odnosi się do stosowanego w analizie obrazów pojęcia częstotliwości przestrzennej. O wysokich częstotliwościach mówimy wówczas, gdy w obrazie następują częste i wyraźne zmiany poziomu jasności, o niskich gdy obraz zawiera duże i mało zmienne pod względem poziomu jasności elementy. Stąd filtr dolnoprzepustowy to taki, który eliminuje (albo przynajmniej osłabia) elementy o dużej częstotliwości. Filtr górnoprzepustowy (high-pass) to taki, który będzie wzmacniał elementy o wysokiej częstotliwości przestrzennej. Najbardziej znany w tej grupie to filtr wyostrzający (Sharpen), filtry gradientowe, wzmacniające krawędzie w określonym kierunku (filtry Robertsa, Prewitta, Sobela) oraz filtry Laplace'a (i ich warianty, takie jak Mexican hat) służące do wykrywania krawędzi niezależnie od ich ułożenia. -1-1 -1 0-1 0-1 1 1-1 0 1-1 12-1 -1 4-1 -2 1 1-2 0 2-1 -1-1 0-1 0-1 1 1-1 0 1 Rys.5.3 Przykłady masek filtrów wyostrzających: sharpen, filtr Laplace'a, shadows(east) i gradientowy Sobela (dla linii pionowych).
Podobnie jak przy operacjach LUT przefiltrowany obraz powinien być przeskalowany do zakresu 0-255. W przeciwnym przypadku piksele których wartości po filtrowaniu przekroczą 0 lub 255 zostana zrównane do wartości granicznych, co może spowodować utratę szczegółów obrazu (rys. 5.4). Rys. 5.4 Przycinanie lub skalowanie zakresu poziomów szarości zmienionego przez konwolucję. Rys. 5.5. Przykład działania filtru Sharpen (tylko dla czterech zaznaczonych na niebiesko pikseli, na górze obraz oryginalny, na dole przefiltrowany.
Rys. 5.6 Działanie filtru Gaussa (tylko dla czterech zaznaczonych na niebiesko pikseli, na górze obraz oryginalny, na dole przefiltrowany) 5.2 FILTRY NIELINIOWE KOMBINOWANE Do wykrywania krawędzi oprócz filtrów Laplace'a używane są również i to na ogół z lepszymi wynikami, filtry kombinowane. Idea tych filtrów polega na zastosowaniu dwóch gradientów prostopadłych względem siebie. Każdy z tych gradientów niezależnie filtruje obraz - tak, że w efekcie otrzymujemy dwa przefiltrowane obrazy. Z tych dwóch obrazów otrzymywany jest obraz wynikowy, przy czym wartość każdego piksela w tym obrazie (n) jest wyliczona na przykład według wzoru: Gdzie g 1, g 2 - wartości pikseli w przefitrowanych gradientowo obrazach. Najczęściej w takim przypadku używa się gradientowych filtrów Sobela, stąd też filtr kombinowany również jest określony nazwą filtru Sobela - co może prowadzić do nieporozumień. Na takim algorytmie opiera się funkcja Find Edges (Process).
Rys. 5.7 Filtry krawędziowe. Na górze efekt działania Find Edges (menu Process), na dole filtr Canny-Deriche (Plugins Filters Deriche) oraz Mexican Hat (Plugins Filters Mexican hat filter). 5.3 FILTRY NIELINIOWE STATYSTYCZNE W filtrach tej grupy nowa wartość poziomu szarości piksela również zależy od wartości pikseli sąsiadujących. Filtr medianowy sortuje wartości pikseli w otoczeniu o wymiarach co najmniej 3 x 3 i przypisuje centralnemu pikselowi wartość środkową (medianę). Jest to bardzo skuteczny filtr do usuwania szumu - znacznie lepszy niż filtr uśredniający lub Gaussa. Mniejsza popularność filtru medianowego wynika z faktu, że tego typu filtry są trudniejsze obliczeniowo (z komputerowego punktu widzenia) i wymagają więcej czasu, choć w miarę rozwoju techniki staje się to coraz mniejszym problemem. Filtr minimalny przypisuje centralnemu pikselowi wartość najniższą (gray erode), a maksymalny wartość najwyższą z otoczenia (gray dilation). Filtr minimalny zmniejsza, a maksymalny rozszerza krawędzie jasnych obiektów. Zastosowanie kolejno filtru minimalnego i maksymalnego to tzw. zamykanie (Close), a te same filtry w odwrotnej kolejności to otwieranie (Open). Filtr wariancyjny (Variance) zmienia wartość poziomu szarości piksela na wartość równą wariancji poziomów szarości piksela w otoczeniu. Służy do wykrywania krawędzi.
Rys. 5.7. Przykład działania filtrów Median i Variance. 5.4 FILTR UNSHARP Unsharp mask, unsharp filter to jedna z najpopularniejszych operacji stosowanych, wbrew nazwie, w celu wzmocnienia szczegółów i konturów na obrazie. W istocie jest to seria operacji: 1. Oryginalny obraz jest wygładzany (Mean,Gauss lub Median); 2. Obraz wygładzony jest odejmowany od obrazu oryginalnego; 3. Różnica z odejmowania jest dodawana do obrazu oryginalnego.
Rys. 5.8 Operacje składające się na procedurę "unsharp" i zmiany profilu poziomów jasności pikseli wzdłuż zaznaczonej na obrazie linii. Rys. 5.9 Przykład działania filtru Unsharp (Process Filters Unsharp mask). Kontury komórki stają się wyraźniejsze, ale jednocześnie wzrasta poziom szumu na obrazie.
5.5 FILTRY W IMAGEJ Wbudowane w program filtry znajdują się w menu PROCESS. Smooth, Sharpen, Find Edges, Shadows - to proste filtry o masce 3 x 3. Submenu Filters oferuje filtr Gaussa, medianowy, uśredniający (Mean), Minimum, Maximum, Unsharp i Variance oraz ich odpowiedniki pracujące na obrazach 3D (czyli na stosach). Po wywołaniu odpowiedniej procedury otrzymujemy okno, w którym można wpisać parametry filtru oraz wybrać opcję Preview, co pozwala na wygodną obserwację skutków działania filtru. Dla większości filtrów podaje się promień maski w pikselach. W przypadku filtru Gaussian blur wartość wpisywana do okienka to wartość odchylenia standardowego definiującego krzywą Gaussa (im wyższa wartość tym bardziej płaska krzywa). Ten sam parametr wpisywany jest do okienka Unsharp Mask. Drugi parametr funkcji Unsharp, Mask Weight - określa stopień wzmacniania oryginalnego obrazu (rys. 5.10). Dodatkowe możliwości stworzone są przez narzędzie Convolver, w którym można ręcznie wpisać maskę dowolnej wielkości - jedyne ograniczenie to to, że maska musi być kwadratowa, i mięć nieparzystą liczbę kolumn i wierszy. Rys. 5.10 Wpływ ustawień promienia i wagi maski na efekty działania filtru Unsharp Mask. Profile pokazują rozkład jasności pikseli wzdłuż poziomej linii przechodzącej przez obraz (niezaznaczonej na rysunku).
5.6 FILTRY W PLUGINACH Kolejne możliwości filtrowania obrazu związane są z pluginami. Na stronie ImageJ można znaleźć dziesiątki różnych filtrów, kilka z nich zostało wgranych do menu Plugins, submenu Filters. Rys. 5.11 Przykłady kilku filtrów z Plugins Filters: filtr Lipschitza, Kuwahary i falkowy filtr Haara. Filtr falkowy Haara używany jest do redukcji szumu. Oprócz pluginu dostępne jest makro: Test_Wavelets.txt które pomaga w ustawieniu parametrów filtru. Filtr Lipschitza może być wykorzystany do wygładzania tła. Filtr Kuwahary redukuje szum zachowując krawędzie w obrazie. Bardziej efektywny w wygładzaniu tła przy zachowaniu krawędzi jest filtr Anisotropic Diffusion (rys. 5.12).
Rys. 5.12 Oryginalne zdjęcie (na górze po prawej) i trzy przykłady stosowania dyfuzji anizotropowej przy różnych ustawieniach parametrów. 5.7 SUBTRACT BACKGROUND Jednym z poważniejszych problemów w przypadku obrazów uzyskanych w świetle przechodzącym jest nierównomierne oświetlenie tła. Problem można rozwiązać na wiele sposobów, jednym z nich jest funkcja Subtract Bacground (menu Process) - czyli odejmowanie tła. Funkcja wyrównuje poziom tła między obiektami - przy założeniu, że obiekty są niewielkiemi skupiskami pikseli odbiegającymi wyraźnie poziomem szarości od tła. Wartość wpisana w okno: Rolling Ball Radius powinna być co najmniej równa promieniowi największych obiektów na obrazie.
Rys. 5.13 Przykład działania funkcji Subtract Background. Po lewej obraz oryginalny, w środku odjęte tło, po prawej przefiltrowany obraz, na dole profile pokazujące rozkład poziomów szarości wzdłuż żółtej linii.