TensorFlow bietet eine Reihe von Funktionen zum Ändern der Größe.
Als ich nachgeschlagen habe, gibt es in TensorFlow sechs Funktionen zum Ändern der Größe.
Wenn ich das Dokument lese, ist die Erklärung geschrieben, aber sie kommt nicht sehr gut heraus.
Also möchte ich es ausprobieren und visuell verstehen, wie es funktioniert.
Zusammenfassend enthielt tf.image.resize_images die folgenden vier Funktionen:
Also werde ich nur die folgenden zwei versuchen.
Ich werde Lena mit einer Größe von 256x256 und eine Katze mit einer Größe von 256x170 verwenden.
Probieren wir sie einzeln aus.
tf.image.resize_images(images, new_height, new_width, method=0, align_corners=False) resize_images ist eine Funktion, mit der Bilder mit der angegebenen Methode auf new_height x new_width geändert werden.
Als Eingabebild kann ein 4D-Tensor [Stapel, Höhe, Breite, Kanäle] oder ein 3D-Tensor [Höhe, Breite, Kanäle] angegeben werden. Wenn in 4D angegeben, ist eine Stapelkonvertierung von Bildern möglich.
Als Rückgabewert wird ein 4D-Tensor [Batch, neue_Höhe, neue_Breite, Kanäle] oder ein 3D-Tensor [neue_Höhe, neue_Breite, Kanäle] zurückgegeben. Dies ändert sich je nach Eingangstensor.
Versuchen Sie, das Bild mit den folgenden Einstellungen auf 128 x 128 zu reduzieren.
tf.image.resize_images(image, 128, 128)
Das Ergebnis ist wie folgt.
Lena konnte problemlos schrumpfen, aber die Katze ist verzerrt. Auf diese Weise ** Wenn das ursprüngliche Seitenverhältnis nicht mit new_width und new_height übereinstimmt, wird das Bild in der Größe verzerrt. ** Um dies zu vermeiden, verwenden Sie resize_image_with_crop_or_pad. Ich werde es später versuchen.
Die Funktion resize_images kann vier Methoden annehmen:
Die Ergebnisse eines einzelnen Versuchs sind wie folgt:
Es ist zu erkennen, dass sich der Grad der Unschärfe beim Vergrößern geringfügig vom Originalbild unterscheidet. Es scheint, dass jeder seine eigenen Verwendungen hat.
align_corners Unten sehen Sie ein Bild, wenn align_corners False and True ist:
Um ehrlich zu sein, verstehe ich den Unterschied nicht wirklich, aber es scheint, dass True die Eingabe auf (new_height -1) / (height -1) und False auf new_height / height skaliert. Wenn Sie den Wert auf True setzen, scheinen die Positionen aller vier Ecken des Ein- und Ausgangs genau ausgerichtet zu sein. Ich bin mir nicht sicher, was ich dafür tun soll.
tf.image.resize_image_with_crop_or_pad(image, target_height, target_width) Die Funktion resize_image_with_crop_or_pad ist eine Funktion, die das Bild auf die angegebene Größe (Zielhöhe x Zielbreite) zuschneidet und / oder auffüllt.
Ändern Sie die Größe des Bilds auf target_width und target_height, indem Sie die Bildmitte zuschneiden oder das schwarze Bild auffüllen.
Wenn die Breite oder Höhe größer als die angegebene Zielbreite bzw. Zielhöhe ist, beschneiden Sie die Bildmitte. Im Folgenden wird die Größe eines 256 x 170-Katzenbilds geändert, indem 128 x 128 für target_height und target_width angegeben werden. Sie können sehen, dass die Bildmitte zugeschnitten ist.
Wenn die Breite oder Höhe kleiner als target_width oder target_height ist, binden Sie ein schwarzes Bild ein. Das Folgende ist ein Fall, in dem die Größe eines 256 x 170-Katzenbilds mit der Zielgröße und der Zielbreite geändert wird, die als 196 x 196 angegeben sind. Die Bildmitte wird beim Auf- und Abpolstern zugeschnitten.
Durch Kombinieren von resize_image_with_crop_or_pad und resize_images können Sie das Bild nur mit Auffüllen ohne Zuschneiden verkleinern.
Weise
Recommended Posts