Как да персонализирате 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

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

person Aditya    schedule 27.07.2017

Направете етикетиране на свързани компоненти....това е броене на петна....всички шумове на дозата никога не могат да съответстват на размера на числата....с морфологични техники числата също се променят...етикетирайте изображението...пребройте брой пиксели във всеки етикетиран регион и задайте праг (който можете лесно да зададете, тъй като ще имате само числа и шумове)...cvblob е библиотеката, написана на C++, достъпна в code googles...

person rotating_image    schedule 07.04.2013

Имах подобен проблем: малките шумове бяха причина за неуспехите на тесеракта. Не мога да използвам open-cv, защото разработвах някаква функция на android и open-cv беше нежелан поради големия си размер. Не знам дали това решение е добро, но ето какво направих.

Намерих всички черни региони в изображението (точки от всеки регион, които добавих към собствения набор от региони). След това проверявам дали броят точки в този регион е по-голям от някакъв праг, като 10, 25 и 50. Ако е вярно, правя бели всички точки от този регион.

person Community    schedule 07.02.2020