2016-07-12 9 views
0

2つの接続コンポーネントがあるバイナリイメージがあります。どちらもかなり水平で、1つは画像の上にあり、もう1つは下にあります。私がする必要があるのは、セントロイドのy値が最も小さいコンポーネントを取り出すことです(これは、MATLABがJavaを使用してイメージを表示するため、原点は左上にあります)、もう一方のコンポーネントを消去します。これまでのところ、regionpropsを使用してセントロイドの最も低いy値を持つ領域を見つけましたが、そこから、私が必要とするコンポーネントでバイナリイメージを再度取得する方法がわかりません。重心のy値が最も小さい領域を取得する方法

私はbwconncomplabelmatrix、およびismemberは有用であるが、私は(あまりまたは全く)だけでなく、それらを使用する方法が非常にわからないことを文書で読みました。

+0

保存したいコンポーネントの「PixelIdxList」がありますか? – beaker

+0

私は両方のコンポーネントに 'PixelIdxList'を持っています。私は 'regionprops'からの情報を使って、どのPixelIdxListを選択するのかを分かりません。 – nbingo

答えて

1

これは私が作成した解決策ですが、それよりも優れた、またはより優雅なものがあれば、それについて知りたいです!

P.S. filteredは私の画像です

connComp = bwconncomp(filtered); 

props = regionprops(filtered, 'Centroid'); 

justTop = zeros(size(filtered,1), size(filtered,2)); 
if props(1).Centroid(2) > props(2).Centroid(2) 
    justTop(connComp.PixelIdxList{2}) = 1; 
else 
    justTop(connComp.PixelIdxList{1}) = 1; 
end` 
+0

2つ以上の領域がある場合、たとえば、ノイズなどにより、この方法は失敗します。それを処理するには、検出された領域の領域を確認し、最大の2つの領域程度を比較する必要があるでしょう。さもなければ、これはうまく動作します! – hbaderts

+0

@hbadertsありがとう!それは私が投稿した後にしばらくして起こったので、私はおそらくそのようなことをするつもりです。しかし、それをより明確にしてくれてありがとう! – nbingo

+0

喜んで助けてください。ここであなたの答えを共有してくれてありがとう、それは将来同じ問題を持つ他の人を助けることができます。 – hbaderts

関連する問題