Я нашел решение своей проблемы с помощью фильтрации ядра . Сегодня я наткнулся на статью об обработке образа ядра , было несколько ядер для "Обнаружения края", я попробовал их все, но ни одно из них не было достаточно хорошим. Но я сделал свое собственное ядро из-за недосмотра, и оно отлично работает для меня! Итак, есть код:
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
Изменение размера изображения до большего позволяет очистить изображение от «артефактов» после обработки ядра, я пытался сделать это с исходным размером изображения, но изображение было не таким четким, как в моей окончательной версии кода.
результат