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 :: Цифровой контур изображения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dcc0
Отправлено: 18 Февраля, 2021 - 01:27:39
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




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

Умеет только формат png. И только чёрно-белые изображения.
И желательно не очень большие.
Умеет транспонировать.
Можно посмотреть здесь.
http://comb[dot]org[dot]ru/t.php

Открыл для себя, как мне кажется, мощный инструмент - imagecolorat, фактически позволяет создавать фильтры.

update:
Класс для сети Хопфилда - это к сообщениям ниже.

(Отредактировано автором: 19 Февраля, 2021 - 15:29:33)



-----
Март 2021. Бросил программирование
 
 Top
dcc0
Отправлено: 18 Февраля, 2021 - 16:14:21
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Дополнение:
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью
Хопфилда.
Сеть удачно сопоставила и распознала, нарисованные от руки две похожие буквы.

Получилось так:
1) Получил цифровые образы двух букв п, нарисованных от руки в Pinta (это аналог Gimp).

2) Одну букву сохранил в качестве одного из четырёх образцов для сети Хопфилда.
(матрица формируется из 4-х образцов, 1 - образ буквы, 3 - имеют случайный набор)
3) Вторую отправил на вход. И чудо случилось.

Сеть сопоставила два разных изображения одной буквы и признала их идентичными. Ура!

Можно протестировать (правда, - этой целый квест):
Тут



Можно задать свои изображения:
Для преобразования png в контур: нужно задать изображения в формате png (24х18). Буквы должны иметь строго чёрный цвет (индекс 0).
Для сети формат должен быть: 1,-1 (биполярная кодировка). Формирование матрицы
осуществляется на лету.

Исходник

(Отредактировано автором: 20 Февраля, 2021 - 00:43:01)



-----
Март 2021. Бросил программирование
 
 Top
Vladimir Kheifets
Отправлено: 18 Февраля, 2021 - 17:40:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




dcc0 пишет:
Мне удалось использовать изображения в виде цифровых контуров для работы с сетью Хопфилда

Добрый день!
Спасибо за информацию.
Интересно, будет ли распозновать на картике искажённые символы или строки из нескольких символов?
 
 Top
dcc0
Отправлено: 18 Февраля, 2021 - 18:05:33
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Vladimir Kheifets пишет:
ать на картике искажённые символы или строки из нескольких символов?

Доброго!
Именно вот этот вариант не распознает строку (повторю - это черновой, фактически прототип).
Искажённый символ может распознать.
В принципе в моём примере п - это и есть искажённый символ. Оба символа "п" нарисованы от руки, поэтому отличаются друг от друга. Это и можно считать искажением.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.

Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.

Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.

(Отредактировано автором: 18 Февраля, 2021 - 18:08:12)



-----
Март 2021. Бросил программирование
 
 Top
Vladimir Kheifets
Отправлено: 18 Февраля, 2021 - 19:27:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




dcc0 пишет:
В принципе в моём примере п - это и есть искажённый символ. Оба символа "п" нарисованы от руки, поэтому отличаются друг от друга. Это и можно считать искажением.
Т.е. в моём примере так и получилось, одну букву "п" сеть помнит, другую я задаю для сопоставления. И сеть отвечает, что буквы идентичны, хотя их контуры чуть-чуть отличаются по понятным причинам.
Как я понял из урока о нейронной сети Хопфилда, она как раз предназначена для распознавания подпочернных образцов.
Если задавать в качестве образцов целые слова, то можно распознавать и наборы символов.

Интересно, а если задать в качестве образцов, например, все символы латинского алфавита. Удасться распознать captcha?
 
 Top
dcc0
Отправлено: 18 Февраля, 2021 - 20:59:28
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Vladimir Kheifets, если написать сеть именно под этот класс символов, то, вероятно, будет работать (но надо проверять).
Может быть, для такой задачи лучше не переводить в контур изображения, а переводить
в бинарный вид в чистом виде. Но даже для изображений среднего размера - это очень большая матрица.


Однако странностей пока много с самой сетью.
Непонятно, какая у сети ёмкость. И ошибки распознавания, конечно, есть.
Тестирую. Смотрю, что происходит.
Пока вопросов больше, чем ответов.


(Добавление)
Из интересного: буква "п", набранную вручную по контуру в блокноте, распознана
как "п" рукописное:

"п" набранная
Спойлер (Отобразить)



"п" нарисованная
Спойлер (Отобразить)


Интересно, что контуры букв имеют разные смещения относительно левого и правого края.


Update:
Обернул в класс
P.S. Наконец-то я оценил силу ООП (когда можно сократить код при последующем обращении к методу)

(Отредактировано автором: 19 Февраля, 2021 - 15:25:09)



-----
Март 2021. Бросил программирование
 
 Top
dcc0
Отправлено: 23 Февраля, 2021 - 05:04:49
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Ещё немного о результатах тестирования.
И далее о + и -.
Сформировал матрицу из трёх образцов.
(+) Все три образца, заданные в качестве искомых векторов, были распознаны.
Изображения 30х30, т.е. 900 нейронов.
(-) Если задать изображение, которого нет среди образцов, т.е. по идее будет выброшен ближайший похожий образ, но это не всегда так, поэтому -.
Иными словами: есть в этой схеме ложные срабатывания, с человеческой точки зрения.
Пример: русская "м" может быть распознана как латинская "v". Хотя этому есть объяснение. Вариант хуже: точка с запятой может быть распознана как "а".

Нашёл формулу для ёмкости сети в Вики. Если всё верно понял, то на 900 нейронов возможно добиться устойчивого распознавания только 3-х образцов. Формула в разделе ограничения сети[dot]

Пока вот так.

(Отредактировано автором: 23 Февраля, 2021 - 05:07:51)



-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB