Cyfrowe przetwarzanie sygnałów Wykład Podstawowe przekształcenia morfologiczne dr inż. Robert Kazała
Przekształcenia morfologiczne Przekształcenia podobne do filtrów, z tym że element obrazu nie jest modyfikowany zawsze lecz tylko jeśli spełniony jest określony warunek. Przekształcenia morfologiczne są jednym z najważniejszych operacji w komputerowej analizie obrazu, pozwalają na najbardziej złożone operacje związane z analizą kształtu elementów obrazu. Wadą przekształceń morfologicznych jest duża złożoność obliczeniowa. 2
Element strukturalny Element strukturalny obrazu - podzbiór obrazu (przy dyskretnej reprezentacji obrazu - pewien podzbiór jego elementów) z wyróżnionym jednym punktem (tzw. punktem centralnym). Najczęściej stosowanym elementem strukturalnym jest koło o promieniu jednostkowym. 3
Element strukturalny Element strukturalny jest bardziej zbliżony do koła. Element strukturalny składa się z 7 elementów a nie 9 co zmniejsza złożoność obliczeniową. Element strukturalny nie preferuje dwóch abstrakcyjnych kierunków poziomego i pionowego. 4
Element strukturalny Tradycyjnie przyjmowany jest element strukturalny w postaci siatki prostokątnej gdyż jest prostszy w realizacji. 5
Element strukturalny 6
Algorytm przekształcenia morfologicznego 1. Przyłożenie punktu centralnego do wszystkich punktów obrazu 2. Sprawdzenie czy lokalna konfiguracja punktów odpowiada układowi zapisanemu w elemencie strukturalnym 3. Wykonanie, w przypadku zgodności konfiguracji punktów, operacji określonej dla danego przekształcenia 7
Różnica pomiędzy przekształceniami morfologicznymi a innymi przekształceniami obrazów Różnica pomiędzy przekształceniami morfologicznymi a innymi przekształceniami obrazów polega na tym, że: przekształcenia punktowe transformują każdy punkt obrazu w taki sam sposób bez względu na to jakich ma sąsiadów, filtry uzależniają wynik od sąsiedztwa danego punktu, ale przekształcenie jest wykonywane zawsze nawet jeśli wartość obrazu w danym punkcie nie ulega zmianie, przekształcenia morfologiczne przekształcają tylko tę cześć punktów obrazu, których otoczenie jest zgodne z elementem strukturalnym, co pozwala na bardziej rozbudowane planowanie przekształceń. 8
Podstawowe przekształcenia morfologiczne Erozja Dylatacja Otwarcie Zamknięcie 9
Erozja Przy założeniu, że istnieje nieregularny obszar X i koło B o promieniu r, które będzie elementem strukturalnym (za punkt środkowy elementu strukturalnego przyjmuje się środek koła B) to erozję obszaru X elementem B można zdefiniować na dwa sposoby: figura zerodowana to zbiór środków wszystkich kół o promieniu r, które w całości zawarte są w obszarze X, koło B przetacza się po wewnętrznej stronie brzegu figury. Kolejne położenia środka koła B wyznaczają brzeg figury zerodowanej. 10
Erozja 11
Erozja definicja W implementacji komputerowej erozja jednostkowa polega na usunięciu tych wszystkich punktów obrazu o wartości 1, które posiadają choć jednego sąsiada o wartości 0. 12
Erozja definicja Erozję można również zinterpretować jako tzw. filtr minimalny, tzn. taki operator, który każdemu punktowi przypisuje minimum z wartości jego sąsiadów. 13
Przeprowadzanie erozji Proces przeprowadzenia erozji można wykonać posługując się następującym elementem strukturalnym: gdzie zastosowane symbole oznaczają: Jeżeli punkt centralny i otoczenie elementu strukturalnego zgadza się z lokalną konfiguracją punktów obrazu to nowa wartość punktu centralnego obrazu przyjmuje wartość 1, natomiast w przeciwnym przypadku 0. 14
Wpływ kształtu elementu strukturalnego Najczęściej erozję przeprowadza się za pomocą elementu strukturalnego przypominającego kształtem koło, ale można też używać innych elementów strukturalnych np.: pary punktów, odcinków trójkątów itp. Elementy liniowe jako elementy strukturalne są przydatne do wyszukiwania fragmentów obrazu zorientowanych liniowo w tym samym kierunku co element strukturalny. Np. sprawdzenie czy w badanym obrazie przedstawiającym materiał włóknisty nie ma zakłóceń. 15
Erozja - przykłady 16
Cechy erozji o znaczeniu praktycznym Jest addytywna co oznacza, że erozję o złożonej wielkości można interpretować jako złożenie odpowiedniej ilości erozji o wielkości jednostkowej. Bardzo ważna cecha przy praktycznej realizacji przekształcenia. Erozja złożonym elementem strukturalnym jest równoważna złożeniu erozji poszczególnymi tego elementu strukturalnego Położenie punktu centralnego elementu strukturalnego nie ma większego znaczenia. Translacja punktu centralnego o wektor powoduje translację obrazu wynikowego o ten sam wektor. Erozja ma zdolność do eliminowania drobnych szczegółów i wygładzania brzegu figury. 17
Cechy erozji o znaczeniu praktycznym Erozja elementami strukturalnymi o podłużnym kształcie pozwala uwypuklić fragmenty obrazu zorientowane liniowo w tym samym kierunku co element strukturalny. Erozja dokonuje generalizacji obrazu. Odizolowane, drobne wyróżnione obszary zostają usunięte. Brzegi wyróżnionych obszarów zostają wygładzone, ich długość zostaje zdecydowania zmniejszona. Zmniejszone zostają także ich powierzchnie. Często większe wyróżnione obrazy zostają podzielone na mniejsze. Spada nasycenie obrazu. 18
Przykłady działania erozji na obrazy naturalne 19
Dylatacja Dylatacja jest przekształceniem odwrotnym do erozji. Aby zdefiniować operację dylatacji zakłada się, że istnieje nieregularny obszar na obrazie X i koło B o promieniu r, które będzie elementem strukturalnym. Wówczas dylatację figury X elementem B można zdefiniować na trzy różne sposoby: figura po dylatacji jest zbiorem środków wszystkich kół B, dla których choć jeden punkt pokrywa się z jakimkolwiek punktem figury właściwej, koło B przetacza się po zewnętrznej stronie brzegu figury; kolejne położenia środka koła B wyznaczają brzeg figury po dylatacji, analogicznie jak w przypadku erozji, dylatację można zdefiniować jako filtr maksymalny. 20
Dylatacja 21
Dylatacja Operację dylatacji można przeprowadzić posługując się elementem strukturalnym: Jeżeli punkt centralny i otoczenie elementu strukturalnego zgadza się z lokalną konfiguracją punktów obrazu to nowa wartość punktu centralnego obrazu przyjmuje wartość 1, ale pod warunkiem, że nie wszystkie wartości otoczenia obrazu są równe 0. W przeciwnym razie wartość punktu centralnego w obrazie pozostaje bez zmian. 22
Dylatacja - definicja 23
Dylatacja - definicja 24
Podstawowe własności dylatacji Podstawowe własności dylatacji są następujące: zamykanie małych otworów i wąskich zatok w konturach obiektów na obrazie, zdolność do łączenia obiektów, które położone są blisko siebie, dylatację obrazu kolorowego można przedstawić jako złożenie dylatacji przeprowadzonych dla poszczególnych składowych. 25
Przykłady dylatacji dla obrazu sztucznego 26
Przykłady dylatacji dla obrazów rzeczywistych 27
Otwarcie i zamknięcie Omówione wcześniej operacje erozji i dylatacji mają niestety określone wady. Zmieniają one w sposób wyraźny pole powierzchni przekształcanych obszarów. Erozja zmniejsza je a dylatacji zwiększa. Aby wyeliminować te wady wprowadzono przekształcenia będące złożeniem poprzednich. Są nimi otwarcie i zamknięcie, które można zdefiniować następująco: 28
Otwarcie 29
Zamknięcie 30
Otwarcie i zamknięcie - własności 31
Otwarcie i zamknięcie - własności 32
Otwarcie i zamknięcie - własności Operacja zamknięcia jest operacją: zwiększającą, idempotentną, czyli wielokrotne wykonanie operacji dylatacji tym samym elementem strukuralnym jest równoważne wykonaniu jednokrotnej operacji zamknięcia. Otwarcie jest operacją: zmniejszającą, idempotentną, czyli wielokrotne wykonanie operacji otwarcia tym samym elementem strukuralnym jest równoważne wykonaniu jednokrotnej operacji otwarcia. 33
Przykłady otwarcia i zamknięcia obraz testowy 34
Jedynie operacja domknięcia 35
Jedynie operacja otwarcia 36
Operacja domknięcia i otwarcia zastosowana jednocześnie 37
Operacje zamknięcia i otwarcia zniekształcają przetwarzany obraz 38
Otwarcie, zamknięcie właściwe, automediana Kolejne przekształcenia morfologiczne mogą być budowane jako coraz bardziej złożone transformacje obrazu w oparciu o zdefiniowane wcześniej otwarcie i zamknięcie. Serię interesujących przekształceń figury f można zrealizować poprzez porównanie złożeń otwarcia i zamknięcia z obrazem wyjściowym figury f przed wykonaniem jakichkolwiek przekształceń. Powstać w ten sposób mogą następujące przekształcenia: 39
Detekcja ekstremów- maksima Aby wyodrębnić z obrazu lokalne ekstrema (maksima i minima) można wykorzystać zdefiniowane wcześniej przekształcenia otwarcia i zamknięcia. Aby wyszukać lokalne maksima należy od wyniku otwarcia danego obrazu odjąć obraz wyjściowy, a następnie dokonać binaryzacji z dolnym progiem otrzymanej różnicy: 40
Detekcja ekstremów- minima Aby wyszukać lokalne minima należy dokonać podobnej operacji, z tym, że pierwszą operacją będzie domknięcie: Łatwo zauważyć, że operacja ta daje podobny wynik, jak operatory wydzielające krawędzie (na przykład Laplasjan) 41
Ścienianie Ścienianie jest odmianą przekształceń morfologicznych. Ścienianie obiektu X przy użyciu elementu strukturalnego B polega na przyłożeniu tego elementu do każdego punktu obrazu w ten sposób,że punkt centralny pokrywa się z analizowanym punktem i podjęciem jednej z dwóch decyzji: nie zmieniać punktu gdy element nie pokrywa się z jego sąsiedztwem zmieniać wartość punktu na 0 jeżeli element strukturalny pasuje do sąsiedztwa analizowanego punktu Ścienianie może być powtarzane wielokrotnie, aż do momentu gdy następny krok nie wprowadza żadnych zmian w obrazie 42
Przykład elementów strukturalnych wykorzystywanych do ścieniania Wynikiem ścieniania jest zawsze obraz binarny W większości przypadków obrazem wejściowym dla operacji ścieniania jest również obraz binarny, chociaż to nie jest konieczne 43
Przykład ścieniania - wyodrębnianie krawędzi 44
Przykład ścieniania - wyodrębnianie krawędzi 45
Szkieletyzacja Szkieletyzacjajest operacją pozwalającą wyodrębnić osiowe punkty (szkielety) w analizowanym obrazie. Definicja Szkielet figury jest zbiorem wszystkich punktów, które są równoodległe od co najmniej dwóch punktów należących do brzegu. 46
Szkieletyzacja - własności Szkielet figury jest znacznie od niej mniejszy, a odzwierciedla w pełni jej topologiczne własności. Analiza szkieletu figur umożliwia przeprowadzenie następujących analiz obrazu: klasyfikacja cząstek na podstawie ich kształtu określenie orientacji podłużnych obiektów rozdzielenie posklejanych obiektów wyznaczanie linii środkowej szerszej linii symulacja procesu rozrostu cząstek oraz tworzenia struktury ziarnistej 47
Szkieletyzacja element strukturalny Szkieletyzacja może być realizowana jako ścienianie z następującycm elementem strukturalnym: 48
Szkieletyzacja alfabet Golay'a W praktyce do ścieniania często stosowane są różne elementy strukturalne naprzemiennie, np.: elementy alfabetu Golay a 49
Szkieletyzacja - zakłócenia Niestety proces szkieletyzacji może wprowadzać do obrazu pewne artefakty w postaci bocznego gałązkowania linii szkieletu. Efekt ten jest szczególnie dokuczliwy, jeśli obraz oryginalny posiada zakłócenia. 50
Szkieletyzacja - przykład Szkieletyzacja jest techniką przetwarzania obrazu o dużym znaczeniu aplikacyjnym. Przykładowym zadaniem praktycznym, w którym ważną rolę odgrywa szkieletyzacja jest np. zadanie analizy przebiegu głównego przewodu trzustkowego w obrazach ERCP. 51
Szkieletyzacja - przykład 52
Obcinanie gałęzi Czasami operacja szkieletyzacji wprowadza pewne zniekształcenia (gałązkowanie). Aby usunąć zniekształcenia gałązkowania redukuje się stopniowo odcinki posiadające wolne zakończenie. W ostateczności pozostają jedynie zamknięte pętle i odcinki przecinające brzeg obrazu. W rzeczywistości obcinanie gałęzi przeprowadza się w ograniczonym stopniu uzależnionym od ilości iteracji. 53
Obcinanie gałęzi Algorytm obcinania gałęzi może być realizowany jako ścienianie przy elemencie strukturalnym pokazanym obok (5 iteracji): 54
Przykład obcinania gałęzi dla obrazu ERCP 55
Python - Operacje morfologiczne scipy.ndimage.morphology skimage.morphology 56
Python generowanie elementów strukturalnych scipy.ndimage.morphology.iterate_structure(structure, iterations[,...]) Iterate a structure by dilating it with itself. scipy.ndimage.morphology.generate_binary_structure(rank, connectivity) Generate a binary structure for binary morphological operations. skimage.morphology.ball(radius[, dtype]) given radius Generates a ball-shaped structuring element of a skimage.morphology.disk(radius[, dtype]) Generates a flat, disk-shaped structuring element of a given radius. skimage.morphology.octagon(m, n[, dtype]) Generates an octagon shaped structuring element with a given size of horizontal and vertical sides and a given height or width of slanted sides. skimage.morphology.octahedron(radius[, dtype]) Generates a octahedron-shaped structuring element of a given radius skimage.morphology.rectangle(width, height) element of a given width and height. skimage.morphology.square(width[, dtype]) element. Generates a flat, rectangular-shaped structuring Generates a flat, square-shaped structuring skimage.morphology.star(a[, dtype]) Generates a star shaped structuring element that has 8 vertices and is an overlap of square of size 2*a + 1 with its 45 degree rotated version. 57
Python scipy.ndimage.morphology binary_closing(input[, structure,...]) binary_dilation(input[, structure,...]) Multi-dimensional binary dilation with the given structuring element. binary_erosion(input[, structure,...]) Multi-dimensional binary erosion with a given structuring element. binary_fill_holes(input[, structure,...]) binary_hit_or_miss(input[, structure1,...]) Multi-dimensional binary hit-or-miss transform. binary_opening(input[, structure,...]) Multi-dimensional binary opening with the given structuring element. Multi-dimensional binary closing with the given structuring element. Fill the holes in binary objects. binary_propagation(input[, structure, mask,...]) Multi-dimensional binary propagation with the given structuring element. black_tophat(input[, size, footprint,...]) Multi-dimensional black tophat filter. distance_transform_bf(input[, metric,...]) Distance transform function by a brute force algorithm. distance_transform_cdt(input[, metric,...]) Distance transform for chamfer type of transforms. distance_transform_edt(input[, sampling,...]) grey_closing(input[, size, footprint,...]) Multi-dimensional greyscale closing. Exact euclidean distance transform. grey_dilation(input[, size, footprint,...]) Calculate a greyscale dilation, using either a structuring element, or a footprint corresponding to a flat structuring element. grey_erosion(input[, size, footprint,...]) Calculate a greyscale erosion, using either a structuring element, or a footprint corresponding to a flat structuring element. grey_opening(input[, size, footprint,...]) Multi-dimensional greyscale opening. morphological_gradient(input[, size,...]) morphological_laplace(input[, size,...]) Multi-dimensional morphological laplace. white_tophat(input[, size, footprint,...]) Multi-dimensional white tophat filter. Multi-dimensional morphological gradient. 58
Python skimage.morphology skimage.morphology.binary_closing(image, selem) Return fast binary morphological closing of an image. skimage.morphology.binary_dilation(image, selem) Return fast binary morphological dilation of an image. skimage.morphology.binary_erosion(image, selem) Return fast binary morphological erosion of an image. skimage.morphology.binary_opening(image, selem) Return fast binary morphological opening of an image. skimage.morphology.black_tophat(image, selem) Return black top hat of an image. skimage.morphology.closing(image, selem[, out]) Return greyscale morphological closing of an image. skimage.morphology.cube(width[, dtype]) Generates a cube-shaped structuring element (the 3D equivalent of skimage.morphology.diamond(radius[, dtype]) Generates a flat, diamond-shaped structuring element of a given radius. skimage.morphology.dilation(image, selem[,...]) skimage.morphology.erosion(image, selem[,...]) Return greyscale morphological erosion of an image. skimage.morphology.greyscale_black_top_hat(...) skimage.morphology.greyscale_close(*args,...) skimage.morphology.greyscale_dilate(*args,...) skimage.morphology.greyscale_erode(*args,...) skimage.morphology.greyscale_open(*args,...) skimage.morphology.greyscale_white_top_hat(...) skimage.morphology.opening(image, selem[, out]) skimage.morphology.reconstruction(seed, mask) Perform a morphological reconstruction of an image. skimage.morphology.remove_small_objects(ar) skimage.morphology.skeletonize(image) skimage.morphology.watershed(image, markers) Return a matrix labeled using the watershed segmentation algorithm skimage.morphology.white_tophat(image, selem) Return white top hat of an image. Return greyscale morphological dilation of an image. Return greyscale morphological opening of an image. Remove connected components smaller than the specified size. Return the skeleton of a binary image. 59