画像の輝度を0~256で表すコード
13 views (last 30 days)
Show older comments
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の値で表されていますか。
0 Comments
Accepted Answer
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)
あるいは、場合によっては対象画像が 12 bit 又は 16 bit である可能性もあります。その場合、読み込んだ結果は uint16 型の数値配列となるため、mean で平均をとると 255 以上となる可能性があります。このため、画像が 8 bit でない場合、回答は「いいえ」となります。
0 Comments
More Answers (0)
See Also
Categories
Find more on 大規模なイメージ ファイル in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!