2016-07-19 2 views
0

Я использую opencv с Python для очистки изображений для чтения для tesseract. У меня есть черно-белое изображение, и после адаптивного порога он выглядит недостаточно. Существует много бумажного шума, и буквы не так чисты. Как я могу это исправить?Создайте читаемые слова после бинаризации

метод adaptiveThreshold:

cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) 

Источник:

source

после adaptiveThreshold:

after adaptiveThreshold

я также пытался эрозии и дилатации:

kernel = np.ones((2,2), np.uint8) 
e = cv2.erode(roi_sharpen, kernel, iterations=1)) 
d = cv2.dilate(roi_sharpen, kernel, iterations=1)) 

результаты:

enter image description here

enter image description here

+0

Вы можете применить фильтрацию шума (например, гауссовский фильтр) до или после бинаризации. Также вы можете использовать фильтр обнаружения края (например, Canny) вместо адаптивного порога для извлечения краев. –

+0

Я пробовал. Но это хуже:/ –

+0

сочетание errode и dilate может сделать трюк –

ответ

2

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

Например, вы можете применить гауссовский фильтр к исходному изображению

smooth_img = cv.GaussianBlur(img, (5, 5), 0, 0) 
bin_img = cv.adaptiveThreshold(smooth_img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2) 

Я попробовал несколько размеров ядра, кажется, 5 по 5 ядру дало лучший результат на этом примере

Binary image with Gaussian blur first

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

clean_img = cv.medianBlur(bin_img, 3) 

Вы получите

After median filter

Есть также много настройки параметров для Tesseract тоже, если вы не получите удовлетворительный результат, вы можете попробовать несколько различных настроек Тессеракта.

+0

Ницца! Спасибо за ваш ответ. Это полезно. –

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