-1

我從二進制圖像創建骨骼圖像,like that如何獲得骨架的座標點?

我檢測與mahotas Python庫是骨骼的終點,但它返回我與終點值1全圖像陣列和零其他人。 我更喜歡檢測端點的座標。 我怎樣才能得到他們?

我是計算終端代碼:

branch1=np.array([[2, 1, 2], [1, 1, 1], [2, 2, 2]]) 
branch2=np.array([[1, 2, 1], [2, 1, 2], [1, 2, 1]]) 
branch3=np.array([[1, 2, 1], [2, 1, 2], [1, 2, 2]]) 
branch4=np.array([[2, 1, 2], [1, 1, 2], [2, 1, 2]]) 
branch5=np.array([[1, 2, 2], [2, 1, 2], [1, 2, 1]]) 
branch6=np.array([[2, 2, 2], [1, 1, 1], [2, 1, 2]]) 
branch7=np.array([[2, 2, 1], [2, 1, 2], [1, 2, 1]]) 
branch8=np.array([[2, 1, 2], [2, 1, 1], [2, 1, 2]]) 
branch9=np.array([[1, 2, 1], [2, 1, 2], [2, 2, 1]]) 

endpoint1=np.array([[0, 0, 0], [0, 1, 0], [2, 1, 2]]) 
endpoint2=np.array([[0, 0, 0], [0, 1, 2], [0, 2, 1]]) 
endpoint3=np.array([[0, 0, 2], [0, 1, 2], [0, 2, 1]]) 
endpoint4=np.array([[0, 2, 1], [0, 1, 2], [0, 0, 0]]) 
endpoint5=np.array([[2, 1, 2], [0, 1, 0], [0, 0, 0]]) 
endpoint6=np.array([[1, 2, 0], [2, 1, 0], [0, 0, 0]]) 
endpoint7=np.array([[2, 0, 0], [1, 1, 0], [2, 0, 0]]) 
endpoint8=np.array([[0, 0, 0], [2, 1, 0], [1, 2, 0]]) 

jpg = 'skel.jpg' 
skel = cv2.imread(jpg, 0) 

sk = pymorph.binary(skel) 

complete_path = 'skel.jpg' 
print pymorph.gray(sk).dtype 


br1=mah.morph.hitmiss(sk,branch1) 
br2=mah.morph.hitmiss(sk,branch2) 
br3=mah.morph.hitmiss(sk,branch3) 
br4=mah.morph.hitmiss(sk,branch4) 
br5=mah.morph.hitmiss(sk,branch5) 
br6=mah.morph.hitmiss(sk,branch6) 
br7=mah.morph.hitmiss(sk,branch7) 
br8=mah.morph.hitmiss(sk,branch8) 
br9=mah.morph.hitmiss(sk,branch9) 

ep1=mah.morph.hitmiss(sk,endpoint1) 
ep2=mah.morph.hitmiss(sk,endpoint2) 
ep3=mah.morph.hitmiss(sk,endpoint3) 
ep4=mah.morph.hitmiss(sk,endpoint4) 
ep5=mah.morph.hitmiss(sk,endpoint5) 
ep6=mah.morph.hitmiss(sk,endpoint6) 
ep7=mah.morph.hitmiss(sk,endpoint7) 
ep8=mah.morph.hitmiss(sk,endpoint8) 

br=br1+br2+br3+br4+br5+br6+br7+br8+br9 
ep=ep1+ep2+ep3+ep4+ep5+ep6+ep7+ep8 

BR和EP與所有分支機構的陣列和端點從我想要得到的座標。

+0

我想,這是不是你的代碼http://dip4fish.blogspot.fr/2011/04/detecting-end-points-in-skeleton.html – 2013-05-17 11:11:52

回答

3

因此ep應該只是一個二進制numpy數組,只有在您的端點座標1?在這種情況下,您可以使用numpy.wherenumpy.nonzero得到非零值的索引中ep

pseudo_ep = (np.random.rand(512,512) > 0.9) 
rows,cols = np.where(pseudo_ep) 

這些應該對應Y,X你的端點座標

+0

太棒了,它的作品也有很多要點! – improc 2013-04-10 10:12:32

+1

請參閱http://dip4fish.blogspot.fr/2011/04/testing-hit-and-miss-with-mahotas-064.html上的評論 – 2013-05-17 11:15:06