画像中の画素値調査方法 ヒストグラム作成してみた
今回は画像に対してヒストグラムを作成する方法についてまとめていきたいと思います!!
![]() | 新品価格 |

今後、画像に対して機械学習を行おうと思った時に画像処理関係の処理は覚えておいて損はないかな?と思い試してみました。
その中でも色情報の抽出はやってみたいな?と思い立ったのでいい内容ないかな?と考えてみたところ、
まずは基本である、画像内の色情報を抽出してみようと思い立ち、実施しました。
■画像でのヒストグラムについて
画像処理でのヒストグラムでは、横軸を諧調値(0~255)、縦軸を各諧調毎の画素数を取ります。
要するに、
「対象とした画像に対して各諧調毎に画素数はいくつか?」
を示します。
、、と言葉だけですとわかりにくいかと思うので、こちらのBlue(0,0,255)画像を用いてヒストグラムを作成いたします。
少し脱線しますが、
こちらのblue画像はnumpyとopencvを用いて、こちらの方法で生成させることができます。
import cv2 import numpy as np HEIGHT = 256 WIDTH = 320 img_bgr = np.zeros((HEIGHT, WIDTH, 3)) img_bgr += [0,0,255][::-1] cv2.imwrite('blue.png',img_bgr)
このblue画像に対してヒストグラムを作成してみますと、
B成分のみを抽出したヒストグラムは、
B、G成分のみを抽出したヒストグラムは、
となります。
今回の画素数は81920(256×320)になります。
その全てがB成分となるため、255成分が81920になります。
RG成分に対しては諧調なし(0諧調が81920)ですので、ヒストグラム上は諧調が0で81920になります。
■各諧調毎のヒストグラム作成
先ほどお見せしたヒストグラムを作成するためのコードはこちらになります。
※青色画像はすでに用意済みの場合のコードです。
import cv2 import numpy as np import matplotlib.pyplot as plt HEIGHT = 256 WIDTH = 320 img_bgr = cv2.imread("blue.png") img_bgr = cv2.resize(img_bgr,(WIDTH, HEIGHT)) b, g, r = img_bgr[:,:,0], img_bgr[:,:,1], img_bgr[:,:,2] img_histb, img_bins = np.histogram(np.array(b).flatten(), bins=np.arange(256)) img_histg, img_bins = np.histogram(np.array(g).flatten(), bins=np.arange(256)) img_histr, img_bins = np.histogram(np.array(g).flatten(), bins=np.arange(256)) plt.plot(img_histb, color='#0000FF') plt.plot(img_histg, color='#FFFF00') plt.plot(img_histr, color='#FFFF00') plt.show()
まず、こちらにてRGB画像をR成分、G成分、B成分の画像に分割します。
b, g, r = img_bgr[:,:,0], img_bgr[:,:,1], img_bgr[:,:,2]
そして、
np.array(img2次元画像データ).flatten()
により、2次元データ(配列)を1次元データ(配列)に変換し、
numpyのヒストグラムによりヒストグラムを作成します。
img_histb, img_bins = np.histogram(np.array(b).flatten(), bins=np.arange(256)) img_histg, img_bins = np.histogram(np.array(g).flatten(), bins=np.arange(256)) img_histr, img_bins = np.histogram(np.array(g).flatten(), bins=np.arange(256))
ここで、
bins=np.arange(256)
横軸を0~256に明示的に指定することを意味します。
■試しに写真でヒストグラムを作成
青色のみの画像だとちょっと残念なので、こちらの画像でヒストグラムを作成してみます。
結果はこんな感じです。
それぞれ、
赤:R成分
青:B成分
緑:G成分
の諧調情報になります。
海の領域が多いので青の諧調が高い画素が多くありますね!!
別の画像としてこちらでも確認。
ヒストグラムを作成してみると、
という感じになりました!!
全体的に白色だけど暗いから諧調低くてRGBが同じところに重なっているのかしら?