Удалите шум из изображения, чтобы обработать текст с помощью OCR.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Удалите шум из изображения, чтобы обработать текст с помощью OCR.

Сообщение Anonymous »

Мне нужно обработать серию изображений, а затем обработать их с помощью оптического распознавания символов, чтобы получить текст, который появляется на этих изображениях.
Текст на цветных изображениях недостаточно четок для OCR позволяет четко распознавать текст на изображениях, поэтому мне нужно сделать текст более четким или четким.
После применения различных методов выделения текста из остальных изображений я получили изображение с достаточным контрастом/четкостью, чтобы перейти к следующему шагу: удалению шума и усилению пикселей изображения, формирующих текст. Результаты первой части показаны ниже:
Цветное изображение №1
Очищенное изображение №1
Цветное изображение №2
Очистить изображение №2
Цветное изображение №3
Очистить изображение №3
Я применил разные техники, но ни одну из них дать правильный результат. Основной метод, который я применил, заключается в следующем:

Код: Выделить всё

def posterize(img = None, image_path = None, level = 3):

if image_path:
image = cv2.imread(image_path)
else:
image = img

result = image.copy()

indices = np.arange(0,256)
divider = np.linspace(0, 255, level + 1)[1]
quantiz = np.intp(np.linspace(0, 255, level))
color_levels = np.clip(np.intp(indices/divider), 0, level - 1)
palette = quantiz[color_levels]

im2 = palette[image]

result = cv2.convertScaleAbs(im2)

return result

img = cv2.imread(image_path,cv2.IMREAD_GRAYSCALE)
blur = cv2.medianBlur(img,3)
post = posterize(blur, image_path = None, level = 5)
image = cv2.adaptiveThreshold(post,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)

kernel = np.ones((2, 2), np.uint8)
final = cv2.dilate(image, kernel, iterations=1)
Я пробовал другие методы с аналогичными или худшими результатами, например:
Поиск и рисование контуров:

Код: Выделить всё

edged = cv2.Canny(blur, 50, 100)
contours, hierarchy = cv2.findContours(edged, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0,255,0), 1)
Различные методы определения порога в сочетании с эрозией и расширением:

Код: Выделить всё

ret,th = cv2.threshold(blur,90,255,cv2.THRESH_BINARY).
kernel = np.ones((2, 2), np.uint8)
image = cv2.erode(image, kernel, iterations=1)

kernel = np.ones((1, 1), np.uint8)
image = cv2.dilate(image, kernel, iterations=1)
Уменьшение шума:

Код: Выделить всё

image = cv2.fastNlMeansDenoising(img,None,20,7,21)
Но любой из методов, которые я использовал, всегда вызывает у меня одну и ту же проблему: снижение шума сопровождается потерей пикселей в буквах, поэтому окончательный текст становится нечитаемым.
Мне нужно найти технику или метод, который достаточно очищает изображение, сохраняя при этом текст достаточно четким, чтобы оптическое распознавание текста могло его распознать.
Буду признателен любая помощь в этом отношении.
Заранее большое спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-with-ocr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»