Распознавание рукописных форм - PullRequest
10 голосов
/ 26 мая 2011

Я хочу распознать форму почерка и выяснить, какая форма, вероятно, находится в наборе. Проще говоря, если я нарисую треугольник, приложение должно распознать его как треугольник. Как я могу сделать это с помощью C # или Java, любая помощь приветствуется.

Заранее спасибо.

Вот некоторые из форм, которые мне нужно определить enter image description here

Ответы [ 5 ]

2 голосов
/ 30 мая 2011

Если вы хотите «свернуть свои собственные», я бы предложил следующие шаги:

Сначала скелетонизируйте (прореживайте изображение до тех пор, пока все линии не станут толщиной в один пиксель).Есть много способов сделать это, и это хорошо изученная проблема.Google для получения дополнительной информации.

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

(Возможный шаг на этом этапе: сгладьте контур, потянув каждую вершину ближе к среднему значению ее соседей)

Теперь, вы используете алгоритм обнаружения углов, чтобы найти углы (посмотрите здесь: http://visual.ipan.sztaki.hu/corner/node7.html).

Этого должно быть достаточно, чтобы определить фигуры, которые вы перечислили.

Если вы хотите стать умнее, вы можететакже определите типы ребер, которые существуют между углами. Если отрезок между двумя углами остается в пределах некоторого порога прямой линии между ними, вы рассматриваете его как край "прямой линии". Если это не так, вы рассматриваете его какизгиб.

С углами + прямой / изогнутый край, вы, вероятно, сможете обнаружить любую форму, которую вы ищете, очень хорошо.

2 голосов
/ 26 мая 2011

Вы можете попробовать использовать OpenCV для этого. EmguCV - хорошая оболочка для OpenCV для .net.Следите за демонстрацией ShapeDetection (входит в OpenCV)

1 голос
/ 30 мая 2011

Действительно, существует огромное дерево исследований в области распознавания форм.
Если ваши формы действительно предсказуемы и являются базовой геометрией,
самый простой способ - найти края и применить грубое преобразование.

Некоторые управляемые материалы для чтения, с которых вы можете начать, [1] Google Scholar для определения формы преобразования Хафа http://scholar.google.com/scholar?q=hough+transform+shape+recognition&hl=en&as_sdt=0&as_vis=1&oi=scholart [2] Преобразование Хафа @ Wiki http://en.wikipedia.org/wiki/Hough_transform

1 голос
/ 27 мая 2011

Если вы ищете определенные фигуры внутри большого изображения, тогда OpenCV - отличная альтернатива. Emgu.CV - хорошая оболочка для .Net.Посмотрите мою картину реализации SURF для этого.Также см. другие опции в OpenCV , у него есть что предложить.Обратите внимание, что этот подход требует большой вычислительной мощности.

Если вы можете легко определить желаемую фигуру как BLOB (то есть дать алгоритму изображение только этой фигуры), вы можете выполнить поиск "ANN OCR »(« Искусственные нейронные сети »и« Оптическое распознавание символов »).Многие (большинство?) ANN-реализации поставляются с образцом кода для подачи фигур (букв) и распознавания ближайших фигур (рукописных букв).Например Нейронная сеть OCR .Я верю, что такой подход решит вашу проблему.(Замечание: я встречал и тестировал множество библиотек, которые могут это сделать. Это нейронные сети 101.)

Если вам нужны BLOB-алгоритмы для ANN-OCR, OpenCV может обеспечить это.

Обаэти подходы легко реализовать.

1 голос
/ 26 мая 2011

Я бы предложил использовать нейронную сеть .

. Вы можете научить его, как выглядят фигуры.

Это одна библиотека, например:

Нейронные сети на C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...