MATLAB Answers

RGBの平均値の取り方

40 ビュー (過去 30 日間)
momita
momita 2021 年 9 月 24 日
編集済み: Atsushi Ueno 2021 年 9 月 28 日 13:39
画像から平均したRGB値を取得したいです.
現状,画像の一点からRGB値を取得するプログラムは書くことができます.
特定の関数が見つからなかったため,質問させていただきました.
ご教授いただきますと幸いです.

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 9 月 24 日
編集済み: Atsushi Ueno 2021 年 9 月 24 日
画像も数値データなので、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 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 9 月 27 日 14:36
すいません良く見ていませんでした。計算に入れる画素数の面はご提示頂いた内容で問題無いですね。
ただ、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

サインインしてコメントする。

その他の回答 (0 件)

タグ

Community Treasure Hunt

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

Start Hunting!