Найти в Дзене

Распознавание символов

Сегодня, если спросить кого, как пишутся подобные программы, почему-то отвечают, что для этого необходимо нейронное программирование. Прямо все на этом помешались… В реальности нейронное программирование обычно мало пригодно для подобного рода задач, хотя, могут быть и исключения. Более практичным является определение символов по контуру. Разберём оба варианта (существуют кроме названных и другие решения, конечно). Суть нейронного программирования. Это довольно интересный метод. Для начала под описание символа выбирается какая-то графическая матрица (20х10 или ещё какая), в которую вписывается символ. Все возможные символы должны вписываться в эту матрицу, то есть предварительно их надо привести к одному масштабу. Каждой точке на матрице можно поставить в соответствие единицу или другое число. Там где нет точек, ставится ноль. Соответственно, если у вас уже имеется описание символа, то новый нарисованный символ можно сравнить с этим описанием. Таким образом, можно подсчитать количество
Оглавление

Сегодня, если спросить кого, как пишутся подобные программы, почему-то отвечают, что для этого необходимо нейронное программирование. Прямо все на этом помешались… В реальности нейронное программирование обычно мало пригодно для подобного рода задач, хотя, могут быть и исключения. Более практичным является определение символов по контуру. Разберём оба варианта (существуют кроме названных и другие решения, конечно).

Суть нейронного программирования.

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

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

Про нейронные сети говорят, что они требуют обучения. Как это будет происходить в данном случае? Определённому символу, могут соответствовать несколько отличающихся друг от друга изображений. Эти изображения как бы накладывают друг на друга и смотрят, какие точки совпали чаще других. Им присваивается наибольший вес, другим точкам, что совпали реже, присваиваются меньшие веса. Соответственно мы получаем описание символа в виде матрицы, где точкам символа поставлены их веса. Далее сравнение новых символов будет происходить с этим описанием, с учётом весовВ общем, это суть, реализации алгоритма могут отличаться.

Недостатком нейронного программирования является то, что он чувствителен к поворотам символа. Этого недостатка лишён метод, основанный на описании контуров.

Суть метода описания контуров символа.

Опять придётся символы привести к одному масштабу и вписать в матрицу. Далее контур символа утоньшается, то есть толщину контура делают равным единицы. Теперь уже можно говорить об описании контур.

В данном случае символу сопоставляется не матрица чисел, как в предыдущем случае, а строка. Ищется начало символа в матрице, концевая точка. Далее смотрится, где находится соседняя точка. Понятно, что она может находиться: слева, справа, сверху, снизу и по диагоналям – всего 8 позиций. Каждой позиции соответствует своё число. В строку для записи символа, записывают это число. И так продолжают дальше, проходя по контуру.

Здесь тоже могут быть разные описания символов. Но, в целом метод нечувствителен к масштабу, и даже поворотам. Этого добиваются некоторыми приёмами. Если это масштаб, то просто две подряд совпавшие цифры (то есть это соответствует линии из трёх точек) заменяют одной – это как-бы сжимает символ. Поворот же символа можно учесть на первом шаге прохода контура.

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