Как сегментировать текстовые изображения с помощью MATLAB? - PullRequest
5 голосов
/ 10 апреля 2010

Это часть процесса OCR, который:

Как разбить предложения на слова, а затем символы?

Какой алгоритм-кандидат для этой задачи?

Ответы [ 4 ]

1 голос
/ 10 апреля 2010

В качестве первого прохода:

  • обработать текст в строки
  • обработка линии на сегменты (соединенные части)
  • найдите наибольшую белую полосу, которая может быть помещена между каждой парой сегментов.
  • посмотрите на последовательность ширины и выберите «большую» ширину в качестве пробела.
  • все, что находится между пробелами, является словом.

Теперь все, что вам нужно, - достаточно хорошее определение «большой».

1 голос
/ 10 апреля 2010

Во-первых, NIST (Национальные институты стандартов и технологий) опубликовал протокол , известный как Система распознавания рукописного ввода на основе форм около 15 много лет назад для решения этого точного вопроса - т.е. извлечения и подготовки данных типа текст-изображение для ввода в алгоритмы машинного обучения для распознавания текста. Члены этой группы в NIST также опубликовали ряд статей по этой Системе.

Работоспособность их классификатора была продемонстрирована данными, также опубликованными с помощью алгоритма («Образцы форм рукописного ввода NIST»)

Каждый из полудюжины или около того наборов данных OCR, которые я скачал и использовал, ссылался на протокол извлечения / подготовки данных, используемый NIST для подготовки данных для ввода в их алгоритм. В частности, я почти уверен, что именно на эту методологию была рассчитана база данных рукописных цифр Бостонского университета, которая считается эталонными справочными данными для OCR.

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

В целом, данные NIST были подготовлены путем извлечения 32-битных и 32-битных нормализованных растровых изображений непосредственно из предварительно напечатанной формы.

Вот пример:

00000000000001100111100000000000 00000000000111111111111111000000 00000000011111111111111111110000 00000000011111111111111111110000 00000000011111111101000001100000 00000000011111110000000000000000 00000000111100000000000000000000 00000001111100000000000000000000 00000001111100011110000000000000 00000001111100011111000000000000 00000001111111111111111000000000 00000001111111111111111000000000 00000001111111111111111110000000 00000001111111111111111100000000 00000001111111100011111110000000 00000001111110000001111110000000 00000001111100000000111110000000 00000001111000000000111110000000 00000000000000000000001111000000 00000000000000000000001111000000 00000000000000000000011110000000 00000000000000000000011110000000 00000000000000000000111110000000 00000000000000000001111100000000 00000000001110000001111100000000 00000000001110000011111100000000 00000000001111101111111000000000 00000000011111111111100000000000 00000000011111111111000000000000 00000000011111111110000000000000 00000000001111111000000000000000 00000000000010000000000000000000

Я полагаю, что метод подготовки данных BU включает в себя метод NIST, но в конце добавил несколько шагов, но не с большей точностью, а с целью уменьшения размера файла. В частности, группа БУ:

  • началось с 32 x 32 растровых изображений; то
  • делит каждое 32 x 32 растровое изображение на неперекрывающиеся блоки 4х4;
  • Затем они посчитали количество активированные пиксели в каждом блоке («1» активирован; «0» не является);
  • результат - матрица ввода 8 x 8 в котором каждый элемент является целым числом (0-16)
0 голосов
/ 31 августа 2010

для поиска двоичной последовательности, такой как 101000000000000000010000001 обнаружить последовательность 0000,0001,001,01,1

0 голосов
/ 17 апреля 2010

Я предполагаю, что вы используете панель инструментов обработки изображений в Matlab.

Для распознавания текста на изображении. Вы можете следовать:

  1. Оттенки серого (значительно ускоряет процесс).
  2. Повышение контрастности.
  3. Слегка размыть изображение, чтобы убрать шум (царапины / блики)
  4. Дилатация (тяжелая).
  5. Обнаружение краев (или расчет ROI).

С помощью метода проб и ошибок вы получите правильные коэффициенты, чтобы изображение, полученное после 5-го шага , содержало выпуклые области, окружающие каждую букву / слово / строку / абзац.

ПРИМЕЧАНИЕ:

  1. По сути, чем больше вы расширяете, тем больше элемент вы получаете. т.е. наименьшее расширение было бы полезно для идентификации букв, тогда как сравнительно высокое расширение потребовалось бы для идентификации строк и абзацев.
  2. Онлайн документы ImgProc MATLAB

Ознакомьтесь с разделом «Примеры в документации» в интерактивных документах или обратитесь к документации по инструментам обработки изображений в меню справки Matlab.

Приведенные здесь примеры помогут вам выбрать нужные функции и их различные форматы.

Пример кода (не мой)

...