Computer vision, Machine Learning, Python

Анализ и обработка изображений с использованием операций математической морфологии, Python и библиотеки OpenCV

Время прочтения: 8 мин.

Математическая морфология — это теория, которая зародилась еще в 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 полное множество обладающее супремумом и инфинимумом, которые обозначаются /\ и \/ соответственно, aU и 0 определяются как универсальное множество и пустое.

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

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

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

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

Эрозия

Эрозия одним и тем же структурным элементом разной размерности
(структурный элемент крест, размерность 3, 7, 9 )

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

Дилатация

Дилатация одним и тем же структурным элементом разного размера (структурный элемент эллипс, размерность 3, 7, 9) [эллипс размерность 3 эквивалентен кресту такого же размера]

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

Открытие

Операция открытия через структурный элемент эллипс размерами
( 9 — для первого изображения, для последующих 12 )

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

Закрытие

Операция закрытия, структурный элемент и размеры его совпадают с операцией открытия

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

Гардиент

Операция градиента (выделение контура) структурным элементом квадрат размерность 7

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

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

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

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

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

Исходное изображения с наложенным шумом

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

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

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

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

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

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

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

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

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

Советуем почитать