TensorFlow での画像のサイズ変更
画像は、OpenCV、Pillow、TensorFlow などのライブラリを介して操作できます。TensorFlow は、継続的な更新と GPU との互換性の向上により、より集中しています。
TensorFlow バージョン 1x とバージョン 2x には、複数の画像操作を実行するための異なるクラスとメソッドがあります。 一部のメソッドは、バージョン 2x で構文が更新されました。
次のセクションでは、2つの例を示します。 1つのイメージでバージョン 2x が処理されます。
次の例には、一連の画像を含む TensorFlow バージョン 1x が含まれます。 その部分に入りましょう。
TensorFlow で単一の画像のサイズを変更する
この場合、Google Colab を環境として使用しました。 これは、Google Colab が TensorFlow バージョン 1x をサポートせず、バージョン 2x のみをインポートすることを指定するためです。
最初に、ドライブがマウントされたため、イメージのインポートが有効になりました。
画像パスを取得した後、それを TensorFlow 画像として読み込みました。 resize
操作は、複数の画像フォーマットでは発生しません。 代わりに、対応するピクセル値を持つ配列に変換する必要があります。
次のフェーズでは、画像の特定の高さと幅を宣言し、それらの値を TensorFlow の resize()
メソッドに渡します。 後で、配列を再び画像に変換し、サイズ変更によって画像の品質が変化したかどうかを視覚化するためにプロットします。
コードスニペット:
from google.colab import drive
drive.mount("/content/drive")
import tensorflow as tf
import matplotlib.pyplot as plt
image_path = "/content/drive/MyDrive/IMG/pizza.jpg"
img = tf.keras.utils.load_img(image_path)
plt.imshow(img)
print(img.size)
image_array = tf.keras.preprocessing.image.img_to_array(img)
new_img = tf.image.resize(image_array, (70, 70))
resized_img = tf.keras.preprocessing.image.array_to_img(new_img)
plt.imshow(resized_img)
出力:
TensorFlow で一連の画像のサイズを変更する
この例では、Jupyter Notebook を使用します。 必要な依存関係とメソッドは、TensorFlow バージョン 1x で利用できます。
これらのメソッドはバージョン 2x で常に更新されていますが、スムーズな操作のために以前のメソッドを使用することをお勧めします。
必要なパッケージをインストールしてインポートしました。 この場合、TensorFlow のバージョンは 1.15.8
です。
この場合、画像は文字列としてフェッチされ、後で tf.train.string_input_producer()
に渡され、ファイルのキューを取得します。
ファイル リーダーを初期化した後、名前と対応するコンテンツを受け取ります。 コンテンツは後で jpeg
形式にデコードされます。
通常、TensorFlow は入力のデフォルトとして離散コサイン変換を使用します。 次に、画像をフロートに型キャストし、最後にサイズを変更します。
コードスニペット:
import matplotlib.pyplot as plt
import tensorflow as tf
import os
tf.__version__
image_path = "D:M"
categ = ["coffee"]
for c in categ:
path = os.path.join(image_path, c)
for img in os.listdir(path):
image = [os.path.join(path, img)]
queue = tf.train.string_input_producer(image)
reader = tf.WholeFileReader()
name, content = reader.read(queue)
images = tf.image.decode_jpeg(content, channels=3)
print(images.shape)
images = tf.cast(images, tf.float32)
resized_images = tf.image.resize_images(images, (224, 224))
print(resized_images.shape)
出力: