Документация Engee
Notebook

Морфологические операции, часть 1

Открыть пример в Engee

Морфологическая обработка изображений — это область компьютерного зрения, которая занимается устранением недостатков бинарных и полутоновых изображений.

ImageMorphology содержит набор нелинейных операций, связанных с формой или морфологией элементов изображения.

В этой демонстрации мы рассмотрим 8 наиболее распространенных морфологических операций.

In [ ]:
using Images
using ImageMorphology, TestImages

img = Gray.(testimage("morphology_test_512"))
Out[0]:
No description has been provided for this image

Эрозия

Функция erode выполняет минимальную фильтрацию по ближайшим соседям. По умолчанию это 8 связей в 2d, 27 связей в 3d и т.д. Вы можете указать список измерений, которые хотите включить в связность, например, region = [1,2], чтобы исключить третье измерение из фильтрации.

Ниже приведен пример того, как эрозия работает на бинарном изображении с использованием 3x3 структурирующего элемента.

image.png

In [ ]:
img_erode = @. Gray(img < 0.8); # keeps white objects white
img_erosion1 = erode(img_erode)
img_erosion2 = erode(erode(img_erode))
mosaicview(img_erode, img_erosion1, img_erosion2; nrow = 1)
Out[0]:
No description has been provided for this image

Расширение

Функция dilate выполняет максимизирующую фильтрацию по своим ближайшим соседям. По умолчанию работает так же, как erode.

image.png

In [ ]:
img_dilate = @. Gray(img > 0.9);
img_dilate1 = dilate(img_dilate)
img_dilate2 = dilate(dilate(img_dilate))
mosaicview(img_dilate, img_dilate1, img_dilate2; nrow = 1)
Out[0]:
No description has been provided for this image

Открытие

Операция морфологии открытия эквивалентна dilate(erode(img)). В функции opening(img, [region]) region позволяет контролировать размеры, над которыми выполняется эта операция. Открытие может удалять небольшие яркие пятна и соединять небольшие темные трещины.

In [ ]:
img_opening = @. Gray(1 * img > 0.5);
img_opening1 = opening(img_opening)
img_opening2 = opening(opening(img_opening))
mosaicview(img_opening, img_opening1, img_opening2; nrow = 1)
Out[0]:
No description has been provided for this image

Закрытие

Закрытие операции морфологии эквивалентно erode(dilate(img)). Функция closing(img, [region]) работает аналогично opening. Закрытие может удалить небольшие темные пятна и соединить небольшие светлые трещины.

In [ ]:
img_closing = @. Gray(1 * img > 0.5);
img_closing1 = closing(img_closing)
img_closing2 = closing(closing(img_closing))
mosaicview(img_closing1, img_closing1, img_closing2; nrow = 1)
Out[0]:
No description has been provided for this image

Top-hat

Функция tophat определяется как изображение за вычетом его морфологического открытия. tophat(img, [region]) работает аналогично opening и closing. Эта операция возвращает яркие пятна изображения, которые меньше структурирующего элемента.

In [ ]:
img_tophat = @. Gray(1 * img > 0.2);
img_tophat1 = tophat(img_tophat)
img_tophat2 = tophat(tophat(img_tophat))
mosaicview(img_tophat, img_tophat1, img_tophat2; nrow = 1)
Out[0]:
No description has been provided for this image

Bottom-Hat

Операция морфологии Bottom-Hat определяется как морфологическое закрытие изображения за вычетом исходного изображения. bothat(img, [region]) определяется аналогично tophat. Эта операция возвращает темные пятна изображения, которые меньше структурирующего элемента.

In [ ]:
img_bothat = @. Gray(1 * img > 0.5);
img_bothat1 = bothat(img_tophat)
img_bothat2 = bothat(bothat(img_tophat))
img_bothat3 = bothat(bothat(bothat(img_tophat)))
mosaicview(img_bothat, img_bothat1, img_bothat2; nrow = 1)
Out[0]:
No description has been provided for this image

Градиент морфологии

Морфологический градиент является разницей между расширением и эрозией изображения. morphogradient(img, [region]) определяется так же, как и tophat.

In [ ]:
img_gray = @. Gray(0.8 * img > 0.7);
img_morphograd = morphogradient(@. Gray(0.8 * img > 0.4))
mosaicview(img_gray, img_morphograd; nrow = 1)
Out[0]:
No description has been provided for this image

Морфологический оператор Лапласа

Морфологический оператор Лапласа возращает значение, которое определяется как арифметическая разность между внутренним и внешним градиентом. Функция morpholaplace(img, [region]) определяется аналогично tophat.

In [ ]:
img_gray = @. Gray(0.8 * Gray.(img) > 0.7);
img_morpholap = morpholaplace(img_gray)
mosaicview(img_gray, img_morpholap; nrow = 1)
Out[0]:
No description has been provided for this image

Вывод

В данном примере мы разобрали некоторые морфологические операции, которые можно применять к изображениям.