画像加工ツールTensorFlowで遊んでたら素敵な毒りんごが生成されたよ

Share

こんにちは!!ようこそ、当ブログgcbgardenへ。管理人のsakurabaaa(@sakurabaaa_g)です。

TensorFlowは画像加工ツールではありません。人工知能のツールです。

最近はやりの人工知能で大事なことは大量のデータを持っていることなんですね。

例えば画像のデータがたくさんほしいときは、一枚の画像データに対して小細工を施して、データの水増しを行います。

TensorFlowといった小細工を自動で施してくれるツールで遊んでいたら面白い結果が得られたので紹介します!

スポンサーリンク

TensorFlowとは

TensorFlow(テンサーフロー、テンソルフロー呼び名は??)を知らない方のために簡単に説明。

人工知能を実現してくれるツールです。

詳しくは以下のリンクをみるとわかると思います。

公式ページへAn open-source machine learning framework for everyone

TensorFlowを使った画像の水増し

TensorFlowが提供する画像加工のための関数はどんだけあるんや!!

と思うほどありました。すべての関数を実装するのに数時間かかりましたよ。

ここでは一部のTensorFlowを使った画像水増し(Data Augmentation)手法を紹介しようと思います。

公式ドキュメントModule: tf.image

今回使用した画像

りんご。

img.shape = (313, 500, 3)

この画像を使ってデータの水増し・拡張をおこないました。

ランダムクロップ(random_crop)

ランダムクロップは指定した範囲で画像をクリップ(切り出し)してくれます。

tf.random_crop(value,size,seed=None,name=None)

下のコードはそのまま利用できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def random_crop(image, size):
images = tf.random_crop(image, size)
with tf.Session() as sess:
for i in range(15):
img = sess.run(images)
plt.subplot(5,5,i+1)
plt.axis(off)
plt.imshow(img)
plt.show()
plt.figure(figsize=(12,8))
crop_height = 150
crop_width = 150
size = [crop_height, crop_width, 3]
random_crop(img, size)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

回転(rot90)

画像を回転させることも!!

90度しかないみたいです。

rot90( image, k=1, name=None )

1
2
3
4
5
6
7
8
9
10
11
12
13
def rot90( image, k ):
with tf.Session() as sess:
for i in range(5):
img = sess.run(tf.image.rot90(image, k[i]))
plt.subplot(1,5,i+1)
plt.title(k{}’.format(k[i]))
plt.axis(off)
plt.imshow(img)
plt.show()
plt.figure(figsize=(12,8))
k = [0,1,2,3,4]
rot90(img, k)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

明るさ調整(adjust_brightness)

明るさを調整!!

adjust_brightness( image, delta )

1
2
3
4
5
6
7
8
9
10
11
12
13
def adjust_brightness(image, delta):
with tf.Session() as sess:
for i in range(9):
img = sess.run(tf.image.adjust_brightness( image, delta[i] ))
plt.subplot(3,3,i+1)
plt.title(delta{}’.format(delta[i]))
plt.axis(off)
plt.imshow(img)
plt.show()
plt.figure(figsize=(12,8))
delta = np.linspace(0,1,9) #delta[0,1]
adjust_brightness(img, delta)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

no-img2
小太郎

りんごがいなくなっちゃったよ〜〜

衝撃的なりんご画像が!!

白雪姫にでてくる毒リンゴがでてきてたまげてしまいました。

ヒュー調整(adjust_hue)

ヒュー調整という変換をしたときです。

adjust_hue( image, delta, name=None )

1
2
3
4
5
6
7
8
9
10
11
12
13
def adjust_hue(image, delta):
with tf.Session() as sess:
for i in range(25):
img = sess.run(tf.image.adjust_hue(image, delta[i]))
plt.subplot(5,5,i+1)
plt.title(delta{:.2}’.format(delta[i]))
plt.axis(off)
plt.imshow(img)
plt.show()
plt.figure(figsize=(12,8))
delta = np.linspace(-1,1,25)
adjust_hue(img,delta)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

deltaの値をランダムに生成し画像出力してみたら、まあ素敵なカラフルなりんごが出力されました。

海外に売ってそうなガムの色みたいですね。

ちなみに元のりんごの画像はこちら。

おわりに

TensorFlowは人工知能向けのツールですが、使い方次第では画像加工ツールにも変身します。

生成した画像は保存することもできるので、毒りんごが欲しい方がいたらお申し付けください。笑

環境があればだれでも挑戦することができます。以下の記事で環境構築方法を紹介しています。

TensorFlow画像の水増し

人工知能は以下の記事にもまとめています。

この記事を書いた人。
20代。とあるネットベンチャーでがんばる働き屋さん、ブロガー。
書きたいことを気ままに書いてます!
Python、プログラミング、米株、カメラ、野球観戦がすき。趣味は新宿散策。

スポンサーリンク

Share

Follow