Affine層とSoftmax-with-Loss層の計算グラフとnumpy for python実装 - end0tknr's kipple - web写経開発
上記のentryでは、ニューラルネットワークのアフィン層を使用していますが、 今回は、画像処理のAffine変換。
どうやら、Affine変換とは、ニューラルネットワークでも 画像処理でも、以下のような行列式を指すみたい。
また、上記は、以下のようにも表現できます。
画像の拡大縮小等を行う場合、 上記のは以下のようになります。
これをpythonで実装すると、以下の通りです
# coding: utf-8 from PIL import Image import numpy as np def main(): img_file_path = "./marble.png" img = Image.open(img_file_path) # アフィン変換行列 affine_tuple = (0.5, 0, 0, 0, 0.5, 0, 0, 0, 1) # Image.AFFINE は、Pillow v.9.1から # Image.Transform.AFFINE になっているようです # https://pillow.readthedocs.io/en/latest/releasenotes/9.1.0.html new_img = img.transform( img.size, Image.AFFINE, #Image.Transform.AFFINE, affine_tuple ) new_img.show() if __name__ == '__main__': main()