ラベリングした画像のラベルごとの面積を求めるにはどうしたらよいですか?
22 次查看(过去 30 天)
显示 更早的评论
バイナリイメージの白の部分の面積を求め,一定の閾値より小さいものを削除するプログラムを作成するために,ラベリング処理をしてラベルごとの面積を求めようとしているのですが方法がわかりません.
上記のページを参考にしているのですが,このページだと例えばラベル1は6ピクセル,ラベル2は6ピクセル,ラベル3だけ5ピクセルなのでラベル3の部分を0に置き換えるようなプログラムを作ろうとしています.
0 个评论
采纳的回答
Tohru Kikawada
2017-12-22
3 个评论
Tohru Kikawada
2017-12-25
%%元画像の読み込み(グレイスケール)
G = imread('coins.png');
figure, imshow(G);
%%2値化
BW = imbinarize(G);
BW2 = imfill(BW,'holes');
figure, imshow(BW2);
%%面積が2000ピクセル以下を抽出
CC = bwconncomp(BW2);
stats = regionprops('table',CC,'Area','Centroid');
figure, histogram(stats.Area,10);
idx = stats.Area <= 2000
%%2000ピクセル以下の領域を0にする
% 2000ピクセルを超える領域だけを抽出する
BW3 = ismember(labelmatrix(CC), find(~idx));
figure, imshowpair(BW2,BW3,'montage');
%%2000ピクセル以下の領域の輝度値の和
% 領域ごとの輝度値の和を求める
L = labelmatrix(CC)+1; % ラベルを1はじまりにするため+1
A = accumarray(L(:),double(G(:))); % ラベルごとの累積値計算
A = A(2:end); % 0に相当する項目(黒)を除去
% 面積が2000ピクセル以下の累積値を可視化
Iout = G;
BW4 = ismember(labelmatrix(CC), find(idx));
Iout(~BW4) = 0; % 該当箇所以外すべて0にする
Iout = insertText(Iout,stats.Centroid(idx,:),cellstr(num2str(A(idx))));
figure, imshow(Iout);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 領域とイメージのプロパティ 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!