MATLAB Answers

RGBの平均値の取り方

32 views (last 30 days)
momita
momita on 24 Sep 2021
Edited: Atsushi Ueno on 28 Sep 2021 at 13:39
画像から平均したRGB値を取得したいです.
現状,画像の一点からRGB値を取得するプログラムは書くことができます.
特定の関数が見つからなかったため,質問させていただきました.
ご教授いただきますと幸いです.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 24 Sep 2021
Edited: Atsushi Ueno on 24 Sep 2021
画像も数値データなので、mean(平均値)関数で計算できます。image processing toolboxには画像専用の高級な関数がありますが、ここでは触れません。
I = imread('peppers.png');
meanPixelValue = mean(I,[1 2 3]) % カラー画像1枚から1つの平均値を出す。mean(I(:))やmean(I,'all')もOK
meanPixelValue = 81.6038
RGB_mean = mean(I,[1 2]) % RGB各々の全画素平均値。元データ同様に3次元方向のベクトルなので注意
RGB_mean =
RGB_mean(:,:,1) = 120.7808 RGB_mean(:,:,2) = 66.3971 RGB_mean(:,:,3) = 57.6335
RGB_mean = RGB_mean(:) % こう書けば列ベクトルになる
RGB_mean = 3×1
120.7808 66.3971 57.6335
  4 Comments
Atsushi Ueno
Atsushi Ueno on 27 Sep 2021
すいません良く見ていませんでした。計算に入れる画素数の面はご提示頂いた内容で問題無いですね。
ただ、I(I>0)と書くと行列がベクトルになってしまうのでmean関数を上手く使う事が出来ません。
RGB各面で輝度値の合計/ 黒以外の画素数を計算すると目的の値を計算出来ます。
I = imread('peppers.png');
I(I<128) = 0; % 画像の黒色(輝度値が所定以下)の部分を除く(わざと閾値を大きくした)
imshow(I) % 表示画像の黒以外のRGB値の平均値をそれぞれ取得する
meanPixelValue = mean(I(I>0)) %,[1 2 3]) % RGB合算だからOK、ベクトルなので[1 2 3]は不要
meanPixelValue = 187.3860
% RGB_mean = mean(I(I>0),[1 2]) % I(I>0)がベクトルなのでRGB別に出来ない
RGB_mean = sum(I,[1 2])./ sum(I>0,[1 2]) % 黒以外の輝度値合計/黒以外の画素数(RGB別)
RGB_mean =
RGB_mean(:,:,1) = 196.8778 RGB_mean(:,:,2) = 171.6318 RGB_mean(:,:,3) = 167.2093

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!