Java Android位图缩小

Java Android位图缩小,java,android,image,machine-learning,bitmap,Java,Android,Image,Machine Learning,Bitmap,如果目标是尽可能保持线条/边缘的质量,那么使用Java在Android上缩小位图图像的最佳方法是什么?目的是使用这些缩小的图像来训练神经网络 每个图像将包含一个字符(在本例中为中文)。下图显示了用户在视图对象上绘制的原始图像。我的目标是将这个位图图像缩小到30×30像素的分辨率 我目前正在使用位图createScaledBitmap方法,但我想知道是否有任何算法/方法可以优化这种角色缩小 drawView.buildDrawingCache(); Bitmap b = Bitmap.create

如果目标是尽可能保持线条/边缘的质量,那么使用Java在Android上缩小位图图像的最佳方法是什么?目的是使用这些缩小的图像来训练神经网络

每个图像将包含一个字符(在本例中为中文)。下图显示了用户在视图对象上绘制的原始图像。我的目标是将这个位图图像缩小到30×30像素的分辨率

我目前正在使用位图createScaledBitmap方法,但我想知道是否有任何算法/方法可以优化这种角色缩小

drawView.buildDrawingCache();
Bitmap b = Bitmap.createScaledBitmap(drawView.getDrawingCache(), 30, 30, false);
saveImage(b);  // Saves image to disk.
drawView.destroyDrawingCache();
另一个因素可能是线条宽度和整体图像大小之间的关系。当前线宽为20f。我发现在30华氏度时,我开始得到大的暗团块,在10华氏度时,当我缩小尺度时,我丢失了很多信息

另一个因素可能是产生的图像大小。然而,如果我做得太大,那么训练网络所需的计算量可能会变得太大

原始图像

这是经过处理的图像-看起来不太糟糕,但我担心其他字符,可能没有足够的变化供神经网络学习


我想到的第一个解决方案是将这幅图像矢量化,然后重新绘制。您编写的图像是由用户绘制的,因此您甚至不需要对图像进行矢量化。您只需将用户输入保存为点列表,并按所需比例重新生成(绘制)

用户在尺寸为
100 x 100 px
的画布上绘制一条从
(10,10)
(20,10)
的线,将在尺寸为
30 x 30 px
的缩略图上看到从
(3,3)
(6,3)
的线。然后,还可以根据最终图像比例轻松应用线条厚度

当然,为了获得更好的性能,您应该生成并缓存一些位图,而不是在用户显示位图时一次又一次地绘制它们