Информационные технологии. Теория и практика

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

О выделении границ в Wolfram Mathematica

Графические программы для обработки изображений используют алгоритмы для выделения контуров изображений. Выделение границ (выделение краёв) — термин в теории обработки изображения и компьютерного зрения, частично из области поиска объектов и выделения объектов, основывается на алгоритмах, которые выделяют точки цифрового изображения, в которых резко изменяется яркость или есть другие виды неоднородностей. Покажем на примерах, как можно выделить границы. Для этого воспользуемся инструментами, доступными в пакете Wolfram Mathematica. В качестве исходного возьмем изображение, на котором изображен известный ученый Дональд Кнут.

Дональд Эрвин Кнут (англ. Donald Ervin Knuth, МФА: /kəˈnuːθ/, родился 10 января 1938) — американский учёный, почётный профессор в отставке (professor emeritus) Стэнфордского университета и нескольких других университетов в разных странах, иностранный член Российской академии наук, преподаватель и идеолог программирования, автор 19 монографий (в том числе ряда классических книг по программированию) и более 160 статей, разработчик нескольких известных программных технологий. Автор всемирно известной серии книг, посвящённой основным алгоритмам и методам вычислительной математики, а также создатель настольных издательских систем TEX и METAFONT, предназначенных для набора и вёрстки книг, посвящённых технической тематике (в первую очередь — физико-математических). Ну, оставим заслуги Дональда Кнута и займемся выделением контура. Для выделения контура (границ) используется огромное число методов и алгоритмов. Некоторые из них описаны здесь. Нас же будет интересовать не теория, а практическая сторона решения задачи.

Edge Для выделения контура воспользуемся встроенной функцией: EdgeDetect[image], Эта функция по умолчанию использует алгоритм Canny для выделения контуров. Этот алгоритм фактически основан на дифференциальном методе первого порядка, вычисляющей разницу и скорость изменения этой разницы в соседних пикселях. Применив эту функцию к нашему изображению, а также обработав результат функцией, обращающей цвета, получим контурное черно-белое изображение, представленное на картинке справа. Изображение кликабельно. Как видно из результата, контур правильно выделен там, где изначально он четко отделялся от соседних зон. Основные погрешности (отсутствие контура) обнаружились в районе "великой лысины". Дело в том, что мы своими глазами рассматривая изображение часто домысливаем недостающие элементы и тем самым создаем цельный образ. Если хотите убедиться в том, что это так, просто возьмите какой-то предмет и заслоните его другим. Нет сомнения в том, что вы четко дорисуете в своем воображении недостающую часть контура и самой скрытой части предмета. Компьютер так пока не умеет. В этом основная проблема, которая возникает при решении задачи выделения контуров изображений. В нашем же случае, контур в верхней части изображения не был выделен, так как разница в цветах фона и лысины слишком мала, чтобы стандартный фильтр пакета Wolfram Mathematica сумел справиться с задачей.

Попробуем теперь к тому же изображению применить градиентный фильтр GradientFilter[image,r]. А после применения фильтра снова выполним инвертирование цветов, для лучшего восприятия полученных границ. результат обработки вы видите на картинке слева. Визуально рисунок (кликабельно) получился полнее и контуры видны отчетливее не только на границах, но и внутри изображения. Но, все зависит от преследуемых целей. Если дальше будет проводиться обработка с целью оцифровки границы, то внутренний шум будет этому мешать. Сравнивая эти два изображения приходим к выводу: выбор метода обработки изображения зависит от целей и от самого изображения. Еще надо обратить внимание на то, что на самом деле границу мы не выделили. Мы создали визуальный образ этой границы, которая трактуется нами как граница. Дело в том, что граница не оцифрована - у нас нет функции или закономерности, которая описывает эту границу так, что мы (точнее компьютер) можем ее воспроизвести. А ценность имеет как раз такой результат. Вот почему тема выделения контуров на изображениях остается предметом научных исследований и тем диссертаций.

Ваш комментарий: