【问题标题】:How can i get coordinates point of a skeleton?如何获取骨架的坐标点?
【发布时间】:2013-04-01 16:14:42
【问题描述】:

我从二进制图像创建骨架图像,like that

我使用 mahotas python 库检测到骨骼的端点,但它返回完整的图像数组,端点值为 1,其他值为 0。 我更喜欢检测端点的坐标。 我怎样才能得到它们?

我的计算端点的代码:

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 是我想要获取坐标的所有分支和端点的数组。

【问题讨论】:

标签: python opencv image-processing mathematical-morphology scikit-image


【解决方案1】:

所以ep 应该只是一个二进制numpy 数组,仅在您的端点坐标处为1?在这种情况下,您可以使用numpy.wherenumpy.nonzero 来获取ep 中非零值的索引:

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

这些应该对应于端点的 y,x 坐标

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2019-01-05
  • 2010-11-29
  • 1970-01-01
  • 2021-09-23
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多