2012-01-30 25 views
4

バイナリイメージ(MATLAB)のさまざまな部分にラベルを付けるために、接続コンポーネントラベリングアルゴリズム(bwconncomp)を使用しました。今私は別のラベルの領域を計算し、より小さい領域でラベルを削除する必要があります。私はデフォルトのエリアコマンドを見つけるか、MATLABでそのための具体的なコマンドがありますを使用することができます...助けて...イメージの領域を見つける

+0

この[リンク](HTTPと仮定BWは、バイナリイメージです://blogs.mathworks.com/steve/2009/02/27/using-ismember-with-the-output-of-regionprops/)は、私が実際に探しているものです。ありがとうございます。 – meena

答えて

9

documentationから:

CC = bwconncomp(BW)が見つかり連結成分CCを返します。 BWで バイナリイメージBWは任意の次元を持つことができます。

[A] 1行NumObjectsセルアレイ内のk番目の要素:CCは 四つのフィールド...

CCの最後のフィールドがある、PixelIdxListあると構造でありますセル配列は、k番目のオブジェクトのピクセルの線形インデックスを含むベクトル です。

セル配列内の対応するエントリの長さを調べると、各ラベルの領域を見つけることができます。以下のようなもの:

areas_in_pixels = cellfun(@length, CC.PixelIdxList); 

PixelIdxListは、連結成分内に存在するピクセルの線形インデックスを含む各部材れたセルアレイです。上のコード行は、セル配列内の各セルの長さ、つまり、接続された各コンポーネントのピクセル数を検出します。

私はcellfunを使用してコードを短く効率的に保ちました。同じことを書いている別の方法は、のようになります。各連結成分に対して

areas_in_pixels = nan(1, length(CC.PixelIdxList); 
for i = 1:length(CC.PixelIdxList) 
    areas_in_pixels(i) = length(CC.PixelIdxList{i}); 
end 

、あなたはその後、areas_in_pixelsの要素にアクセスすることにより、ピクセル単位でそのコンポーネントのサイズを見つけることができます。

areas_in_pixels(34) %# area of connected component number 34 
+0

あなたは少し精巧にできますか?関数? – meena

+0

私はもう少し詳しく説明しました。これは関数の意味ですか? –

4

上記のようなコードをたくさん書いたくない場合は、MATLABの組み込み関数を使って領域を検出してください。コンポーネントにラベルを付け、コンポーネントのプロパティから、そのコンポーネントの領域を見つけることができます。あなたは、次のとループのために回避することにより、まだこれよりよくすることができます

[B,L] = bwboundaries(Bw,'noholes'); 
stats = regionprops(L,'Area','perimeter'); 

for k = 1:length(B) 
    area(k)=stats.Area; 
end 
+0

あなたの答えをありがとう.. :) – meena

+0

+1これはあなたがそれをやるべきである方法です。 –

2

[B,L] = bwboundaries(Bw,'noholes'); 
stats = regionprops(L,'Area','perimeter'); 
area = [stats.Area]; 

ベスト、 -Will

関連する問題