当我在图像上运行 Grabcut 时,我将grabcut 的边界框设置为图像本身的边缘。
但是,由于图像的底部是前景而不是背景的一部分,因此它会切掉下部。
有什么办法可以防止这种情况发生,比如只将边界框设置在顶部、左侧和右侧?
当我在图像上运行 Grabcut 时,我将grabcut 的边界框设置为图像本身的边缘。
但是,由于图像的底部是前景而不是背景的一部分,因此它会切掉下部。
有什么办法可以防止这种情况发生,比如只将边界框设置在顶部、左侧和右侧?
GrabCut 需要边界来定义什么是“外部”,因此它可以计算背景颜色模型。根据您的 API/接口,您可能只能从图像的右上角和左部分定义“外部”,而将底部留在“内部”。
假设您正在使用cv::grabCut
,您可以将初始值定义rect
为超过图像的底部,在这种情况下,算法不应将下部视为“明显背景”。
在 openCV 中实现的经典 gab cut 有 6 个高斯混合模型,对应于 3D 颜色空间中的 6 个质心 - 比您对上面的图像建模所需的要多。因此,您的问题在于设置正确的标签。您不仅要设置边界框或 ROI,还要设置 3 个带有 3 个标签的区域 - FG、BG、PROBABLY_BG(对图像进行分区)。前两者将有助于前景和背景的模型,在此基础上,后一个标签将是唯一细化边界的区域。换句话说,您没有正确初始化使用三个标签的抓取切割。看到这个,例如How to set a mask image for grabCut in OpenCV?