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

5 ビュー (過去 30 日間)
貫
2024 年 9 月 12 日
コメント済み: 2024 年 9 月 13 日
画像のように様々なunit16の整数配列が1×30cellに格納されています.
このcellに格納されているunit16配列のすべて(30個分)を含めた画素値のヒストグラムを作成したいと考えておりますが,どのようにすればよいのかが分かりません.
教えていただけると幸いです.

採用された回答

Kojiro Saito
Kojiro Saito 2024 年 9 月 12 日
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 件のコメント
Akira Agata
Akira Agata 2024 年 9 月 12 日
+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)
貫
2024 年 9 月 13 日
それぞれの方法で目的のヒストグラムを作成することができました.
ありがとうございました!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeビッグ データの処理 についてさらに検索

タグ

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!