我知道分水岭和grabcut算法都是图像分割的常用工具。它们似乎都依赖于预定义的标记来形成类似源-汇系统的东西,然后使用图像的梯度来找到边界。
我观察到的最大区别是,grabcut使用了一种图形结构,其中梯度转换为边缘权重,而分水岭直观地通过缓慢地向梯度图像中添加水来工作。但在我看来,它们似乎会产生类似的结果?
我的问题是这两种算法之间的相对优势和劣势是什么?什么时候我应该使用其中一个?
我不知道对于GraphCut来说,但是对于Watershed来说,主要的弱点是"泄漏"。事实上,如果你的标记没有被完美地定义,分水岭一旦找到一个允许传播的像素就会泄漏。因此,它必须受到标记的高度约束。
分水岭(发展良好,参见SMIL库)似乎比图形切割更快。
为将来参考,
对于opencv和我所经历的特殊情况,
Grabcut仅将前景与背景分开(即仅支持2个标签),而分水岭支持使用多个标签进行分割
Grabcut比分水岭慢得多,我没有确切的统计数据,但分水岭能够在接近实时的图像上处理,而Grabcut需要大约5秒来处理