我正在使用 OpenCV 的 grabcut 算法在 android 中对图像进行背景减除。算法运行良好,但给出的结果不准确。 例如。我的输入图像是:
输出图像如下:
那么我们如何提高 Grabcut 算法的准确性?
P.S: 抱歉,由于信誉不佳而没有上传示例图片:(
最佳答案
我一直在和同样的问题作斗争很长一段时间了。我对此有一些提示和技巧
1> 改良你的种子。考虑到 GrabCut 基本上是一个黑盒子,你给它种子并期望分割图像作为输出,种子是你所能控制的,选择好的种子变得势在必行。如果您对要分割的图像有一些期望,那么您可以在这方面做很多事情。对于一些情况,请考虑这些:
a> 你的形象会有人吗?使用面部检测器找到面部并将这些像素标记为您认为合适的可能/确定前景。您还可以在某些感兴趣的区域内使用肤色模型来进一步优化您的种子
b> 如果您有一些关于分割后期望什么样的前景的数据,您可以训练颜色模型并使用它们来标记更多像素
这个名单会继续下去。您需要创造性地想出不同的方法来添加更准确的种子。
2> 后处理:尝试使用简单的后处理技术,例如开运算和闭运算来平滑您的 fgmask。它们将帮助您消除最终输出中的大量噪音。
一般情况下,图形切割(以及抓取)往往会快速吸附到边缘,因此如果您的边缘靠近前景边界,则可能会出现结果不准确的情况。
关于android - 如何使用 OpenCV 提高 Grabcut 算法的准确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948606/