cell配列中のすべ​ての整数配列(画像)​を含めたヒストグラム​の出し方

4 Ansichten (letzte 30 Tage)
貫
am 12 Sep. 2024
Kommentiert: am 13 Sep. 2024
画像のように様々なunit16の整数配列が1×30cellに格納されています.
このcellに格納されているunit16配列のすべて(30個分)を含めた画素値のヒストグラムを作成したいと考えておりますが,どのようにすればよいのかが分かりません.
教えていただけると幸いです.

Akzeptierte Antwort

Kojiro Saito
Kojiro Saito am 12 Sep. 2024
cell配列の要素ごとに処理するにはcellfun関数を使います。cropに格納されている画像サイズがまちまちなので、まずcellfunimhistでヒストグラムを求めた後、ヒストグラムのカウントとビンの数を使ってstem関数で描く方法でいかがでしょうか。
下記の例はuint8の画像の例です。
img1 = imread('peppers.png');
img2 = imread('cameraman.tif');
crop = cell(1, 2);
crop{1} = img1;
crop{2} = img2;
% セル配列ごとに画像ヒストグラムを計算
[counts, binLocations] = cellfun(@imhist, crop, UniformOutput = false);
% 輝度値ごとのピクセル数を足し合わせ
tempVar = sum([counts{:}], 2);
% ヒストグラムを作成
stem(binLocations{1}, tempVar, Marker="none")
xlim([0 255]) % uint16なら[0 65535]とかにする
  2 Kommentare
Akira Agata
Akira Agata am 12 Sep. 2024
+1
別のやり方として、いったんcell配列内の画素値をすべて一列に並べた数値配列を作成して、そのヒストグラムを描画するというやり方でも良いかと思います。以下はその一例です。
% サイズの異なるuint16配列を要素として持つセル配列の一例
img1 = randi(intmax("uint16"), 10, 20, "uint16");
img2 = randi(intmax("uint16"), 30, 40, "uint16");
crop = {img1, img2};
% 念のため確認してみる
crop
crop = 1x2 cell array
{10x20 uint16} {30x40 uint16}
% すべての画素値を一列にならべた数値配列を作成
c = cellfun(@(x) x(:), crop', UniformOutput = false);
c = cell2mat(c);
% ヒストグラムを表示
figure
histogram(c)
貫
am 13 Sep. 2024
それぞれの方法で目的のヒストグラムを作成することができました.
ありがとうございました!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu ビッグ データの処理 finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!