2014-12-04 4 views

ответ

1

Я хочу вырезать входное изображение, вам нужно определить строки текста. Это должно быть достаточно легко, если оно напечатано, а линии в основном прямые. Сканирование, которое не является прямым или написанным вручную, которые идут вверх и вниз, будет нелегко справиться с этим! Последнее предостережение: в этой ситуации будет сотрудничать только сканирование в более высоком ДОИ (я бы сказал, по крайней мере, 300 DPI).

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

Однако ... OCR не просто сканирует изображение, оно интерпретирует результаты. Поэтому, если ваша строка заканчивается частичным словом («extrac-»), она может найти конец слова («-ting») в начале следующей строки.

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


Что такое «белая линия»?

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

quick_gray = (r + g + b)/3; // this is not a correct gray computation, but good enough here (and relatively fast.) 

average = (qg1 + qg2 + qg3 + ... + qgN)/N; // the average of 9 or 25 pixels 

if(average < 40) { goto white_pixel; } 

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

if(average < 40 * 3 * N) { ... } 

Это предполагает, что quick_gray и средний типы достаточно большой, чтобы поддержать (намного больше) вычисление Результаты.

Как вы можете видеть, это определяет, является ли PIXEL белым, а не строкой. Вы должны повторить эту математику для каждого пикселя всей строки, чтобы узнать, все ли это белое.

пиксель в вопросе Х в следующем, а * представляют собой чеки области (N = 5 х 5 = 25 пикселей.)

o o o o o o o o o 
o o * * * * * o o 
o o * * * * * o o 
o o * * X * * o o 
o o * * * * * o o 
o o * * * * * o o 
o o o o o o o o o 

Кроме того, можно использовать систему веса, где пиксели дальше от центра не влияет на результат. Таким образом, * прямо вокруг X можно дать вес 0,9, а остальные - весом 0,5.Таким образом *, которые находятся дальше, может быть в два раза темнее, а X все равно будет считаться белым.

0

Я бы предложил посмотреть некоторые примеры CUDA C++, чтобы получить основную идею синтаксиса параллельного программирования.

http://llpanorama.wordpress.com/2008/05/21/my-first-cuda-program/

Эта ссылка может помочь вам здесь.

Решите, как планируете разделить текст, а затем передать все это в ядро ​​CUDA с таким количеством требуемых потоков/блоков и выполнить OCR.

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

+0

Спасибо за ваш ответ. Я думаю, что ссылка сломана. Кроме того, мой вопрос состоял в том, как решить разделить мой образ, а не как передать его ядрам. – Raghav

+0

Ссылка работает сейчас. – Raghav

Смежные вопросы