2012-03-03 3 views
3

私は親切にこの質問にunutbuとジョーキングトンによって寄与方法を使用してオブジェクト(スライス)に分割された画像た:Rectangular bounding box around blobs in a monochrome image using pythonを、次の形式をとり、これらのオブジェクトのリストを持っている:重複したイメージのスライスをリストからどのように見つけて削除できますか?

the_blobs = [(slice(dy.start, dy.stop, None), slice(dx.start, dx.stop, None))] 

dy.startを開始yピクセル値を与え、dy.stopは最終的なyピクセル値を与え、dxについても同じ処理を行う。

リストの中には、重なり合ういくつかのオブジェクト、すなわち、1つの小さなオブジェクト(正方形)が円のような大きなオブジェクト内にあるものがあります。これが発生すると、リストから「囲まれた」オブジェクトを削除したい(サークルには既に含まれているため)。

現在のリスト

the_blobs = [(slice(100L, 1000L, None), slice(100L, 1000L, None)), 
(slice(150L, 220L, None), slice(150L, 220L, None)), 
(slice(1001L, 2000L, None), slice(1500L, 1700L, None)), 
(slice(2001L, 2200L, None), slice(1800L, 1890L, None))] 

理想リスト(オブジェクトで除去)

the_blobs = [(slice(100L, 1000L, None), slice(100L, 1000L, None)), 
(slice(1001L, 2000L, None), slice(1500L, 1700L, None)), 
(slice(2001L, 2200L, None), slice(1800L, 1890L, None))] 

Iは、上記問題の一部として提案は、以下のコードを使用するようになされたことに注意してください:

data_slices = ndimage.find_objects(coded_paws) 
for s in data_slices: 
    filled[s] = True 
coded_paws, num_paws = ndimage.label(filled) 
data_slices = ndimage.find_objects(coded_paws) 

しかし、これは100%の時間では動作していないようで、元の質問の範囲を少し超えています。この部分を別の具体的な質問として再開しています。

私はこれをどのように達成することができますか?

objects as shown in list

EDIT:こここの

enter image description here

を返す処理上のコード

enter image description here

で動作しない実際の画像例です

enter image description here

理想的には私はもちろん、あなたが他のすべての塊に対して、各ブロブをチェックし、それかどうかを判断O(N^2)のアプローチを取ることができ、スライス

答えて

1

のリストから最後の画像を削除したいですblob1.dx.start > blob2.dx.start and blob1.dy.start > blob2.dy.start and blob1.dx.stop < blob2.dx.stop and blob1.dy.stop < blob2.dy.stopかどうかをチェックして削除する必要があります(この条件が真であれば、リストからblob1を削除しても問題ありません)。あなたの総ブロブ数がかなり低い場合、私は何かが欠けていない限り、これはうまくいくはずです。

最適化されたソリューションを探している場合は、そこにあるブロブの数とその状態がどれほど共通しているかを知ることは役に立ちます。

関連する問題