如何使用Marching Squares算法处理多个轮廓?

3
如何使Marching Squares在找到第一个轮廓后继续进行?
我正在处理的图像中的轮廓将经常发生变化,因为我处于嵌入式环境(Android / iOS),因此最重要的是希望有快速的性能解决方案。使用外部库不是一个选择。
我尝试过连接组件标记,但从未使其正常工作,因为我有一张PNG图片,它不是黑白的(没有经过阈值化处理),如果我没弄错,CCL仅适用于黑白(二进制)图像。
我考虑将blob信息保存到另一个向量中,并检查新发现的像素是否落在早期发现的blob内,但我认为这不够快,因为向量被填充了越来越多的blob,检查向量内的每个blob变得越来越昂贵。
这让我陷入了我的当前方法,即擦除我发现的轮廓并重复直到没有任何东西?但这是我目前使用的方法,似乎也很昂贵。
如果没有快速的解决方案,那么可以有人建议不同的方法...即使这意味着不同的算法。
Mark1:我选择Marching Squares,因为我只需要轮廓的轮廓,即使其中有孔。

可能存在术语问题...“Marching squares”算法同时找到所有轮廓(包括孔,参见https://en.wikipedia.org/wiki/Marching_squares)。给定一张图片,您想要什么样的输出?对于图像中存在的每个值,您需要一个通用的多边形(即不一定是连通或简单连通)吗? - 6502
显然你是对的,这个算法有两种不同的实现方式,而我现在使用的只适用于图像中只有一个形状的情况,这就是我找到它的地方: http://www.emanueleferonato.com/2013/03/01/using-marching-squares-algorithm-to-trace-the-contour-of-an-image/这是我目前正在使用的实现方式,与上面的维基百科文章不同。 那么是否有C++实现该算法的方法可以一次提取多个形状呢? - Joseph
我成功找到了一个快速高效的实现方式,可以一次性提取所有几何信息!!...所以我想问题解决了。 - Joseph
每次我看到这种问题(开放但已解决),我就会想起 https://xkcd.com/979/。 - syockit
1个回答

0

我通过使用在chipmunk2d物理库中找到的Marching Squares算法的实现来解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接