2015-12-01 136 views
0

所以我有這樣的地圖: original map近似多邊形

我已經做了一些篩選,現在我有如下形象: filtered map

最後,我想找到圖像中每個多邊形的座標,但是使用find_contours函數並沒有給出好的結果,如下圖所示。

在左側,您可以看到找到的所有輪廓(多邊形)(每種顏色),在右側,它是找到的多邊形的一個示例(顯然是錯誤的)。 contours

有了黑白圖像,我怎麼找到每個多邊形的座標呢?

+0

那麼相鄰的多邊形將會在邊界上共享點? – Miki

+0

分享要點並非嚴格必要。它的確定,如果他們只是足夠接近 – Ivan

+0

我知道你不使用的OpenCV(但可能是一些功能在一些Python包中實現。)看一看[這裏](http://docs.opencv.org/master/ D3/DB4/tutorial_py_watershed.html#gsc.tab = 0)。您可以使用分水嶺查找所有封閉區域,然後可以分別找到每個區域的輪廓。 – Miki

回答

0

所以當我下載圖像時,我得到了一個非常不相交的圖像。所以我做的是我擴大了它。

import numpy as np 
from skimage import io, measure, morphology 

img = io.imread('img.png', as_grey=True) 
img = morphology.binary_dilation(img, selem=np.ones((5,5))) 

那麼我所做的就是我倒有黑色白線和區域爲白色與此

img_inverted = np.invert(img) 

一旦你的倒影,它貼上標籤,便於處理。

img_inverted_labeled = measure.label(img_inverted) 
n_lbls = np.unique(img_inverted_labeled)[1:] 

現在追加每個零件的多邊形。

pols = [] 
for i in n_lbls: 
    img_part = (img_inverted_labeled == i) 
    pols.append(measure.find_contours(img_part, level=0)[0]) 

希望這會有所幫助。