多边形斑点的中心线(二值图像)

centerline of a polygonal blob (binary image)

我有一个蠕虫的二值图像(blob 提取效果很好)。 我有兴趣在斑点(蠕虫)上拟合一条中心线。

到目前为止我想到了这个:从一个多边形开始(在图像中提取 blob 的轮廓之后)我应用了 voronoi 计算并丢弃了多边形(蓝色)之外的所有顶点,这给了我黑色我可以进一步使用中心线来拟合平滑的中心线。

但是,此计算一点也不稳健(由于删除了不在多边形内部的 voronoi 顶点?)有人知道获取多边形中心线或 blob 对象(二值图像)中心线的算法工作流程吗. (骨架化?,使用内边中点对多边形进行三角剖分)

演示如下:

我找到了更好的解决方案:

  • skeltonize 二进制 blob
  • 通过追踪像素线和分支点
  • 构建骨架的 graph(无循环)
  • 获取从每个端节点到所有其他端节点的所有最短路径,并取最长的路径(大约是 blob 的起点和终点)
  • 从一个端节点(度=1)到另一个端节点的结果路径是蠕虫中线的近似值。

如果有人对解决方案感兴趣,我可能会分享一个 python 笔记本。 最终结果:绿色=最终中线图,深绿色=最终中线

骨架图

源代码:
这个问题的代码可以在这里找到:https://github.com/gabyx/WormAnalysis(如果你使用它请给它加注星标)