2010-06-23 5 views
2

Для моего проекта я пишу библиотеку предварительной обработки изображений для отсканированных документов. На данный момент я застрял с функцией удаления линии.Как эффективно определять и удалять направляющие линии из отсканированного изображения/документа?

Описание проблемы: Образец сканируется форма:

Name* : ______________________________ 
Age* : ______________________________ 

Email-ID: |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_| 

Примечание: Ниже приведены дополнительные условия:

  • Отсканированный документ может содержать много больше вертикальных и горизонтальных ориентиры.
  • Толщина линий может превышать 1px
  • Сам документ не печатается должным образом, и может иметь шум в виде чернил вздутие или неравномерной толщины
  • Документ может быть цветной фон или линии

Теперь я пытаюсь обнаружить эти строки и удалить их. И при этом содержимое, написанное вручную, не должно быть потеряно.

Решение so для: Текущее решение реализовано на Java.

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

Хотя решение, похоже, работает. Но есть такие проблемы, как,

  • Удаления дублирования символов
  • Если символы в изображении не правильно разнесены, то это также рассматривать как линию.
  • Выходное изображение от обнаружения края находится в черно-белом режиме.
  • Немного медленный. Обычно занимает около 40 секунд для изображения 2480 * 3508.

Просьба указать, как это сделать должным образом и эффективно. И если есть библиотека с открытым исходным кодом, пожалуйста, направляйте ее.

Благодаря

ответ

1

Во-первых, я хочу сказать, что я ничего не знаю об обработке изображения в целом, а также о OCR, в частности.

Тем не менее, очень простой эвристический приходит на ум:

  1. Отдельные пиксели в изображении для подключенных компонентов.
  2. Для каждого подключенного компонента решить, если это линия или не использовать один или несколько из следующих эвристики:
    1. ли это больше, что средняя длина письма?
    2. Он появляется рядом с другими буквами? (Чтобы удалить чернильные пятна или артефакты).
    3. Имеет ли его градиент X и Y градиент достаточно большой? Это может гарантировать, что этот подключенный компонент содержит не только горизонтальную линию.

Единственная проблема, которую я вижу в том, если кто-то пишет письма на горизонтальной линии, например, так:

/\  ___ 
/\ / \ 
    |__| |___/ 
-|--|---|---|------------------ 
    | | \__/ 

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

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

+0

Спасибо Элазар. Этот проект был приостановлен на некоторое время. Между тем, проходя через некоторые документы по обработке изображений и распознаванию образов, я нахожу ваш ответ несколько ближе к фактическому решению «будет», – Favonius

+0

@Favonius, Спасибо! рад знать. Я буду рад, если вы обновите здесь ссылку на «официальное» решение. –

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

  • Нет связанных вопросов^_^