2016-11-24 87 views
-1

我使用python 2.7和我隨機生成的OpenCV的地區,在年底這個樣子的numpy的數組:有沒有一種方法可以用相同的元素「標記」一個numpy數組中的相鄰元素?

0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 1 1 1 0 0 0 0 0 0 
    0 0 0 0 0 1 1 1 0 0 0 0 0 0 
    0 0 0 0 0 1 1 0 0 0 0 0 0 0 
    0 0 0 0 0 1 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 

我實際上更大的矩陣工作,最多可生成5個區域。 我想要做的是閱讀產生的矩陣和「羣」的區域生成類似如下的第二矩陣:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 1 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 1 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 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 0 0 0 0 2 2 2 0 0 0 0 0 0 
    0 0 0 0 0 2 2 0 0 0 0 0 0 0 
    0 0 0 0 0 2 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 

因此,如果在最後我有5點編號的矩陣。 我對Python很新,但不知何故,我認爲這可能是一個簡單快捷的方法。我希望有一個人可以幫助我。

+2

對不起,這不是一個免費的寫作服務,你需要顯示你的努力和代碼。也就是說,我認爲沒有一種「簡單」的方法可以解決這個問題(「簡單」是完全主觀的),但我建議你先看看深度優先搜索或廣度優先搜索來確定你的羣體1由1 ...這也可以使用圖論來解決,確定圖的連通組件。 – Julien

+0

@Julien Bernu我在這裏可能是錯的,但似乎他正在尋求一個方向而不是免費代碼。即使您懷疑已經發明瞭(並且正確),您是否真的必須展示自己的努力重新發明輪子? – Headcrab

+0

@Headcrab是啊,這是一條很好的線......忽略這個事實,我不知道這個「輪子」已經存在了,人們可能會爭辯說,無論做什麼,你都必須表現出至少一點努力:試圖發明輪子,或者如果有人已經發明瞭它,就要努力尋找。 – Julien

回答

4

在SciPy的scipy.ndimage.label正是這麼做的

您需要定義後者評估結構元素屬於一個羣體,例如:

structure = [[1,1,1],[1,1,1],[1,1,1]] 

,如果你想找到那些在附近的元素包括對角線,或

structure = [[0,1,0],[1,1,1],[0,1,0]] 

如果你只需要留下一個點/右/上/下的人。請注意該函數返回兩個值,第一個是您請求的數組,第二個是找到的「標籤」的數量。

您可能會發現scipy.ndimage.measurements中的其他一些功能在這方面很有用。

相關問題