Математическая морфология - это теория, которая зародилась еще в 1964 году, когда Джордж Матерон изучал соотношение геометрии пористой среды и их проницаемости. В то же время Жан Серра попытался количественно оценить петрографию (т.е Макроскопические и микроскопические исследования горных пород) железных руд, а также результаты исследования Серра в 1982 году.

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

Теоретически, математическая морфология может применяться в любой области обработки изображений, где форма играет некоторую роль. Это может быть обработка объектов, обработка шума, выделение краев, сегментация, анализ текстуры, классификация, описание формы и т.д.

            Для освоения материала подразумевается, что читатель обладает минимальными знаниями в области:

  • Цифровой обработки изображений.

  • Теория множеств.

  • Представление различных изображений в компьютере.

  • Python и библиотеки NumPy, Matplotlib, OpenCV.

            Алгоритмы бинарной обработки часто называются логическим фильтром или логической пространственной обработкой. Изображения считается имеющим 1 (логическое да) и 0 (логическое нет), т.е. имеющим логические переменные и им соответствуют операции пространственной обработки (применение логических функций к изображению).

            Операция клеточной логики – это пространственно-инвариантные преобразования:

y(m,n)=?{x(k,l),(k-m,n-l)?D}

, где

x(k,l)

 – это входное изображение, D – окно (клетка). D – область действия оператора Ф

Оператор Ф называют также логической функцией от отсчетов исходного изображения, попавших в клетку. Отсчеты берутся относительно центра окна (0,0). Часто клетка – это окно небольших размеров

Существуют специальные операции клеточной логики, которые объединены под названием операций математической морфологии. Оказалось, что многие операции для обработки изображения (расчет корреляционной функции, площадь, периметр) сводятся к нескольким операциям математической морфологии.

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

Два основных морфологических оператора - это эрозия и дилатация. Так же существую вариации применения основных операций такие как открытие, закрытие, градиент и т.д.

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

  Источник

Источник

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

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

Начнем с пояснения, что такое структурный элемент и что он из себя представляется.

Структурирующий элемент или ядро - это многомерный вектор размера (n, n), состоящий из «0» и «1». Размерность этого вектора определяет размер элемента, а расположение «0» и «1» в векторе определяет линейную форму элемента.

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

Элементы структур могут быть синтезированы с помощью библиотек numpy, либо встроенными функциями OpenCV в python.

Эрозия и Дилатация – два базовых, метода в операциях математической морфологии. Другие методы являются линейной комбинацией этих операторов. Если значение каждого пиксела в исходном изображении равно 1, соответствующем каждой 1 в ядре, означает, что ядро соответствует изображению, а если есть по крайней мере 1 пиксел, соответствующий вышеуказанному условию, говорят, что элемент попал в изображение. Также стоит определить более формально базовые операции эрозии и дилатации с позиции теории частично упорядоченных множеств

Пусть L  полное множество обладающее супремумом и инфинимумом, которые обозначаются

и

соответственно, а U

 и

 определяются, как универсальное множество и пустое соответственно.

В таком случае мы можем определить операцию эрозии как

Операция дилатация или же расширение будет определятся как

Операции открытия и закрытия являются комбинациями операций эрозии и дилатации, соответственно мы можем описать их через эти операторы.

Формальности соблюдены, теперь можно перейти к экспериментам с изображениями.

Эрозия

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

Дилатация

Дилатация - метод обратный эрозии. Он расширяет структуру исходного изображения в зависимости от свертки структурирующего элемента с исходным изображением. Если элемент структурирования попадает в исходное изображение в пикселе p, значение устанавливается на 1, иначе 0. В результате выполнения дилатации могут окраситься впадины в объектах и пустоты в изображениях, чей диаметр меньше структурного элемента. Формально дилатация описывается следующим образом:

Открытие

Открытие - это операция, которая включает в себя сначала вызов оператора эрозии, а после вызывается оператор дилатации над полученным изображение после оператора эрозии.

Закрытие

Закрытие - это операция, которая включает в себя сначала вызов операции дилатации, а после вызывается операция эрозии над полученным изображением после операции дилатации.

Градиент

Операция градиента - является результатом вычитания по правилам теории множеств результата эрозии из результата дилатации. При этом если подобрать правильную форму ядра, то можно используя операцию градиента выделять, например, только горизонтальные или только вертикальные контуры.

Покажем на примере простого изображения для большей наглядности, как можно выделить горизонтальные или вертикальные контуры изображения.

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

Фильтрация зашумленного изображения.

            Проведем эксперимент и попробуем использовать морфологические операции в качестве фильтра изображения. Мы воспользуемся импульсным шумом salt&pepper которые случайный пиксел изображения изменяет на белый или черный для создания шума на исходных изображениях.

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

Результаты открытия и закрытия позволяют нам избавиться от одного из видов зашумления черных или белых пикселей, но другой тип шума становится более выраженным так как последней операцией у нас либо эрозия, либо дилатация. Для лучшего результата попробуем комбинации открытия - закрытия, закрытия - открытия изображения.

Комбинация двух операций дает хороший результат, мы практически полностью избавляемся от одного из типов шумов. Оставлю читателя возможность подумать, как можно еще улучшить результат, а также оставлю открытым вопрос почему использование снова той же комбинации не сможет улучшить результат. Если вы хорошо поняли, как работает аппарат математической морфологии ответить на этот вопрос вам не составит труда.

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

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

Полезные ссылки:

Исходный код (Статья методы OpenCV )

 https://github.com/yaroslavtsepkov/nta-math-morph 

Исходный код (Собственная реализация операций математической морфологии )

https://github.com/yaroslavtsepkov/image-analysis-processing/blob/main/02-lab-tsepkov-yaroslav.ipynb

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

https://docs.opencv.org/master/d9/d61/tutorial_py_morphological_ops.html