Счет / Отображение: удалить шум в изображении

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

Какое решение я ищу здесь, чтобы убрать шум? Поскольку Тессеракт не может распознать это, я думаю, что удаление - лучший жизнеспособный вариант.

2 ответа

Вы можете использовать TextCleaner, скрипт ImageMagick, чтобы очистить фон текста.

Если в случае, если вы ищете код Python, здесь будет работать для удаления шума

import cv2
import numpy as np

# load color image
im = cv2.imread('input.jpg')

# smooth the image with alternative closing and opening
# with an enlarging kernel
morph = im.copy()

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1))
morph = cv2.morphologyEx(morph, cv2.MORPH_CLOSE, kernel)
morph = cv2.morphologyEx(morph, cv2.MORPH_OPEN, kernel)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))

# take morphological gradient
gradient_image = cv2.morphologyEx(morph, cv2.MORPH_GRADIENT, kernel)

# split the gradient image into channels
image_channels = np.split(np.asarray(gradient_image), 3, axis=2)

channel_height, channel_width, _ = image_channels[0].shape

# apply Otsu threshold to each channel
for i in range(0, 3):
    _, image_channels[i] = cv2.threshold(~image_channels[i], 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY)
    image_channels[i] = np.reshape(image_channels[i], newshape=(channel_height, channel_width, 1))

# merge the channels
image_channels = np.concatenate((image_channels[0], image_channels[1], image_channels[2]), axis=2)

# save the denoised image
cv2.imwrite('output.jpg', image_channels)

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

gradient_image = cv2.morphologyEx(morph, cv2.MORPH_GRADIENT, kernel)

и передать morph obj к функции split и удалите ~ символ внутри цикла

Другие вопросы по тегам