MNIST的缩小图像

时间:2018-04-30 11:57:16

标签: java android image-processing bitmap mnist

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

拍摄照片后,我会先将图片传递给模特,然后进行一些预处理。 这是原始图像的示例: enter image description here

之后我只将其设为黑白,所以它看起来像这样: enter image description here

请注意尺寸的变化 - 这是我制作截图的方式,在应用程序中,两张图片仍然具有相同的尺寸。

将其转换为BW颜色后,我提取数字blob,将其缩小到20 * 20(相对于纵横比),然后添加填充以使其适合MNIST 28 * 28尺寸。最终结果如下:

enter image description here

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

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

编辑从答案中应用建议的过滤器后,我得到了什么: enter image description here

1 个答案:

答案 0 :(得分:3)

我不确定你提到的框架, 但是在这里可以提供帮助的一件事是在进行MNIST样式规范化之前对原始图像使用一些形态学操作。 也就是说,可以按如下方式进行侵蚀(我在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的东西。然后,如果你对新图像进行二值化(比如阈值灰度强度150),然后调整大小然后填充,你应该得到类似this one的东西,这样更健壮。

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

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