如何在不丢失图像信息的情况下将位图调整为低分辨率?

时间:2017-11-13 22:42:27

标签: android bitmap

我正在创建一个基于深度学习的Android应用程序。我有一个Canvas,我允许用户绘制一些东西。然后我将Canvas的位图传递给我的模型进行分类。我使用Tensorflow MNIST项目作为我项目的基础。我的问题是,在MNIST示例中,允许用户使用28x28大小Canvas进行绘制。但是我不想这样做,因为利用Canvas来绘制图形。我正在绘制完整尺寸Canvas,但在将Bitmap画布发送到Tensorflow模型时,我想将其调整为28x28以进行分类(否则我会得到) ArrayIndexOutOfBoundException)。

如何在不丢失信息的情况下将位图的大小调整为28x28或其他任何可能的解决方案?

以下是MNIST画布的图片:

enter image description here

这是我的应用程序画布的图像。我尝试将其调整为28x28但我丢失了图像信息:

enter image description here

1 个答案:

答案 0 :(得分:1)

假设您输入的是100 x 100图像,并且想要将其调整为28 x 28。

100 x 100像素 - > 10000个功能

28 x 28像素 - > 784功能

在数学上不可能在调整大小时丢失输入信息。

然而,还有其他方法可以解决。

  • 摆脱绘画周围的白色区域。它已经过滤了大部分不必要的像素。然后你可以申请调整大小。
  • 尝试不同的插值方法。在调整大小操作期间,我们使用不同类型的插值(双线性,双三次等)。
  • 尝试使输入图像对您的网络更大(例如将28 x 28 MNIST调整为56 x 56)并训练更大的尺寸。然后,您将减少用于推断速度成本的信息,因为对较大图像进行分类会稍微慢一些。