画像の輝度を0~256で表すコード

15 views (last 30 days)
suzuka iwaki
suzuka iwaki on 22 Nov 2023
Answered: Akira Agata on 22 Nov 2023
jpegFiles = dir('*.jpg');
numfiles = 300; %フォルダ内のファイルの数
mydata = cell(1, numfiles);
T = table((1:numfiles)', zeros(numfiles,1), 'VariableNames', {'Serial_No.', 'meanLuminance'})%表作成
for k = 1:numfiles
mydata{k} = imread(jpegFiles(k).name);
RGB = imread(jpegFiles(k).name);
graying = rgb2gray(RGB);%グレースケール化
meanLuminance = mean(graying,"all")%平均輝度値を求める
T{k,2} = meanLuminance
end
現在、上のコードで複数枚の画像の一枚ずつの平均輝度を求めているのですが、このコードで計算された結果は、0~256の値で表されていますか。

Accepted Answer

Akira Agata
Akira Agata on 22 Nov 2023
単純に「はい」か「いいえ」で答えられないご質問ですので、順を追って説明します。
まず、対象画像がすべて 8 bit 画像の場合、画像は uint8 型の数値配列として読み込まれます。これを rgb2gray で変換すると同じく uint8 型の配列となるため、mean(graying,"all") とすると 0~255 の値が返ってきます。その意味ではご質問の回答は「はい」と言うこともできます。ただ、もしご質問の意図が「0~255 の uint8 型ですか?」であれば、回答は「いいえ」となります。理由は、以下のとおり double 型の値として返ってくるためです。
% uint8 型の配列 [1, 2, ..., 10] の平均
avg = mean(uint8(1:10));
disp(avg)
5.5000
あるいは、場合によっては対象画像が 12 bit 又は 16 bit である可能性もあります。その場合、読み込んだ結果は uint16 型の数値配列となるため、mean で平均をとると 255 以上となる可能性があります。このため、画像が 8 bit でない場合、回答は「いいえ」となります。

More Answers (0)

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!