1

私は大きな問題の前に立っています。PythonライブラリのNumPyとSciPyを使用して、大規模な配列でいくつかの機能を特定しました。この目的のために、3x3の隣接構造を作成し、それを連結成分分析に使用しました->ドキュメントを参照してください。

struct = scipy.ndimage.generate_binary_structure(2,2)
labeled_array, num_features = ndimage.label(array,struct)

今の私の問題は、識別されたすべての機能をループで繰り返し処理したいということです。結果のNumPy配列の個々の機能に対処する方法を誰かが知っていますか?

4

2 に答える 2

3

ndimage.labelで識別される機能の処理例を次に示します。これが役立つかどうかは、機能で何をしたいかによって異なります。

import numpy as np
import scipy.ndimage as ndi
import matplotlib.pyplot as plt


# Make a small array for the demonstration.
# The ndimage.label() function treats 0 as the "background".
a = np.zeros((16, 16), dtype=int)
a[:6, :8] = 1
a[9:, :5] = 1
a[8:, 13:] = 2
a[5:13, 6:12] = 3

struct = ndi.generate_binary_structure(2, 2)
lbl, n = ndi.label(a, struct)

# Plot the original array.
plt.figure(figsize=(11, 4))
plt.subplot(1, n + 1, 1)
plt.imshow(a, interpolation='nearest')
plt.title("Original")
plt.axis('off')

# Plot the isolated features found by label().
for i in range(1, n + 1):
    # Make an array of zeros the same shape as `a`.
    feature = np.zeros_like(a, dtype=int)

    # Set the elements that are part of feature i to 1.
    # Feature i consists of elements in `lbl` where the value is i.
    # This statement uses numpy's "fancy indexing" to set the corresponding
    # elements of `feature` to 1.
    feature[lbl == i] = 1

    # Make an image plot of the feature.
    plt.subplot(1, n + 1, i + 1)
    plt.imshow(feature, interpolation='nearest', cmap=plt.cm.copper)
    plt.title("Feature {:d}".format(i))
    plt.axis('off')

plt.show()

スクリプトによって生成された画像は次のとおりです。

ここに画像の説明を入力してください

于 2012-09-24T02:54:44.183 に答える
1

上記の問題を解決するための別の方法について簡単に説明します。NumPyの「ファンジーインデックス」を使用する代わりに、ndimageの「find_objects」関数を使用することもできます。例:

# Returns a list of slices for the labeled array. The slices represent the position of features in the labeled area 
s = ndi.find_objects(lbl, max_label=0)
# Then you can simply output the patches  
for i in n:
    print a[s[i]]

追加の問題を解決できなかったので、質問は開いたままにしておきます。特徴のサイズ(すでに解決済みで、ndi.sum()を使用すると非常に簡単です)と、特徴のすぐ近くにあるラベルなしセルの数(特徴の周りのゼロの数を数えるエルゴ)を取得したいと思います。

于 2012-09-24T11:37:49.540 に答える