Python画像解析入門-1 2018/05/30

PythonのPIL, Matplotlib, Numpy を使って画像解析をする.(1/2)


画像解析入門-1では, PIL, Matplotlib, Numpyライブラリを使って, 簡単な画像解析を行います. 入門-1を通して, 画像の読み込みや出力, また簡単な画像解析ができるようになります. 学習者は公式ドキュメントのLearn the Basics" & "Data Science Tutorials"を終わらせてから本演習に取り組みましょう.


課題1: 画像の読み込みと白黒画像作成, 画像の出力.

 まず本課題で用いる"lena.png"という画像をダウンロードします. "lena.png"は画像解析の分野では, サンプル画像として度々用いられます. shell scriptのwgetコマンドを使うと簡単にダウンロードできます. 直接URLを検索してダウンロードしても良いでしょう.

wget http://optipng.sourceforge.net/pngtech/img/lena.png

課題1.1: PILライブラリを用いて"lena.png"をPythonに読み込んでください. (ヒント: "lena.png"を変数に入れる.)

課題1.2: Matplotlibライブラリを用いて"lena.png"をPythonに読み込んでください. (ヒント: "lena.png"を変数に入れる.)

課題1.3: "type()"関数を使って全問の2つの画像のデータ型を見てください.

課題1.4: PILライブラリを用いて"lena.png"の白黒画像を作成してください, また作成した画像をコンピュータに保存してください.

課題1.5: PILライブラリを用いて"lena.png"の白黒画像を作成してください, また作成した画像をコンピュータに保存してください.


解答例

#! /usr/bin/python3
# Exercise 1.1
import PIL # import PIL module (library).
from PIL import Image # import Image module
img_PIL = Image.open("lena.png", 'r') 

# Exercise 1.2
import matplotlib # import matplotlib module (library).
import matplotlib.pyplot as plt # import matplotlib.pyplot module.
from matplotlib.image import imread # import imread function.
img_plt  = imread("lena.png")

# Exercise 1.3
type(img_PIL)
type(img_plt)

# Exercise 1.4
img_PIL_gray = img_PIL.convert('L') #https://pillow.readthedocs.io/en/3.1.x/reference/plugins.html#module-PIL.PngImagePlugin
img_PIL_gray.save("lena.png"[:-4] + "_gray_PIL.png", 'PNG')

# Exercise 1.5
import numpy as np
img_size_x = img_plt.shape[0]
ex_5 = []
for i in range(0, img_size_x):
  for p in range(0, img_size_x):
    ex_5.append((img_plt[i][p][0]+img_plt[i][p][1]+img_plt[i][p][2])/3)

ex_5_np = np.array(ex_5)
img_size = ex_5_np.shape[0]
img_plt_result = []
for i in range(0, img_size):
  img_plt_result.append(ex_5_np[i])
  img_plt_result.append(ex_5_np[i])
  img_plt_result.append(ex_5_np[i])

img_plt_result = np.array(img_plt_result)
img_plt_result = img_plt_result.reshape(512, 512, 3)

# plt.imshow(img_plt_result) # showing a image
# plt.show() # showing a image

plt.imshow(img_plt_result)
plt.savefig('lena_gray_plt')