使用增强图进行图像分割

时间:2011-03-26 18:56:14

标签: c++ boost graph

我最近发现了boost :: graph。 因为在我想知道如何用boost图解决下面的问题之前我从未使用过Graph理论。

假设我有一个简单的(灰度)2D图像,我想从中提取满足特定标准的区域,例如像素值>阈。 上面是白色,下面是黑色。

我该如何实现?

我的第一个线索是为图像中的每个像素添加一个顶点到图表。 然后将每个像素Vertex连接到具有相同颜色(白色/黑色)的邻居。 然后我可以使用connected_components()函数提取区域。

或者连接所有相邻像素并将边界信息编码到边缘(边缘,非边缘边缘)更有效吗?

2 个答案:

答案 0 :(得分:3)

实际上有一些有趣的基于图论的分割算法,称为图切割分割。他们使用彩色边缘编码相邻像素之间的差分信息。

对于非常简单的细分,虽然使用图表似乎对我来说太过分了。

答案 1 :(得分:0)

我肯定会在前者为每个像素创建一个顶点,然后连接共享标准的像素(或相邻像素,具体取决于您尝试做的事情)。这样你就可以进行“像素行走”来找到满足特定标准的图像(或至少是相邻区域)的所有区域。

为了找到符合您标准的第一个像素,以便开始步行序列,您可以使用几种方法。 1)从图像中随机选取像素,2)将列表指针保存到符合不同标准的像素(每个条件只需要一个像素),或3)在图像上保存某种类型的渐变信息,以便通过从图像中仅选取一个像素,然后您可以沿着渐变流搜索以找到您正在寻找的像素(即,渐变将为您提供关于您需要在哪里拾取下一个像素以获得更接近所需的像素的方向信息你正在寻找的标准)。我认为选择1或2最容易实现。

希望这有帮助,

杰森