3

二値化された画像を考えてみましょう。私はscipy.ndimage.label()それを使用し、結果に を適用しますfind_objects()

これで、N 個のタプルで構成されるタプル リストが得られました。それぞれのタプルは、次のように 2 つのスライスです。

index  value
 0   (slice(0, 21, None) slice(0, 12, None)) 
 1   (slice(0, 42, None) slice(7, 31, None))
 .   (...., ....)

これは、連結成分による xy 境界座標を記述します。

例として、インデックス 0 のタプルを取り上げます。

slice(0, 21, None)行番号が0〜21であることを意味し、

slice(0, 12, None)列番号が 0 ~ 12 であることを意味します。

したがって、この cc の面積は であることがわかり21 * 12 = 252ます。

ここで、面積が 300 より小さい連結要素を削除したいと思います。

私はすでに、それらすべてに対してこの反復を行うことを知っています。もっと効率的な方法でやりたいです。誰もそれを行う方法を知っていますか?

4

1 に答える 1

3

このコードを使用すると、私の問題が解決します:

def CC(Map):
    label_img, cc_num = ndimage.label(Map)
    CC = ndimage.find_objects(label_img)
    cc_areas = ndimage.sum(Map, label_img, range(cc_num+1))
    area_mask = (cc_areas < 1500)
    label_img[area_mask[label_img]] = 0
return label_img, CC

私の意見では、area_mask[label_img] が最も重要なマスク トリックです。

于 2014-05-31T15:05:48.127 に答える