RGBの平均値の取り方

30 vues (au cours des 30 derniers jours)
momita
momita le 24 Sep 2021
Modifié(e) : Atsushi Ueno le 28 Sep 2021
画像から平均したRGB値を取得したいです.
現状,画像の一点からRGB値を取得するプログラムは書くことができます.
特定の関数が見つからなかったため,質問させていただきました.
ご教授いただきますと幸いです.

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 24 Sep 2021
Modifié(e) : Atsushi Ueno le 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 commentaires
Atsushi Ueno
Atsushi Ueno le 27 Sep 2021
その点に関して、以前に類似の回答をした記憶があります
黒い部分の輝度値を0にしても画素数が減少しないので、mean関数で平均値を計算すると輝度の平均値を下げてしまいます。上記リンク先回答の様な方法で、黒い部分の画素数を求め、平均値を計算する際の母数(画素数)から減算すれば、画像の一部分(黒い部分以外)のRGB平均値を取得出来ます。
Atsushi Ueno
Atsushi Ueno le 27 Sep 2021
Modifié(e) : Atsushi Ueno le 28 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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Image Processing Toolbox dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!