计算位图中“孔”的数量

时间:2010-10-26 16:56:40

标签: algorithm image-processing computer-vision maze

考虑一个MxN位图,其中单元格为0或1.“1”表示填充,“0”表示空。

找到位图中“洞”的数量,其中一个洞是空单元的连续区域。

例如,这有两个漏洞:

11111  
10101  
10101  
11111  

......这只有一个:

11111  
10001  
10101  
11111

当M和N都介于1和8之间时,最快的方法是什么?

澄清:对角线不被认为是连续的,只有侧面邻接很重要。

注意:我正在寻找利用数据格式的东西。我知道如何将其转换为图形和[BD] FS,但这似乎有点过分了。

3 个答案:

答案 0 :(得分:20)

您需要在图片上执行connected component labeling。您可以使用我上面链接的维基百科文章中描述的Two-pass algorithm。鉴于问题的规模很小,One-pass algorithm可能就足够了。

您也可以使用BFS / DFS,但我建议使用上述算法。

答案 1 :(得分:5)

这似乎很好地利用了不相交的数据结构 将位图转换为2d阵列
循环遍历每个元素
如果当前元素为0,则将其与其“先前”空邻居(已访问过的)的一组合并 如果它没有空的邻居,请将其添加到自己的集合

然后只计算套数

答案 2 :(得分:0)

使用表查找和按位操作可能会带来好处。

例如,可以在256个元素表中查找8个像素的整行,因此通过单个查找获得字段1xN中的孔数。然后可能有一些256xK元素的查找表,其中K是前一行中的孔配置数,包括完整孔的数量和下一个孔配置。这只是一个想法。