RGBの平均値の取り方

29 visualizzazioni (ultimi 30 giorni)
momita
momita il 24 Set 2021
Modificato: Atsushi Ueno il 28 Set 2021
画像から平均したRGB値を取得したいです.
現状,画像の一点からRGB値を取得するプログラムは書くことができます.
特定の関数が見つからなかったため,質問させていただきました.
ご教授いただきますと幸いです.

Risposta accettata

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

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Image Processing Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!