2017-02-10 5 views
2

私はバイナリイメージ:numpy.ndarray(dtype=bool)を持っています。それはTrueの値で満たされた数百の接続された領域を持っています。Python:元のピクセルの位置を知っていれば、接続されているすべてのピクセルを見つける方法は?

しかし、私は1つの地域だけに興味があります。私はその要素の1つの位置を知っていて、この関心領域の境界ボックス(およびおそらくこの領域の他の点の位置)を探したいと思います。

どのような方法が最適ですか?

答えて

0

画像のサイズによっては、画像にラベルを付けてすべての接続コンポーネントにするのが最も簡単です。既知のピクセルのラベルを使用して、接続されたピクセルも取得します。 skimageは、skimage.measure.labelskimage.measure.regionpropsを使ってこれを実際に簡単にします。 connectivityまたはneighborsのパラメータがlabelになっていることを理解しておいてください。これは、対角隣接が接触するかどうかに影響します。

from skimage import measure 
import numpy as np 

# load array; arr = np.ndarray(...) 
# arr = np.zeros((10,10), dtype=bool) 
# arr[:2,:2] = True 
# arr[-4:,-4:] = True 

labeled = measure.label(arr, background=False, connectivity=2) 
label = labeled[8,8] # known pixel location 

rp = measure.regionprops(labeled) 
props = rp[label - 1] # background is labeled 0, not in rp 

props.bbox # (min_row, min_col, max_row, max_col) 
props.image # array matching the bbox sub-image 
props.coordinates # list of (row,col) pixel indices 
関連する問題