想法如何使用python测量骨架的长度

时间:2015-11-29 05:35:11

标签: python image-processing scipy scikit-image

skeletonization应用于图片(),enter image description here

我想使用python测量最长的分支或骨架的脊柱。 ImageJ有几个工具可以完成这项工作,其中一个是Measure_Skeleton_length,另一个是AnalyzeSkeleton。 python中的任何工具或建议?

2 个答案:

答案 0 :(得分:2)

这是对原始问题的很晚答复,但以防万一仍然需要帮助的人可能最终阅读了这篇文章。有一个很棒的python软件包,用于分析骨架,称为FilFinderpip install fil_finder),可以很好地解决此问题。以下是他们的tutorial

采用的代码
import numpy as np
import cv2
import matplotlib.pyplot as plt
from fil_finder import FilFinder2D
import astropy.units as u

skeleton = ... #in numpy array format

fil = FilFinder2D(skeleton, distance=250 * u.pc, mask=skeleton)
fil.preprocess_image(flatten_percent=85)
fil.create_mask(border_masking=True, verbose=False,
use_existing_mask=True)
fil.medskel(verbose=False)
fil.analyze_skeletons(branch_thresh=40* u.pix, skel_thresh=10 * u.pix, prune_criteria='length')

plt.imshow(fil.skeleton, cmap='gray')
plt.contour(fil.skeleton_longpath, colors='r')
plt.axis('off')
plt.show()

输出

enter image description here

答案 1 :(得分:1)

我不知道python工具,但是从算法的角度来看这是一种方法:

  1. 检测所有极端像素(分支上的最后一个像素,因此只有一个邻居的像素)
  2. 对于每个这些像素,计算一个测地距离图。
  3. 然后,您在地图计算过程中找到的最大距离将是您想要的距离。第1点是基本编码,因此您可以在Python中完成,但您必须找到第2点的库。