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 CenterFile Exchange에서 ビッグ データの処理에 대해 자세히 알아보기

태그

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!