MNIST 的缩减图像

Downscale image for MNIST

我正在尝试解决 Android 设备上的 MNIST 分类问题。我已经有一个经过训练的模型,现在我希望能够识别照片上的单个数字。

拍完照片后,我会进行一些预处理,然后再将图像传递给模型。 这是原始图像的示例:

之后我只将它变成黑白的,所以它开始看起来像这样:

请不要注意尺寸的变化 - 这是我制作屏幕截图的方式引入的,在应用程序中两个图像仍然具有相同的尺寸。

将其转换为黑白颜色后,我提取数字的斑点,将其缩小至 20*20(根据纵横比),然后添加填充以使其适合 MNIST 28*28 大小。最终结果如下:

注意,我放大了图像以显示问题。问题如下:缩小后,很多有用的信息都丢失了。有时数字的整个边缘都消失了。有什么办法可以避免吗?也许我可以在缩小比例之前以某种方式使白线变粗?

P.S。我使用 Catalano 框架进行图像处理。

EDIT 从答案中应用建议的过滤器后,我得到的是:

我不确定你提到的框架, 但有一件事在这里可以提供帮助,那就是在进行 MNIST 样式归一化之前,对原始图像使用一些形态学操作。 也就是说,可以如下进行 erosion(我在 python 中记录了这种方法,您使用的框架中应该有类似的操作,因为操作非常标准) .

import numpy as np
import cv2

xx = cv2.imread('6.jpg') # your original image of 6
kernel = np.ones((20,20), np.uint8)
erosion = cv2.erode(xx, kernel, iterations = 2)

cv2.imwrite('6A.jpg',erosion) # this will be used as a replacement for the original image

这将产生看起来像 this. Then, if you do the binarization of the new image (say threshold by gray intensity 150), and do the resize followed by padding, you should get something like this one 的东西,它更健壮。

另请注意,在输入任何分类器之前,您需要在最后阶段(相对于其质心)将图像居中。

按照 MNIST 的标准,最终结果如下(物理尺寸 28x28)。