こしあん
2018-11-03

Pythonで画像のカラーヒストグラムを簡単に表示する方法


画像で赤、緑、青の画素がどのような分布になっているかという「カラーヒストグラム」を見たいことがあります。しかしいざ探すとツールが少ないのです。Pythonならほんの数行で出せます。

PillowとPyplotでとてもお手軽

カラーヒストグラムの原理は単純で、縦横カラーチャンネルの画像を、カラーチャンネル単位でヒストグラム出せばいいのです。画像の読み込みにPillow、ヒストグラムの表示にPyplot、画像データの受け渡しをNumpy配列でやっています。

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

def color_hist(filename):
    img = np.asarray(Image.open(filename).convert("RGB")).reshape(-1,3)
    plt.hist(img, color=["red", "green", "blue"], histtype="step", bins=128)
    plt.show()

これだけで終わりです。binsの刻みを変えるとヒストグラムの幅を指定することができます(現状は256段階を128個に分割)。具体例を見ていきましょう。

例えば猫ちゃんも



動画編集ソフトでよく見るようなカラーヒストグラムです

いらすとやも



イラスト系は特定の色に山が集中しやすいですね

名画ですら分析可能



モネの睡蓮の池です。シカゴ美術館からダウンロードしました。かなりきれいな分布をしているんですね。

以上です。簡単にカラーヒストグラムを出すことができました。

Related Posts

PCA Color Augmentationを拡張してTensorFlow/Keras向けに実装した... PCA Color AugmentationはAlexNetの論文に示された画像向けのData Augmentationですが、画像用だけではなく、テンソルの固有値分解をすることで構造化データに対しても使えるようにしてみました。これの解説と効果を書きます。 リポジトリ こちら https://...
Numpyだけでサクッと画像を拡大する方法... Numpyだけで画像をサクッと拡大する方法を紹介します。OpenCVやPillowを使うまでもないな、というようなときに便利な方法です。ニューラルネットワークでインプットのサイズを調整するときも使えます。 ただのNearest Neighbor法 拡大前の1ピクセルを1つの四角形と見立てて、拡...
Kernel-PCAのexplained_variance_ratioを求める方法... scikit-learnのPCA(主成分分析)にはexplained_variance_ratio_という、次元を削減したことでどの程度分散(データを説明できる度合い)が落ちたのかを簡単に確認できる値があります。Kernel-PCAではカーネルトリックにより、特徴量の空間が変わってしまうので、ex...
Pandasのpivotを使ってデータを集計し、横並びの棒グラフで表示する方法... Pandasのデータフレームを集計して、横並びの棒グラフで表示したいときがあります。その方法を紹介していきます。Pivotを使うと簡単にできます。 データ例 以下のようなデータ(rain.txt)があったとします。都市別(那覇、東京、札幌)の月別の平年降水量のデータを取ったものです(気象庁よ...
pandasでグループ別に統計量やヒストグラムを表示する方法... 初投稿です。この記事では、pandasでグループ別に基本統計量(describe)をする方法を紹介します。 テストデータ 以下のようなデータを想定します。ある学校の3つのクラスでテストをしてみました。 A組は40人、平均点は60点、標準偏差は10(分布は正規分布に従うものとする) B組は...

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です