我试图在Android设备上解决MNIST分类问题。我已经有一个训练有素的模型,现在我希望能够识别照片上的一个数字。
拍摄照片后,我会先将图片传递给模特,然后进行一些预处理。 这是原始图像的示例:请注意尺寸的变化 - 这是我制作截图的方式,在应用程序中,两张图片仍然具有相同的尺寸。
将其转换为BW颜色后,我提取数字blob,将其缩小到20 * 20(相对于纵横比),然后添加填充以使其适合MNIST 28 * 28尺寸。最终结果如下:
注意,我将图像放大以显示问题。问题如下:在降级后,很多有用的信息都会丢失。有时数字的整个边缘都消失了。有什么办法可以避免吗?也许我可以在缩小尺寸之前以某种方式使白线更粗?
P.S。我使用Catalano框架进行图像处理。
答案 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的东西,这样更健壮。
另请注意,您需要在送到任何分类器之前将图像集中在最后一个阶段(相对于其质心)。