извлечь символы из изображения - PullRequest
6 голосов
/ 18 февраля 2012


Я пытаюсь извлечь (не распознать!) Символы из черно-белого изображения,
, поэтому, если изображение 123, я получаю массив из 3 изображений,

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

http://www.codeproject.com/Articles/143059/Neural-Network-for-Recognition-of-Handwritten-Digi
исходный код не завершен


Ваша помощь очень ценится:)

Ответы [ 5 ]

4 голосов
/ 18 февраля 2012

Как уже упоминал Кенни, «маркировка подключенных компонентов» описывает семейство алгоритмов, которые идентифицируют подключенные пиксели. Связанные компоненты также называются «соединенными областями» или «каплями», а также связанным понятием «контуры». Любой такой алгоритм должен иметь возможность находить не только форму связанных пикселей переднего плана, но также наличие «дырок» внутри фигуры, состоящей из пикселей цвета фона.

http://en.wikipedia.org/wiki/Connected-component_labeling

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

Библиотека OpenCV имеет функцию findContours (), которую можно использовать для поиска контуров, контуров внутри контуров и т. Д.
http://opencv.willowgarage.com/wiki/

Если вы хотите увидеть работающий алгоритм маркировки региона, поищите ссылки на «подсчет ячеек» с помощью приложения ImageJ. Подсчет биологических клеток является важным и часто упоминаемым применением маркировки регионов для медицинской визуализации.

http://rsbweb.nih.gov/ij/

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

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

Вот учебник, который часто рекомендуется и который дает хорошее представление о стандартных методах обработки изображений:

Цифровая обработка изображений Гонсалес и Вудс, 3-е издание http://www.imageprocessingplace.com/

Зайдите на addall.com, чтобы найти дешевые копии. Международные издания дешевле.

Если символы (или другие фигуры) на изображении имеют одинаковый размер и форму - например, буква «А» всегда имеет высоту 40 пикселей и 25 пикселей и печатается на машине одним и тем же шрифтом - тогда вы можете используйте метод «нормализованной взаимной корреляции» или сопоставления с шаблоном, чтобы определить наличие одной или нескольких совпадающих фигур. Этот метод может работать как очень грубый тип OCR, но имеет серьезные ограничения.

http://en.wikipedia.org/wiki/Template_matching

3 голосов
/ 18 февраля 2012

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

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

1 голос
/ 15 июля 2012

Я поместил код в проект кода, который делает именно то, что вы хотите.
Маркировка и векторизация подключенных компонентов

Это однопроходное извлечение контура с использованием бумаги Алгоритм маркировки компонентов с линейным временем с использованием метода контурной трассировки Фу Чанга, Чунь-Джен Чен и Чи-Джен Лу.

0 голосов
/ 18 февраля 2012

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

Обратите внимание, что сегментирование и маркировка подключенного компонентатолько начало, чтобы решить вашу проблему.Например, некоторые буквы, такие как строчная буква «i», будут состоять из двух компонентов, и вы должны учитывать, что у вас может быть лигатур (т.е. две буквы, которые связаны друг с другом).Вот почему мне нравится комментарий М. Бэбкока: трудно найти хорошее решение вашей проблемы без распознавания символов.

Для вашей проблемы я считаю, что вы можете решить свою проблему с помощью библиотеки OCR.

0 голосов
/ 18 февраля 2012

Может оказаться полезным узнать о BLOB-объектах или анализе связности в машинном зрении. У большинства библиотек, в том числе бесплатных, есть что-то подобное. Кроме того, если вы знаете ориентацию, текст ч / б, а текст расположен правильно, вы сможете найти края символов в 1-й проекции изображения по X и Y или под любым углом, если у вас есть время.

...