2016-09-29 17 views
0

私はこのhttp://www.mathworks.com/videos/edge-detection-with-matlab-119353.htmlMatlab:イメージ領域アナライザ。 'bwpropfilt'の代わりに?

成功しedge作品に基づいてウィンドウの領域を検出するための基本的なエッジ検出を実行している:プロパティに基づいて画像をフィルタリングするには、これらの次のコードに来るとき、それは、

final_edge = edge(gray_I,'sobel'); 
BW_out = bwareaopen(imfill(final_edge,'holes'),20); 
figure; 
imshow(BW_out); 

私のようですMATLAB R2013aこのbwpropfiltメソッドを識別できません。

% imageRegionAnalyzer(BW); 

% Filter image based on image properties 
BW_out = bwpropfilt(BW_out,'Area', [400, 467]); 
BW_out = bwpropfilt(BW_out,'Solidity',[0.5, 1]); 

それは言う:

Undefined function 'bwpropfilt' for input arguments of type 'char'.

次に何がこのbwpropfiltを変更するには、私の代替すべきですか?

答えて

2

bwpropfiltは、regionpropsから出力される対応する属性を調べるだけで、その特定の範囲に準拠するオブジェクトを提供し、範囲外のオブジェクトも除外します。 regionpropsを明示的に呼び出すことによって、logical配列を作成して構造体にインデックスを付けることで、調べたいプロパティに対応する正しい範囲(第3の入力bwpropfilt)にある値のみを保持することができますbwpropfiltの入力)。フィルタリング後に最終的にイメージを再構成する場合は、PixelIdxList属性にある列の主な線形インデックスを使用し、すべてを単一のベクトルにスタックし、これらの値をすべてtrueに設定して新しい出力イメージに書き込む必要があります。

具体的には、あなたが示されているコードの最後の2行を再現するために、次のコードを使用することができます。

% Run regionprops and get all properties 
s = regionprops(BW_out, 'all'); 

%%% For the first line of code 
values = [s.Area]; 
s = s(values > 400 & values < 467); 

%%% For the second line of code 
values = [s.Solidity]; 
s = s(values > 0.5 & values < 1); 

% Stack column major indices 
ind = vertcat(s.PixelIdxList); 

% Create output image 
final_out = false(size(BW_out)); 
final_out(ind) = true; 

final_outは、所望のプロパティで指定された範囲内の値を保持するフィルタリングされた画像を含んでいます。

注意

上記の論理だけのユニークな地域ごとに1つだけのスカラー値が含まれているregionpropsから返された属性のために動作します。 bwpropfiltにあるサポートされているプロパティを調べると、このリストはregionpropsにある完全なリストのサブセットであることがわかります。これは特定のregionpropsプロパティが選択する内容に応じてベクトルまたは行列を返すので意味があります。regionpropsによって返される特定の一意の領域を特徴付ける複数の値を持つ場合、範囲を使用してプロパティをフィルタリングして曖昧になります。

マイナー注

好奇心旺盛なので、私は現在、MATLAB R2016aを持っているとして、それが実装されている方法を確認するためにbwpropfiltを開きました。上記のロジックは、いくつかの例外処理を除いて、本質的にどのようにbwpropfiltが実装されているので、私が書いたコードは関数のロジックに沿っています。

+1

私はあなたのプロフィールのまわりをさまよっていました。あなたは生きているアインシュタインです! Btw、ありがとう! –

+1

@ Hey-men-whatsup haha​​haあなたはあまりにも親切です:)私は自分自身をEinsteinと呼んでいません。いずれにせよ、感情のために非常に感謝し、あなたは非常に歓迎しています。がんばろう! – rayryeng

関連する問題