Algorithm 寻找算法:光栅图像的骨架生成

Algorithm 寻找算法:光栅图像的骨架生成,algorithm,geometry,raster,Algorithm,Geometry,Raster,我正在做一些工作(太复杂了,无法解释),其中一项任务是我需要将平滑多边形的光栅图像转换为骨架。所以我需要这样做: 我有一个光栅图像(在左边),我想有一个由点和边(在右边)组成的图形来表示图像 我读过关于算法的书,特别是史蒂文·斯基纳(Steven Skiena)的一本书,在书中他告诉我们使用“刷火”算法,他解释为“每个循环,通过边缘上的每个点,对于碰撞的边缘,向骨架添加一个点并移除剩余的点,继续下一个循环,直到只剩下骨架。”但是我能在这个算法网上找到的所有信息都是关于一些机器人的寻路算法,我不

我正在做一些工作(太复杂了,无法解释),其中一项任务是我需要将平滑多边形的光栅图像转换为骨架。所以我需要这样做:

我有一个光栅图像(在左边),我想有一个由点和边(在右边)组成的图形来表示图像

我读过关于算法的书,特别是史蒂文·斯基纳(Steven Skiena)的一本书,在书中他告诉我们使用“刷火”算法,他解释为“每个循环,通过边缘上的每个点,对于碰撞的边缘,向骨架添加一个点并移除剩余的点,继续下一个循环,直到只剩下骨架。”但是我能在这个算法网上找到的所有信息都是关于一些机器人的寻路算法,我不知道如何在这里应用它(基本上,如果我只有填充/空白像素的坐标,我怎么知道“边”)

我查阅了CGAL库和它的骨架演示,但是当多边形有许多垂直面时,它做得不好,所以仅将边界上的每个顶点转换为多边形的顶点,然后将其提供给算法不会产生好的结果


我想这一定是一个常见的算法,因为这项任务似乎很基本,但我不想发明轮子,也找不到关于这个主题的任何东西(可能是因为我不知道正确的关键字)

更好的搜索术语是数字细化,即中轴的数字版本。例如,本文列举了15种这样的算法:

“关于 15个2D并行细化算法的说明。” 库普里先生()

下面是图16的一小段,显示了两种算法的结果:

这是我们学校的项目!它基于Schlesinger角点和骨架化算法。角点是以压缩形式表示二值图像的一种方式,它允许比光栅图像更快的操作。有关更多信息,请参阅我们的论文:

骨骼化实际上是我的一部分,我非常详细地描述了它:-)
我认为C++中的代码仍然是免费的和可用的。

你应该尝试二进制图像骨架化,然后通过Hough变换进行行检测。例如,如果你使用opencv会更容易,但也可以实现这些。谢谢Joseph,这篇论文(和关键词)正是我所需要的!