-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