【发布时间】: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