こしあん
2018-11-03

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

Pocket
LINEで送る


画像で赤、緑、青の画素がどのような分布になっているかという「カラーヒストグラム」を見たいことがあります。しかしいざ探すとツールが少ないのです。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

TPUでアップサンプリングする際にエラーを出さない方法... 画像処理をしているとUpsamplingが必要になることがあります。Keras/TensorFlowではUpsampling2Dというレイヤーを使ってアップサンプリングができますが、このレイヤーがTPUだとエラーを出すので解決法を探しました。自分でアップサンプリングレイヤーを定義するとうまく行った...
Numpyだけでサクッと画像を拡大する方法... Numpyだけで画像をサクッと拡大する方法を紹介します。OpenCVやPillowを使うまでもないな、というようなときに便利な方法です。ニューラルネットワークでインプットのサイズを調整するときも使えます。 ただのNearest Neighbor法 拡大前の1ピクセルを1つの四角形と見立てて、拡...
PyTorch/TorchVisionで複数の入力をモデルに渡したいケース... PyTorch/TorchVisionで入力が複数あり、それぞれの入力に対して同じ前処理(transforms)をかけるケースを考えます。デフォルトのtransformsは複数対応していないのでうまくいきません。しかし、ラッパークラスを作り、それで前処理をラップするといい感じにできたのでその方法を...
pandasでグループ別に統計量やヒストグラムを表示する方法... 初投稿です。この記事では、pandasでグループ別に基本統計量(describe)をする方法を紹介します。 テストデータ 以下のようなデータを想定します。ある学校の3つのクラスでテストをしてみました。 A組は40人、平均点は60点、標準偏差は10(分布は正規分布に従うものとする) B組は...
画像のダウンサンプリングとPSNRの測定... U-Netでどこまでの深さが効いているのかを考えるために、画像をダウンサンプリングし、アップサンプリングするという処理を行いPSNRを見ていきます。その結果、PSNRが15~20程度だと、U-Netの深い層が効かないかもしれないという状況を確認することができました。 きかっけ・考え方 U-Ne...
Pocket
Delicious にシェア

Add a Comment

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