画像のヒストグラム表示

「解析」の中でもおそらく馴染みが深いのは画像解析でしょう。

例えばスマホの写真が綺麗に撮れているのも、画像を撮影したあとに、
解析した結果を元にスマホが自動補正してくれているから。

その中で今回は(解析と呼べるほど大げさじゃない気もしますが)、
基本の「画像のヒストグラム表示」を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)
(ソース終了)

解説

ポイントだけですが、
  1. 画像を読み込む
  2. 全ピクセルの輝度をチェック
  3. 同じ輝度のピクセル数をカウント
  4. 横軸は輝度(0-255) 縦軸はピクセル数でグラフ化
という手順です。


補足
この内容は、アイデミーのオンライン学習コース「Python」「Matplotlibによるデータの可視化」を参考にしてます。
jupyter notebookは、学習用の環境として手軽に試せて便利なツールです。詳細はこちらに。
データ分析の必需品「Jupyter Notebook」の魅力とは

このあとは、「画像の2値化」などを試してみては? 

このブログの人気の投稿

ASP.NETエラーの対処 ASP.NET AJAXのインストール

笑いを込めて振り返れば? 1/ドッグカウ

エラーの対処 セッション状態要求が作成できない