Was ist die beste Methode, um ein Bitmap-Bild auf Android mit Java zu verkleinern, wenn das Ziel ist, die Qualität von Linien/Kanten so weit wie möglich zu erhalten? Die Absicht ist, diese herunterskalierten Bilder zu verwenden, um ein neurales Netzwerk zu trainieren.Android Bitmap Downscaling
Jedes Bild enthält ein einzelnes Zeichen (in diesem Fall Chinesisch). Das Bild unten zeigt das Originalbild, das auf einem vom Benutzer gezeichneten View-Objekt erstellt wurde. Mein Ziel ist es, dieses Bitmap-Bild auf eine Auflösung von 30 mal 30 Pixel zu verkleinern.
Ich verwende derzeit die Bitmap-Methode createScaledBitmap, frage mich aber, ob es Algorithmen/Methoden gibt, die für diese Art von Zeichen-Downscaling optimiert sind.
drawView.buildDrawingCache();
Bitmap b = Bitmap.createScaledBitmap(drawView.getDrawingCache(), 30, 30, false);
saveImage(b); // Saves image to disk.
drawView.destroyDrawingCache();
Ein weiterer Faktor könnte die Beziehung zwischen Linienbreite und Bildgröße insgesamt sein. Die Linienbreite beträgt derzeit 20f. Ich habe herausgefunden, dass ich bei 30f große dunkle Klumpen bekomme und bei 10f verliere ich viele Informationen, wenn ich herunterskaliere.
Ein weiterer Faktor könnte die resultierende Bildgröße sein. Wenn ich jedoch zu groß gehe, kann der Rechenaufwand für das Netzwerk zu groß werden.
Originalbild.
Hier ist das verarbeitete Bild - es ist nicht so schlecht aussieht, aber ich mache mir Sorgen, mit anderen Charakteren, kann es nicht genug Variation für das neuronale Netz zu lernen.