查找图像中的不同部分

时间:2013-04-10 05:36:35

标签: c++ algorithm

假设您有vector<vector<bool>>(方形区域),其中1对应于“已填充”框。有没有什么方法可以在O(n)时间内找到整个区域?例如,此向量将具有两个完整区域:

0 0 1 1 1 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0
0 0 1 0 1 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0

1 个答案:

答案 0 :(得分:3)

这称为8连接region growing。它是图像处理中的标准技术,您选择种子像素并“增长”。这可以使用BFS在像素数的线性时间内完成:

  • 与边缘保持队列,将初始种子放在那里
  • 从队列中获取一个元素,将其调用为当前点并添加到“region”列表中
  • 将当前点的邻居推送到队列中,永远不会将您已推送到队列的点推送到队列
  • 队列为空时完成。

区域列表包含一个区域,设置为零。找到另一颗种子然后再跑,直到你找不到种子。