Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Цифровой контур изображения
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Интересовался когда-то Аски артом.
Решил попробовать поиграть с конвертацией контуров изображения в цифры.
Вот, что получилось: класс.
Умеет только формат png. И только чёрно-белые изображения.
И желательно не очень большие.
Умеет транспонировать.
Можно посмотреть здесь. http://comb[dot]org[dot]ru/t.php
Открыл для себя, как мне кажется, мощный инструмент - imagecolorat, фактически позволяет создавать фильтры.
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Дополнение:
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью
Хопфилда.
Сеть удачно сопоставила и распознала, нарисованные от руки две похожие буквы.
Получилось так:
1) Получил цифровые образы двух букв п, нарисованных от руки в Pinta (это аналог Gimp).
2) Одну букву сохранил в качестве одного из четырёх образцов для сети Хопфилда.
(матрица формируется из 4-х образцов, 1 - образ буквы, 3 - имеют случайный набор)
3) Вторую отправил на вход. И чудо случилось.
Сеть сопоставила два разных изображения одной буквы и признала их идентичными. Ура!
Можно задать свои изображения:
Для преобразования png в контур: нужно задать изображения в формате png (24х18). Буквы должны иметь строго чёрный цвет (индекс 0).
Для сети формат должен быть: 1,-1 (биполярная кодировка). Формирование матрицы
осуществляется на лету.
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
dcc0 пишет:
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью Хопфилда
Добрый день!
Спасибо за информацию.
Интересно, будет ли распозновать на картике искажённые символы или строки из нескольких символов?
dcc0
Отправлено: 18 Февраля, 2021 - 18:05:33
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Vladimir Kheifets пишет:
ать на картике искажённые символы или строки из нескольких символов?
Доброго!
Именно вот этот вариант не распознает строку (повторю - это черновой, фактически прототип).
Искажённый символ может распознать.
В принципе в моём примере п - это и есть искажённый символ. Оба символа "п" нарисованы от руки, поэтому отличаются друг от друга. Это и можно считать искажением.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.
Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.
Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
dcc0 пишет:
В принципе в моём примере п - это и есть искажённый символ. Оба символа "п" нарисованы от руки, поэтому отличаются друг от друга. Это и можно считать искажением.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.
Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.
Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.
Интересно, а если задать в качестве образцов, например, все символы латинского алфавита. Удасться распознать captcha?
dcc0
Отправлено: 18 Февраля, 2021 - 20:59:28
Участник
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Vladimir Kheifets, если написать сеть именно под этот класс символов, то, вероятно, будет работать (но надо проверять).
Может быть, для такой задачи лучше не переводить в контур изображения, а переводить
в бинарный вид в чистом виде. Но даже для изображений среднего размера - это очень большая матрица.
Однако странностей пока много с самой сетью.
Непонятно, какая у сети ёмкость. И ошибки распознавания, конечно, есть.
Тестирую. Смотрю, что происходит.
Пока вопросов больше, чем ответов.
(Добавление)
Из интересного: буква "п", набранную вручную по контуру в блокноте, распознана
как "п" рукописное:
Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014
Помог: 10 раз(а)
Ещё немного о результатах тестирования.
И далее о + и -.
Сформировал матрицу из трёх образцов.
(+) Все три образца, заданные в качестве искомых векторов, были распознаны.
Изображения 30х30, т.е. 900 нейронов.
(-) Если задать изображение, которого нет среди образцов, т.е. по идее будет выброшен ближайший похожий образ, но это не всегда так, поэтому -.
Иными словами: есть в этой схеме ложные срабатывания, с человеческой точки зрения.
Пример: русская "м" может быть распознана как латинская "v". Хотя этому есть объяснение. Вариант хуже: точка с запятой может быть распознана как "а".
Нашёл формулу для ёмкости сети в Вики. Если всё верно понял, то на 900 нейронов возможно добиться устойчивого распознавания только 3-х образцов. Формула в разделе ограничения сети[dot]
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.