这个项目是用C++对GrabCut算法的一个简单实现,大部分代码来自GrabCut-BorderMatting。对于messi5.jpg,在Release模式下运行程序,每次迭代可以控制在0.2秒以内。运行结果如下:
相比于原来的工程,我增添了一个使用彩色直方图代替GMM来对权重进行估计的选项,只需将GrabCut.cpp的USE_GMM
改为false
即可。
以下为在messi5.jpg上的运行结果对比:
输入图像:
使用GMM时,只需要对部分关键点进行标注,就可以快速收敛:
使用彩色直方图时,需要对肢体部分进行大量标注的同时也只分割出了腿部,还需要进一步标注+迭代:
1、相比于它的祖先GraphCut,GrabCut需要能够处理彩色。而彩色直方图的样本分布非常稀疏,难以根据频率估计概率。
2、颜色直方图只包含了表面的像素强度信息,而GMM则对像素强度数据进行了浓缩处理,剔除了许多冗余信息。
(以上是从我的笔记中整理到的,过了半年我已经回想不出太多东西了)