1

当我在图像上运行 Grabcut 时,我将grabcut 的边界框设置为图像本身的边缘。

在此处输入图像描述

但是,由于图像的底部是前景而不是背景的一部分,因此它会切掉下部。

在此处输入图像描述

有什么办法可以防止这种情况发生,比如只将边界框设置在顶部、左侧和右侧?

4

3 回答 3

1

GrabCut 需要边界来定义什么是“外部”,因此它可以计算背景颜色模型。根据您的 API/接口,您可能只能从图像的右上角和左部分定义“外部”,而将底部留在“内部”。

假设您正在使用cv::grabCut,您可以将初始值定义rect为超过图像的底部,在这种情况下,算法不应将下部视为“明显背景”

于 2015-06-04T05:26:50.107 回答
1

由于此图像中的背景非常干净,您可以尝试一些规则来分割这种情况下的前景。例如,为什么不删除“相对”的白色区域。背景颜色可以从图像的边界区域启发式地提取。

如果您的数据集中有杂乱的背景,您可以尝试使用检测器(例如DPMR-CNN )为人类检测更紧密的边界框。他们已经为人体检测提供了一些强大的模型。根据检测到的框,我想grabcut的结果应该会更好。

无论如何,提供更多示例进行分析应该会有所帮助。

于 2015-06-04T09:38:50.780 回答
0

在 openCV 中实现的经典 gab cut 有 6 个高斯混合模型,对应于 3D 颜色空间中的 6 个质心 - 比您对上面的图像建模所需的要多。因此,您的问题在于设置正确的标签。您不仅要设置边界框或 ROI,还要设置 3 个带有 3 个标签的区域 - FG、BG、PROBABLY_BG(对图像进行分区)。前两者将有助于前景和背景的模型,在此基础上,后一个标签将是唯一细化边界的区域。换句话说,您没有正确初始化使用三个标签的抓取切割。看到这个,例如How to set a mask image for grabCut in OpenCV?

于 2015-06-05T18:42:13.680 回答