Подтвердить что ты не робот

Количество обнаружений OpenCV

Я использую OpenCV на iPhone и должен обнаруживать числа в изображении. Я разбил изображение на более мелкие изображения, поэтому каждое изображение имеет только одно число (1-9). Все номера печатаются, а не рукописные.

Каким будет лучший подход к вычислению чисел с помощью OpenCV?

UPDATE:

Я успешно нашел числа и извлек их. Они выглядят так:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

Когда они извлекаются, они имеют одинаковый размер и так далее. Я сохранил кучу изображений и поместил их в каталог OCR, где они были разбиты на категории. Например: ocr/1/100.jpg 101.jpg.... и ocr/2/200.jpg 201.jpg....

Затем я собирался использовать тот же подход, что и в учебнике Basic OCR: http://blog.damiles.com/?p=93

Однако я программирую для iPhone и не могу использовать код С++ (ошибка при компиляции и т.д.), и у меня нет доступа к highgui.

Я пробовал использовать cvMatchTemplate() и сопоставлял кучу изображений, но, похоже, он работает очень плохо...

Любые другие идеи, которые я могу попробовать?

4b9b3361

Ответ 1

Вы можете начать с чтения основных анализов компонентов (PCA), линейного дискриминантного анализа Fisher (LDA) и поддерживающих векторных машин (SVM). Это методы классификации, которые чрезвычайно полезны для OCR, и существуют библиотеки на любом языке, включая С++, Python, С# и т.д.

Оказывается, что OpenCV уже включает отличные реализации в PCAs и SVMs. Я не видел примеров кода OpenCV для OCR, но вы можете использовать некоторую модифицированную версию классификации лиц для выполнения классификации символов. Отличным ресурсом для кода распознавания лиц для OpenCV является этот веб-сайт.

Ответ 2

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

  • Извлеките число
  • Найдите ограничивающий прямоугольник
  • Увеличьте изображение до примерно 10x8, попробуйте совместить соотношение сторон
  • Сделайте это для небольшого набора тренировок, возьмите "среднее" изображение для каждого номера

  • Для новых изображений выполните описанные выше шаги, но последнее - это просто абсолютная разница изображений с каждым из числовых шаблонов. Затем возьмите сумму различий (пикселей в разностном изображении).

Все вышеперечисленные основные операции OpenCV.

Ответ 3

Объектив С++? Попробуйте переименовать ваши .m файлы в .mm, и затем вы можете использовать С++ в своем проекте iPhone.

Ответ 4

В основном ваша проблема состоит в том, чтобы классифицировать вектор объектов, который представляет собой набор интенсивностей пикселей после некоторых шагов предварительной обработки. Вы можете использовать любой классификатор для этой задачи, например, например. нейронных сетей, которые должны иметь реализацию C внутри OpenCV. Вы также можете попробовать библиотеку C libsvm для поддержки векторных машин.

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

Ответ 9

HOG + SVM (попробуйте сыграть с ядрами)

Ответ 10

Свертывание Нейронные сети на сегодняшний день являются лучшими алгоритмами для ручных цифр. Они реализованы в большинстве систем, таких как USPS и т.д. Вот несколько статей, объясняющих алгоритмы. http://yann.lecun.com/exdb/lenet/