ラベリングした画像のラベルごとの面積を求めるにはどうしたらよいですか?
조회 수: 20 (최근 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!