В предыдущей статье мы научились получать описатели волнового фронта(красных пикселей).В этой статье мы разберем такую вещь, как волновая память.
Для того, чтобы с минимальными потерями и простым образом получить описатель волнового фронта, необходимо увеличить изображение в 3 или 4 раза.
Теория
Предположим, у нас имеется двухцветное изображение. Однако это не простое изображение, в плане обхода его имеются некоторые сложности.
Если мы будем каждый белый символ, у которого в окрестности более чем один черный пиксель, менять на красный пиксель, то получиться следующая картина:
Вычислить описатель волнового фронта не получится, контур является забракованным.
Однако, если мы увеличим изображение в 3 раза, то каждый пиксель превратиться в квадрат 3х3 и тогда можно легко обойти изображение по контуру.
После того, как мы обошли изображение по контуру и считали описатель в специальный массив, можно создать вторую волну и т.д.
Мы смогли разобрать цветные изображения на бинарные, а также обрамить их контурами, и получить описатели этих контуров. Что дальше? Можно наращивать контуры, и обходить их. Так, после некоторого распространения контуров, контур объекта пересечется с контуром края изображения. Это даст также возможность приблизительной оценки позиции объекта.
Примеры работы программы
Изначально программа имеет следующий вид. Из файла можно загрузить изображение(главное чтобы присутствовали черные пиксели), также нажать шаг и сканирование. Откроем файл с цифрой «1»
Нажимаем на меню Файл → Шаг
Цвет черных пикселей заменится на синий, а вокруг образуется зеленый контур. Здесь я увеличивал изображение не в 3, а в 4 раза для того, чтобы удалять бракованные контуры. Если программа находит квадрат 2х2 зеленых пикселей, значит контур бракованный и считывать его мы не будем.
Нажмем на меню Файл → шаг еще несколько раз.
Контур изображения увеличился, а контур рамки уменьшился. Будем продолжать нажимать шаг.
Сейчас контур изображения пересекся с контуром рамки, образовался один контур. Продолжим нажимать на Файл → шаг дальше.
Теперь мы получили два контура. Продолжим нажимать на Файл→шаг.
Теперь мы получили уже целых 3 контура! Если мы продолжим нажимать Файл → шаг, контуры исчезнут. Когда контуры исчезнут, тогда просчет надвигающихся «волн» закончится. Для каждого контура, который можно обойти, создается описатель контура.
Возьмем тот же файл, но на это раз нажмем на меню Файл → сканирование.
Программа будет работать до тех пор, пока не останется ни одного белого пикселя. В правом углу мы получим список различных описателей. Это описатели фронта волны нейронов(которые не повторяются). Зеленая полоска — последний волновой контур.
Спасибо за чтение статьи.
Автор: Владимир Павлов