2011-03-26 102 views
0

我最近发现boost :: graph。 因为我之前从未使用过图论,所以想知道如何用boost图解解决下列问题。假设我已经有了一个简单的(灰度)2D图像,并且我想从中提取符合特定标准的区域,例如,像素值>阈值。 以上是白色,下面是黑色。带升压图的图像分割

我该如何实施?

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

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

回答

3

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

尽管使用图形对你来说很简单,但对我来说似乎有点矫枉过正。

0

我肯定会做前者,你为每个像素创建一个顶点,然后连接像素(或相邻像素,取决于你正在尝试做什么)共享你的标准。通过这种方式,您可以执行“像素步行”来查找满足特定标准的图像(或至少相邻区域)的所有区域。

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

希望这有助于

杰森