Общие сведения о кодах цепочки Freeman для OCR

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

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

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

В основном это 8-связный цепной код, который выглядит следующим образом:

  3  2  1
   \ | /
  4-- --0
   / | \
  5  6  7

Итак, если у меня есть 'a', после всех моих преобразований (включая преобразование в черный и белый), я получаю что-то вроде этого:

11110
00001
01111
10001
10001
01110

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

 XXXX
X1111X
 XXXX1X
X01111X
X10001X
X10001X
 X111X
  XXX

После X я получаю цепной код, который будет:

0011222334445656677

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

(Кстати, есть суперэффективная реализация для поиска кода цепочки, где вы просто берете 8 соседних пикселей «X», а затем посмотрите в поисковой таблице 256, если у вас есть 0,1,2,3,4,5,6 или 7)

Мой вопрос, однако, следующий: из этого кода цепочки 0011222334445656677, как обнаружил ли я, что у меня есть «а»?

Потому что, например, если моя «а» выглядит так:

11110
00001
01111
10001
10001
01111  <-- This pixel is now full

Тогда мой цепной код теперь: 0002222334445656677

И все же это тоже «а» '.

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

I' я был так далеко, и теперь я застрял ...

(Между прочим, мне не нужна 100% эффективность, и такие вещи, как различение «0» от «O» или «o», на самом деле не выпуск)

28
задан Maple 29 May 2013 в 17:09
поделиться