这是一个基于Bayesian概率框架的matting算法,和机器学习有点类似都是要获得概率最大的解。
算法步骤如下:
(1)利用Getcontour来得到需要处理的点集S(我目前采用的是按行选取),若该点集为空则执行步骤(6)
(2)枚举点集S中的一个点x
(3)在x点周围分别统计出背景,前景高斯模型,并分别分成三类点集(这里分成三类点集效果不好)
(4)对每个点集对(背景vs前景)利用论文中公式(9-10)计算出B,F,alpha,然后利用公式(4-5),(8)算出其
似然概率,并选取概率最大的一对来更新点x的alpha
(5)点集S还没枚举完则返回(2),否则执行步骤(1)
(6)根据得到的alpha值矩阵来生成matting灰度图
目前我实现的算法可能存在的不足:
1.轮廓的获取可能还需要改善
2.wi权重赋值目前都为1.0,因为按照论文中的方式赋值出来的值太小(结果表明影响不大)
3.论文中公式(9-10)的迭代次数为5
实验结果:
可以看到上面还是有比较明显的误差我觉得可能在
weight,采集点集,以及初始化alpha值这三个方面可以做进一步改进!