Как настроить Tesseract игнорирует шум?

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

Но когда есть шум, Tesseract пытается распознать его как число и добавить еще число к результату. Это действительно плохо. Как заставить Tesseract игнорировать шум? Я не могу сделать изображение с предварительной обработкой, чтобы сделать его более контрастным или четким. Это ничего не помогает.

Если какой-то инструмент может выделить только строчку. Это может быть действительно хорошим вкладом в Tesseract. Пожалуйста помогите. Спасибо всем.

введите описание изображения здесь


person Bằng Rikimaru    schedule 07.04.2013    source источник


Ответы (6)


Вам следует попробовать размытие и расширение:

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

Удаление шума

...

person ArtemStorozhuk    schedule 07.04.2013

вы можете попытаться уменьшить семпл вашего двоичного изображения и повторить его выборку (pyrDown и PyrUp) или вы можете попробовать smooth ваше изображение с размытием по Гауссу. И, как уже предлагалось, erode и dilate ваше изображение.

person sschrass    schedule 07.04.2013

Я вижу 3 решения вашей проблемы:

  1. Как уже предлагалось - попробуйте использовать erode и dilate или какое-нибудь размытие. Это самое простое решение.
  2. Найдите все контуры (функция findContours), а затем удалите все контуры с площадью меньше некоторого значения (попробуйте разные значения, вы быстро найдете правильный). Обратите внимание, что значение может быть непостоянным - например, вы можете попробовать использовать 80% средней площади контура (просто сложите все площади контуров, разделите на количество контуров и умножьте на 0,8).
  3. Найдите все контуры. Создайте одномерный массив целых чисел с длиной, равной высоте вашего изображения. Заполните массив нулями. Теперь для каждого контура:
    I. Найдите верхнюю и нижнюю точки (точки с наибольшим и наименьшим значением координаты y). Назовем эти точки T и B.
    II. Добавьте один ко всем элементам массива, индекс которого находится между B.y и T.y. (поэтому, если B = (1, 4) и T = (3, 11), тогда добавьте единицу в array [4], array [5], array [6] ..., array [11]).
    Найти самый большой элемент массива. Назовем это значение v. Все контуры, для которых B.y <= v <= T.y должны быть буквами, остальные контуры - шумом.
person cyriel    schedule 07.04.2013

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

person Aditya    schedule 27.07.2017

Сделайте маркировку связанных компонентов ... это подсчет капель ... все дозовые шумы никогда не могут соответствовать размеру чисел ... с помощью морфологических методов номера также изменяются ... маркируют изображение ... подсчитывают количество количество пикселей в каждой отмеченной области и установить порог (который вы можете легко установить, поскольку у вас будут только числа и шумы) ... cvblob - это библиотека, написанная на C ++, доступная в кодовых гуглах ...

person rotating_image    schedule 07.04.2013

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

Я нашел все черные области на изображении (точки каждого региона, которые я добавил в свой набор регионов). Затем я проверяю, превышает ли количество точек в этой области некоторый порог, например 10, 25 и 50. Если это правда, я делаю все точки в этой области белыми.

person Community    schedule 07.02.2020