3

私は大きなnumpy配列を持っており、scipyで接続されたコンポーネントのラベル付けでラベル付けしました。今、この配列のサブセットを作成したいと思います。ここでは、サイズが最大または最小のラベルのみが残されています。もちろん、両方の極値が数回発生する可能性があります。

import numpy
from scipy import ndimage
....
# Loaded in my image file here. To big to paste
....
s = ndimage.generate_binary_structure(2,2) # iterate structure
labeled_array, numpatches = ndimage.label(array,s) # labeling
# get the area (nr. of pixels) of each labeled patch
sizes = ndimage.sum(array,labeled_array,range(1,numpatches+1)) 

# To get the indices of all the min/max patches. Is this the correct label id?
map = numpy.where(sizes==sizes.max()) 
mip = numpy.where(sizes==sizes.min())

# This here doesn't work! Now i want to create a copy of the array and fill only those cells
# inside the largest, respecitively the smallest labeled patches with values
feature = numpy.zeros_like(array, dtype=int)
feature[labeled_array == map] = 1

誰かが先に進む方法のヒントを教えてくれますか?

4

2 に答える 2

6

完全なコードは次のとおりです。

import numpy
from scipy import ndimage

array = numpy.zeros((100, 100), dtype=np.uint8)
x = np.random.randint(0, 100, 2000)
y = np.random.randint(0, 100, 2000)
array[x, y] = 1

pl.imshow(array, cmap="gray", interpolation="nearest")

s = ndimage.generate_binary_structure(2,2) # iterate structure
labeled_array, numpatches = ndimage.label(array,s) # labeling

sizes = ndimage.sum(array,labeled_array,range(1,numpatches+1)) 
# To get the indices of all the min/max patches. Is this the correct label id?
map = numpy.where(sizes==sizes.max())[0] + 1 
mip = numpy.where(sizes==sizes.min())[0] + 1

# inside the largest, respecitively the smallest labeled patches with values
max_index = np.zeros(numpatches + 1, np.uint8)
max_index[map] = 1
max_feature = max_index[labeled_array]

min_index = np.zeros(numpatches + 1, np.uint8)
min_index[mip] = 1
min_feature = min_index[labeled_array]

ノート:

  • numpy.whereタプルを返します
  • ラベル 1 のサイズはサイズ [0] であるため、結果に 1 を追加する必要があります。numpy.where
  • labeled_array複数のラベルを持つマスク配列を取得するには、ラベル マスク配列のインデックスとして使用できます。

結果:

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

于 2013-03-08T12:37:04.497 に答える