Android 如何使用OpenCV提高Grabcut算法的准确性?

Android 如何使用OpenCV提高Grabcut算法的准确性?,android,algorithm,opencv,Android,Algorithm,Opencv,我使用OpenCV的grabcut算法在android中对图像进行背景减法。算法运行良好,但给出的结果并不准确。 例如,我的输入图像是: 输出图像如下所示: 那么,我们如何提高Grabcut算法的准确性呢 附言:由于声誉不好,没有上传示例图片,我深表歉意:(我已经与同样的问题斗争了很长一段时间。我有一些技巧和窍门 1> 改进你的种子。考虑到GrabCut基本上是一个黑匣子,你给它种子,并期望分割后的图像作为输出,种子是你能控制的一切,因此必须选择好的种子。如果你对要分割的图像有一些期望,你可

我使用OpenCV的grabcut算法在android中对图像进行背景减法。算法运行良好,但给出的结果并不准确。 例如,我的输入图像是:

输出图像如下所示:

那么,我们如何提高Grabcut算法的准确性呢


附言:由于声誉不好,没有上传示例图片,我深表歉意:(

我已经与同样的问题斗争了很长一段时间。我有一些技巧和窍门

1> 改进你的种子。考虑到GrabCut基本上是一个黑匣子,你给它种子,并期望分割后的图像作为输出,种子是你能控制的一切,因此必须选择好的种子。如果你对要分割的图像有一些期望,你可以在这方面做很多事情。对于很少有这样的情况:

a> 你的图像中会有人吗?使用人脸检测器来找到人脸,并将这些像素标记为你认为合适的可能/确定前景。你也可以在感兴趣的区域内使用肤色模型来进一步细化你的种子

b> 如果您有一些关于分割后的前景类型的数据,您可以训练颜色模型并使用它们标记更多像素

你需要创造性地想出不同的方法来添加更精确的种子

2> 后处理:尝试简单的后处理技术,如打开和关闭操作,以平滑fgmask。它们将帮助您消除最终输出中的大量噪声


一般来说,graphcut(因此grabcut)倾向于快速捕捉到边缘,因此,如果你有靠近前景边界的强边缘,结果可能会不准确。

如何链接:/n没有任何宿主。我更新了问题:)你看了吗?它有示例图像和示例代码,似乎可以解决与图像中的问题类似的问题。感谢您的详细回复。我是openCV新手,所以你能指导如何标记图像的像素吗?Grabcut允许种子屏蔽输入。这意味着,对于图像中的每个像素,可以设置四个值之一:GC_PR_FGD(可能前景)、GC_FGD(确定前景)、GC_BGD(背景)、GC_PR_BGD(可能背景)。因此,创建一个与图像大小相同的遮罩,并为每个像素设置其中一个值。如果您需要进一步的帮助,我建议您查看openCV网站上提供的文档和一些示例代码。您好@TheBlueNotebook,我在制作相同大小的面具时遇到了一些问题,请看一看,希望您能提供帮助[