关于OpenCV带标签的GrabCut分割标签?

时间:2014-05-28 13:26:10

标签: python c++ opencv image-segmentation

我正在使用OpenCV使用GrabCut分割一些图像。在我的图像上,我想从背景中分割单个对象。我想找到对象的轮廓;我知道它的大致位置,因此我将其中心标记为 FG =前景。然后我将它周围的一个小带标记为 P_BG =可能的背景,这是我希望GrabCut执行分割的区域。最后,图像的其余部分标记为 BG =背景。我不希望GrabCut在这里做任何事情(没有图表,没有颜色模型,没有任何东西)

现在,有4种可能的标签:

  • 可能背景(P_BG)
  • 可能的前景(P_FG)
  • 背景(BG)
  • 前景(FG)

问题

  • P_BGP_FG之间的实际差异是什么?(似乎显而易见但是我可以互换地使用它们并且它什么都没改变?
  • GrabCut使用哪些标签来生成所使用的颜色模型(可能/不可能)?
  • 最后,我怎么能告诉GrabCut不要在背景区域做什么?(我希望它完全忽略背景区域,因为分割整个图像需要更长时间才能完成它除了分割裁剪版本(见下图),我无法等待它分析整个图像,我已经提供了它应该的区域"工作")

enter image description here

2 个答案:

答案 0 :(得分:1)

它在BG上无能为力,因为它使用这样的像素作为100%确定背景的模型。对于FG像素也是如此。

如果您不使用FG和BG标签,您将看到P_FG和P_BG之间的差异。此P_ *标签用于第一个模型,但可以在下一次迭代中重新标记。

实际上,使用矩形初始化与使用矩形内部的P_FG和其余像素的P_BG相同。

答案 1 :(得分:1)

在OpenCV的当前GrabCut实现中,没有办法让GrabCut完全忽略任何像素。每个像素都用于创建前景色和背景色模型。

如果您想要忽略的区域是矩形,您可以使用roi首先提取图像的相关区域,然后在剩余部分上调用GrabCut。这将导致原始ROI之外的像素不在颜色模型中使用,并且因为没有任何复制,所以将是一种有效的实现。