【问题标题】:How to use marching squares for multiple contours?如何将行进方块用于多个轮廓?
【发布时间】:2015-12-05 08:45:12
【问题描述】:

找到第一个轮廓后如何让行进方块继续前进?

正在处理的图像中的轮廓会经常发生变化,因为我处于嵌入式环境(android/ios)中,所以我首先想要一个快速性能的解决方案。 并且不能使用外部库。

我尝试了连接组件标签,但从未让它工作,因为我有一个不是黑白(没有阈值)的 PNG,如果我没记错的话,CCL 只适用于黑白(二进制)图像。

我考虑过将 blob 信息保存到另一个向量并检查新发现的像素是否属于较早发现的 blob,但我认为这还不够快,因为向量被越来越多的 blob 填充,它变得越来越多检查向量中的每个 blob 的成本很高。

这给我留下了我几乎完成的当前方法,即擦除我找到的轮廓并重复直到什么都没有?但这是我目前使用的方法,似乎也很昂贵。

如果没有快速解决方案,那么任何人都可以提出不同的方法......即使这意味着不同的算法。

Mark1:我选择了行进方块,因为即使主题有洞,我也只需要轮廓的轮廓。

【问题讨论】:

  • 可能是术语有问题...“行进方块”算法同时找到所有轮廓(包括孔,见en.wikipedia.org/wiki/Marching_squares)。给定图像,您要寻找什么样的输出?图像中存在的每个值的一般多边形(即不一定连接或简单连接)?
  • 显然你是对的,该算法有两种不同的不同实现,现在使用的一种只适用于其中具有一种形状的图像,这是我从中得到它的地方:@ 987654322@ 这是当前正在使用的实现,它与上面的 wiki 文章不同。维基文章中提到的算法是否有任何 c++ 实现可以一次提取多个形状。
  • 我设法找到了一个很好的快速实现,可以一次性提取所有几何图形! ...所以我想它已经解决了。
  • 每次看到此类问题(未解决,但已解决)时,我都会不断想起xkcd.com/979

标签: c++ algorithm opengl-es-2.0 connected-components marching-cubes


【解决方案1】:

我通过使用我在 chipmunk2d 物理库中找到的行进平方算法的实现解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2017-08-11
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多