多边形斑点的中心线(二值图像)
centerline of a polygonal blob (binary image)
我有一个蠕虫的二值图像(blob 提取效果很好)。
我有兴趣在斑点(蠕虫)上拟合一条中心线。
到目前为止我想到了这个:从一个多边形开始(在图像中提取 blob 的轮廓之后)我应用了 voronoi 计算并丢弃了多边形(蓝色)之外的所有顶点,这给了我黑色我可以进一步使用中心线来拟合平滑的中心线。
但是,此计算一点也不稳健(由于删除了不在多边形内部的 voronoi 顶点?)有人知道获取多边形中心线或 blob 对象(二值图像)中心线的算法工作流程吗. (骨架化?,使用内边中点对多边形进行三角剖分)
演示如下:
我找到了更好的解决方案:
- skeltonize 二进制 blob
- 通过追踪像素线和分支点
构建骨架的 graph(无循环)
- 获取从每个端节点到所有其他端节点的所有最短路径,并取最长的路径(大约是 blob 的起点和终点)
- 从一个端节点(度=1)到另一个端节点的结果路径是蠕虫中线的近似值。
如果有人对解决方案感兴趣,我可能会分享一个 python 笔记本。
最终结果:绿色=最终中线图,深绿色=最终中线
骨架图
源代码:
这个问题的代码可以在这里找到:https://github.com/gabyx/WormAnalysis(如果你使用它请给它加注星标)
我有一个蠕虫的二值图像(blob 提取效果很好)。 我有兴趣在斑点(蠕虫)上拟合一条中心线。
到目前为止我想到了这个:从一个多边形开始(在图像中提取 blob 的轮廓之后)我应用了 voronoi 计算并丢弃了多边形(蓝色)之外的所有顶点,这给了我黑色我可以进一步使用中心线来拟合平滑的中心线。
但是,此计算一点也不稳健(由于删除了不在多边形内部的 voronoi 顶点?)有人知道获取多边形中心线或 blob 对象(二值图像)中心线的算法工作流程吗. (骨架化?,使用内边中点对多边形进行三角剖分)
演示如下:
我找到了更好的解决方案:
- skeltonize 二进制 blob
- 通过追踪像素线和分支点 构建骨架的 graph(无循环)
- 获取从每个端节点到所有其他端节点的所有最短路径,并取最长的路径(大约是 blob 的起点和终点)
- 从一个端节点(度=1)到另一个端节点的结果路径是蠕虫中线的近似值。
如果有人对解决方案感兴趣,我可能会分享一个 python 笔记本。
源代码:
这个问题的代码可以在这里找到:https://github.com/gabyx/WormAnalysis(如果你使用它请给它加注星标)