画像のヒストグラム表示
「解析」の中でもおそらく馴染みが深いのは画像解析でしょう。
例えばスマホの写真が綺麗に撮れているのも、画像を撮影したあとに、
解析した結果を元にスマホが自動補正してくれているから。
その中で今回は(解析と呼べるほど大げさじゃない気もしますが)、
基本の「画像のヒストグラム表示」をPythonで実行します。
元のサンプル画像はこちら。
例えばスマホの写真が綺麗に撮れているのも、画像を撮影したあとに、
解析した結果を元にスマホが自動補正してくれているから。
その中で今回は(解析と呼べるほど大げさじゃない気もしますが)、
基本の「画像のヒストグラム表示」をPythonで実行します。
元のサンプル画像はこちら。
サンプル画像 |
ヒストグラム表示
ヒストグラム(度数分布図)とは、統計用語で集団のばらつきの様子を表示しています。
画像の場合、明るさ(輝度)の分布をヒストグラム表示することで、全体に明るい/暗い
とか、極端に偏った部分があるなどがわかります。
上の画像をヒストグラム化したのが、以下の画像です。
pythonで実行
実際のプログラムもこちらに掲載します。jupyter notebookを使ってますが、
なくてもライブラリさえインストールしておけば動くはず。
使っているのは、
- matplotlib 画像グラフ描画
- PIL 画像処理
- NumPy
ちなみに、それぞれのライブラリをインストールするのが面倒であれば、anacondaを使うことをおすすめします。この手の学習に必要なものはほぼ入っています(すべてではない)
(ここからソース)
# coding: utf-8
get_ipython().magic('matplotlib inline')
# from PIL import Image
#
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#よみこんだ画像を表示
src = Image.open("sample-01.jpg")
plt.imshow(src)
plt.show()
#画像のサイズを取得
width,height = src.size
#ピクセルのカウント
hist = np.zeros(256)
for y in range(height):
for x in range(width):
#RGB
r, g, b = src.getpixel((x,y))
#mean
lv = int((r+g+b) / 3)
hist[lv] += 1
# histgram
plt.figure()
x = range(0,256)
plt.bar(x, hist, 1.0)
plt.show(9)
(ソース終了)
という手順です。
補足
この内容は、アイデミーのオンライン学習コース「Python」「Matplotlibによるデータの可視化」を参考にしてます。
jupyter notebookは、学習用の環境として手軽に試せて便利なツールです。詳細はこちらに。
データ分析の必需品「Jupyter Notebook」の魅力とは
このあとは、「画像の2値化」などを試してみては?
(ここからソース)
# coding: utf-8
get_ipython().magic('matplotlib inline')
# from PIL import Image
#
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#よみこんだ画像を表示
src = Image.open("sample-01.jpg")
plt.imshow(src)
plt.show()
#画像のサイズを取得
width,height = src.size
#ピクセルのカウント
hist = np.zeros(256)
for y in range(height):
for x in range(width):
#RGB
r, g, b = src.getpixel((x,y))
#mean
lv = int((r+g+b) / 3)
hist[lv] += 1
# histgram
plt.figure()
x = range(0,256)
plt.bar(x, hist, 1.0)
plt.show(9)
(ソース終了)
解説
ポイントだけですが、
- 画像を読み込む
- 全ピクセルの輝度をチェック
- 同じ輝度のピクセル数をカウント
- 横軸は輝度(0-255) 縦軸はピクセル数でグラフ化
補足
この内容は、アイデミーのオンライン学習コース「Python」「Matplotlibによるデータの可視化」を参考にしてます。
jupyter notebookは、学習用の環境として手軽に試せて便利なツールです。詳細はこちらに。
データ分析の必需品「Jupyter Notebook」の魅力とは
このあとは、「画像の2値化」などを試してみては?