【问题标题】:Looking for algorithm: skeleton generation for raster images寻找算法:光栅图像的骨架生成
【发布时间】:2013-08-06 03:46:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您应该尝试二进制图像骨架化,然后通过霍夫变换进行线检测。例如,如果您使用 opencv 会更容易,但也可以实现这些。

标签: algorithm geometry raster


【解决方案1】:

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

“十五个二维并行细化算法的注意事项。” M. Couprie (PDF download link)

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

【讨论】:

  • 谢谢约瑟夫,这篇论文(和关键字)正是我所需要的!
【解决方案2】:

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

Corners toolbox allowing processing binary images in a compressed form

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多