複数の画像の平均輝度値を取得する方法

複数の画像の平均輝度値を取得したいと思っています。
どのような方法があるでしょうか。ご回答いただけると幸いです。

 Accepted Answer

Kenta
Kenta on 11 Sep 2019

1 vote

for文で各画像を参照しながら、mean(image, 'all')で平均輝度値を取り出し、さらにそれらの平均をとれば
複数の画像の平均輝度値をとりだすことができます。

5 Comments

Asaka Masahiro
Asaka Masahiro on 16 Sep 2019
ありがとうございます。
各画像の輝度の平均は取り出せたのですが、その平均を取り出すことが上手くできません。
どのようにすればよいでしょうか。
>> % Read image and convert to gray-scale
I = imread('A1.png');
Igray = rgb2gray(I);
% Calculate average luminance
avLuminance = mean(Igray, 'all');
画像の平均輝度はこれで出しています。
Kenta
Kenta on 16 Sep 2019
Edited: Kenta on 16 Sep 2019
int=zeros(10,1)
for i=1:(画像枚数)
I=imread('n-th_img.jpg');
int(i)=mean(I,'all');
end
mean(int)
このようにしてはいかがでしょうか。各ループで平均輝度を記録していって、
最後にもう一度その平均を算出すればよいと思います。
また、詳しく状況を説明していただけたり、サンプルのデータを添付していただけるともう少し詳しく回答できると思います。
Asaka Masahiro
Asaka Masahiro on 16 Sep 2019
回答ありがとうございます。
状況といたしましては、
画像刺激を提示する際、画像間のブランクとして、使用する全画像の平均輝度の画像(グレースケール)を使用したいと考えております。
画像毎の平均輝度は算出出来ているので計算すれば出せない事はないのですが、
今後使用する画像を増やした際の事を考え、一括で平均を求めようとしています。
現在は A1.png~A20.png、B1.png~B20.png という名前の計40枚の画像の平均輝度を算出し、その輝度のグレースケール画像を作成しようとしています。
Kenta
Kenta on 17 Sep 2019
Edited: Kenta on 17 Sep 2019
int=zeros(40,1);
for i=1:40
if i<=20
filename=sprintf('A%d.png',i);
I=imread(filename);
int(i)=mean(I,'all');
else
filename=sprintf('B%d.png',i-20);
I=imread(filename);
int(i)=mean(I,'all');
end
end
ave_int=mean(int);
img=ones(size(I,1),size(I,2)).*ave_int;
figure;imshow(uint8(img));
40枚でそれぞれ、全ピクセルの輝度の平均を計算
その輝度の値をもつ1チャンネルの画像を生成
例)全画像の平均輝度が100の場合:画像サイズがAやB画像と同じで、すべてのピクセルの値が100の画像を出力
このような感じですが、質問者さまの意図が正しくくみ取れていますでしょうか。
ちなみに、上では、rgb2grayをしてから平均を計算されていたと思いましたが、
グレースケール化には、以下のような変換式をが使われています。
そのため、厳密にRGBの平均をとって計算しているわけではないので、
注意が必要です。
gray_image=0.2989 * R + 0.5870 * G + 0.1140 * B ;
Asaka Masahiro
Asaka Masahiro on 17 Sep 2019
詳しい回答ありがとうございます。
ほぼ私が求める通りのものです。
非常に助かりました。

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!