5

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

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

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

我查看了 CGAL 库和它的骨架演示,但是当多边形有很多顶点时效果不佳,因此只需将边界上的每个顶点转换为多边形的顶点,然后将其提供给算法不会产生好结果。

我希望这一定是一个通用算法,因为任务似乎很基本,但我不想发明轮子,我找不到任何关于该主题的内容(可能是因为我不知道正确的关键字)

4

2 回答 2

3

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

“注意十五个二维并行细化算法。” M. Couprie(PDF 下载链接

这是图 16 的一小部分,显示了两种此类算法的结果:
图16

于 2013-08-05T15:48:01.340 回答
0

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

Corners 工具箱允许以压缩形式处理二进制图像

骨架化实际上是我的一部分,我详细描述了它:-) 我认为 C++ 中的代码仍然是免费的,并且在某个地方可用。

于 2013-08-05T19:46:31.370 回答