Для моего проекта я пишу библиотеку предварительной обработки изображений для отсканированных документов.На данный момент я застрял с функцией удаления линии.
Описание проблемы: Образец отсканированной формы:
Name* : ______________________________
Age* : ______________________________
Email-ID: |_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
Примечание: Ниже приведены следующие условия:
- Отсканированный документ можетсодержат гораздо больше вертикальных и горизонтальных направляющих.
- Толщина линий может превышать 1px
- Сам документ напечатан неправильно и может иметь помехи в виде вздутий или неравномерной толщины
- Возможно, документ окрашенфон или линии
Теперь я пытаюсь обнаружить эти строки и удалить их.И при этом рукописное содержание не должно быть потеряно.
Решение так: текущее решение реализовано на Java.
Обнаружил эти линии, используя комбинацию детекторов границ Canny / Sobel и порогового фильтра (чтобы сделать изображение битовым).Из предыдущего действия я получаю черно-белый массив пикселей.Обойдите массив и проверьте, падает ли яркость этого пикселя ниже указанного значения бина.И если я нашел 30 (минимальная длина строки в пикселях) таких пикселей, я удаляю их.Я повторяю то же самое для вертикальных линий, но принимая во внимание тот факт, что из-за удаления горизонтальных линий будут прорези.
Хотя решение, похоже, работает.Но есть такие проблемы, как
- Удаление перекрывающихся символов
- Если символы на изображении не расположены должным образом, то это также считается строкой.
- Выходное изображение с распознаванием краев черно-белое.
- Немного медленный.Обычно требуется около 40 секунд для изображения 2480 * 3508.
Пожалуйста, ознакомьтесь с инструкциями, как сделать это правильно и эффективно.И если есть библиотека с открытым исходным кодом, тогда, пожалуйста, направьте.
Спасибо