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

10 ビュー (過去 30 日間)
suzuka iwaki
suzuka iwaki 2023 年 11 月 22 日
回答済み: Akira Agata 2023 年 11 月 22 日
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の値で表されていますか。

採用された回答

Akira Agata
Akira Agata 2023 年 11 月 22 日
単純に「はい」か「いいえ」で答えられないご質問ですので、順を追って説明します。
まず、対象画像がすべて 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 でない場合、回答は「いいえ」となります。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

タグ

製品


リリース

R2023b

Community Treasure Hunt

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

Start Hunting!