постобработка изображений cv2 di git - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь реализовать классификатор цифр самостоятельно. И я столкнулся с некоторыми проблемами с этим. Я тренирую NN на наборе рукописных данных MNIST, MNIST sample di git. Но когда я пытаюсь предсказать, что такое ди git, я предсказал по изображению, которое я нашел и обработал, используя cv2 - cv2, обработанный di git, поскольку вы Как видите, мое собственное изображение имеет более толстую схему и четкие границы.

Это мой ди git -изображение до обработки - До и после - После . Но я хочу, чтобы изображение походило на это . после обработки. Я использую следующий код для обработки каждого di git:

def main():
    image = cv2.imread('digit.jpg', cv2.IMREAD_GRAYSCALE)
    image = image.reshape((32,32,1))
    image = postprocess(image)

def postprocess(gray):
    kernel_size = 15
    blur_gray = cv2.GaussianBlur(gray,(kernel_size, kernel_size), 0)

    thresh = cv2.adaptiveThreshold(blur_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 3)

    return thresh

. Я использую 11 в качестве параметра Threshold для отбрасывания большинства артефактов, но моя схема di git все еще полужирная / жирная и слишком четкая границы.

Вопрос: как мне обработать изображение , чтобы оно выглядело как изображение обучающего образца (более толстое и с размытыми границами)?

1 Ответ

0 голосов
/ 10 января 2020

Я нашел решение своей проблемы с помощью фильтрации ядра . Сегодня я наткнулся на статью об обработке образа ядра , было несколько ядер для "Обнаружения края", я попробовал их все, но ни одно из них не было достаточно хорошим. Но я сделал свое собственное ядро ​​из-за недосмотра, и оно отлично работает для меня! Итак, есть код:

def main():
    image = cv2.imread('digit.jpg', cv2.IMREAD_GRAYSCALE)
    image = postprocess(image)
    image = image.reshape((32,32,1))

def postprocess(gray):
    gray_big = cv2.resize(gray, (256,256))

    kernel = np.array([[0,-2,0],[-2,10,-2],[0,-2,0]])
    filtered = cv2.filter2D(gray_big, -1, kernel)

    filtered = 255 - filtered
    filtered = filtered / 255
    filtered = cv2.resize(filtered, (32,32))

    return filtered

Изменение размера изображения до большего позволяет очистить изображение от «артефактов» после обработки ядра, я пытался сделать это с исходным размером изображения, но изображение было не таким четким, как в моей окончательной версии кода.

результат

...