2012-01-09 16 views
2

scipy.ndimage.measurements.labelというラベルの付いたオブジェクトの配列がLabelsとなっています。他の配列DataにはLabelsに関連するものが含まれています。どのように私は xに最寄りのラベルをマッピングするのに役立つ可能性が3番目の配列Neighbourhoodsを作ることができ、Y L LabelsData考えるScipyラベルの近傍

、どのように私はNeighbourhoodsを取得するのpython/numpyの/ scipyのダウンロードを使用することができますか?

Labels = array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
       [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
       [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
       [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
       [0, 0, 0, 0, 0, 0, 2, 2, 2, 0], 
       [0, 0, 0, 0, 0, 0, 2, 2, 2, 0], 
       [0, 0, 0, 0, 0, 0, 2, 2, 2, 0], 
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) 

Data = array([[1, 1, 1, 1, 1, 1, 2, 3, 4, 5], 
       [1, 0, 0, 0, 0, 1, 2, 3, 4, 5], 
       [1, 0, 0, 0, 0, 1, 2, 3, 4, 4], 
       [1, 0, 0, 0, 0, 1, 2, 3, 3, 3], 
       [1, 0, 0, 0, 0, 1, 2, 2, 2, 2], 
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
       [2, 2, 2, 2, 2, 1, 0, 0, 0, 1], 
       [3, 3, 3, 3, 2, 1, 0, 0, 0, 1], 
       [4, 4, 4, 3, 2, 1, 0, 0, 0, 1], 
       [5, 5, 4, 3, 2, 1, 1, 1, 1, 1]]) 

Neighbourhoods = array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
         [1, 0, 0, 0, 0, 1, 1, 1, 1, 1], 
         [1, 0, 0, 0, 0, 1, 1, 1, 0, 2], 
         [1, 0, 0, 0, 0, 1, 1, 0, 2, 2], 
         [1, 0, 0, 0, 0, 1, 0, 2, 2, 2], 
         [1, 1, 1, 1, 1, 0, 2, 2, 2, 2], 
         [1, 1, 1, 1, 0, 2, 0, 0, 0, 2], 
         [1, 1, 1, 0, 2, 2, 0, 0, 0, 2], 
         [1, 1, 0, 2, 2, 2, 0, 0, 0, 2], 
         [1, 1, 2, 2, 2, 2, 2, 2, 2, 2]]) 

注:デビッドZaslavskyによって示唆されるように、私は、上記Neighbourhoods

+0

が鳴り、もののNumpy/Scipyで計算する関数があれば、それはわかりません。私はすばらしいGoogle検索を行い、Numpy/Scipyの本物では何も見つかりませんでしたが、ブログ記事などがあります。 –

答えて

2

でそのように使用ゼロタイでどうするかわからないんだけど、これはvoroni図のための仕事です。ここにnumpyの実装があります:http://blancosilva.wordpress.com/2010/12/15/image-processing-with-numpy-scipy-and-matplotlibs-in-sage/

関連する関数はscipy.ndimage.distance_transform_edtです。 return_indicesオプションがあり、必要な処理を行うことができます(例ではdata)。一例として、

import numpy as np 
from scipy.ndimage import distance_transform_edt 

labels = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
        [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
        [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
        [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
        [0, 1, 1, 1, 1, 0, 0, 0, 0, 0], 
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
        [0, 0, 0, 0, 0, 0, 2, 2, 2, 0], 
        [0, 0, 0, 0, 0, 0, 2, 2, 2, 0], 
        [0, 0, 0, 0, 0, 0, 2, 2, 2, 0], 
        [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) 
i, j = distance_transform_edt(labels == 0, return_distances=False, 
           return_indices=True) 
neighborhoods = labels[i,j] 
print neighborhoods 

この利回り:あなたは[ボロノイ図](http://en.wikipedia.org/wiki/Voronoi_diagramを)したいよう

array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
     [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
     [1, 1, 1, 1, 1, 1, 1, 1, 1, 2], 
     [1, 1, 1, 1, 1, 1, 1, 1, 2, 2], 
     [1, 1, 1, 1, 1, 1, 1, 2, 2, 2], 
     [1, 1, 1, 1, 1, 1, 2, 2, 2, 2], 
     [1, 1, 1, 1, 1, 2, 2, 2, 2, 2], 
     [1, 1, 1, 1, 2, 2, 2, 2, 2, 2], 
     [1, 1, 1, 2, 2, 2, 2, 2, 2, 2], 
     [1, 1, 2, 2, 2, 2, 2, 2, 2, 2]]) 
+1

私は記事から関連部分を追加しました。希望は大丈夫です! –

+0

+1もちろん:) – ajwood

関連する問題