Если это вообще возможно, попросите использовать лучшее освещение для захвата изображений.Низкоугловая подсветка осветит края выпуклых (или затонувших) символов, что значительно улучшит качество изображения.Если изображение предназначено для анализа машиной, то освещение должно быть оптимизировано для машиночитаемости.
Тем не менее, один алгоритм, на который вы должны обратить внимание, - это преобразование ширины штриха, которое используется для извлечения символов изестественные изображения.
Реализация преобразования ширины штриха (SWT) (Java, C # ...)
Вероятно, глобальный порог (для сильных сторон бинаризации или усечения), вероятно, выиграл 'Не используйте его для этого приложения, и вместо этого вы должны смотреть на локализованные пороги.В ваших примерах изображений «02», следующий за «31», особенно слаб, поэтому поиск самых сильных локальных ребер в этой области будет лучше, чем фильтрация всех ребер в строке символов с использованием одного порога.
Есливы можете идентифицировать частичные сегменты символов, затем вы можете использовать некоторые направленные операции морфологии, чтобы помочь объединить сегменты.Например, если у вас есть два почти горизонтальных сегмента, как показано ниже, где 0 - это фон, а 1 - это передний план ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0
0 0 0 1 0 0 0 1 0 1 0 0 0 0 1 0 0 0
, тогда вы можете выполнить морфологическую операцию «закрыть» вдоль горизонтального направления.только чтобы присоединиться к этим сегментам.Ядро может быть чем-то вроде
x x x x x
1 1 1 1 1
x x x x x
Существуют более сложные методы для выполнения завершения кривой с использованием подгонок Безье или даже спиралей Эйлера (также называемых клотоидами), но предварительная обработка для определения сегментов, подлежащих соединению, и постобработка для устранения плохих объединенийможет быть очень сложно.