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

Морфологические операции

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

В ImageMorphology.jl включен набор нелинейных операций, связанных с формой или морфологией объектов на изображении.

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

  • эрозия;

  • расширение;

  • открытие;

  • закрытие;

  • «верх шляпы»;

  • «дно шляпы»;

  • морфологический градиент;

  • морфологический лапласиан.

Импортируем изображение:

using Images
using ImageMorphology, TestImages

img = Gray.(testimage("morphology_test_512"))
bpqkfmu

Эрозия

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

В приведенном ниже примере показано, как эрозия работает на двоичном изображении с использованием структурирующего элемента 3x3. Структурирующий элемент размера 3x3 проверяет соседние элементы каждого пикселя на исходном изображении и на итоговом изображении изменяет значение этого пикселя на минимальное (minimum) из значений соседних элементов.

erodbin
img_erode = @. Gray(img < 0.8); # белые объекты остаются белыми
img_erosion1 = erode(img_erode)
img_erosion2 = erode(erode(img_erode))
mosaicview(img_erode, img_erosion1, img_erosion2; nrow = 1)
wzeyxlj

Расширение

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

В приведенном ниже примере показано, как расширение работает на двоичном изображении с использованием структурирующего элемента 3x3. Структурирующий элемент размера 3x3 проверяет соседние элементы каждого пикселя на исходном изображении и на итоговом изображении изменяет значение этого пикселя на минимальное (maximum) из значений соседних элементов.

dilatebin
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)
ytppyzz

Открытие

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

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)
biqxzns

Закрытие

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

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)
xbzdygx

«Верх шляпы»

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

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)
yyxmkwq

«Дно шляпы»

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

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)
xomteyp

Морфологический градиент

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

img_gray = @. Gray(0.8 * img > 0.7);
img_morphograd = morphogradient(@. Gray(0.8 * img > 0.4))
mosaicview(img_gray, img_morphograd; nrow = 1)
tztbcyp

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

Эта операция находит морфологический лапласиан (Morphological Laplacian) изображения, который определяется как арифметическая разность внутреннего и внешнего градиентов. В morpholaplace(img, [region]) параметр region позволяет указывать измерения, по которым выполняется операция.

img_gray = @. Gray(0.8 * Gray.(img) > 0.7);
img_morpholap = morpholaplace(img_gray)
mosaicview(img_gray, img_morpholap; nrow = 1)
nnuwvzd

Справочные материалы

  • Основные морфологические операции, разработанные в HIPR доктором Р. Фишером (R. Fisher) с соавторами: ссылка


Эта страница была создана с помощью DemoCards.jl и Literate.jl.