ランダムに画像を1枚取り出し、画像を回転・拡大縮小させ、返却:


from tensorflow.keras.preprocessing.image import ImageDataGenerator
gen = ImageDataGenerator(rotation_range=10, zoom_range=0.5, fill_mode="constant", cval=0)
a = gen.flow(x=X,y=Y, batch_size=1, seed=0)

new_x = []
new_y = []
for i in range(5):
  c = next(a)
  new_x.append(c[0])
  new_y.append(c[1])
  

メモ:
・Xは画像であり、枚数*行*列*カラーの4次元配列であること。
・Yは画像Xに対する正解値であり、枚数サイズの1次元配列。
・rotation_range=10: プラスマイナス10度のランダム回転
・zoom_range=0.5: 0.5倍〜1.5倍でランダム倍率
・cval: 回転縮小などにより、存在しなくなる領域。0の場合は黒で埋める。fill_modeがconstantのときのみ。
・flowにより、無限に生成される。next関数により、1枚のみを取り出す。上の例では5枚取り出し。毎回違う画像に、毎回違う変換。
・batch_size=1は、Xからランダムに1枚取り出してその変換を行うという意味。仮にbatch_size=30などにした場合、next(a)で、30枚の画像が生み出される。c[0]が画像で、c[1]がその時の正解。
・seedの固定で、結果が同じになることは確認ずみ。
・tensorflow以外の環境ならば、fromのtensorflowを消せば動くかも