前景提取算法 GrabCut 笔记

GrabCut是一种交互式迭代前景提取算法,目前用在PPT上

GrabCut是一种交互式迭代前景提取算法,这个项目是对其的实践,参考opencv的源码

核心的点

opencv mask四状态

流程

初始化

  1. 用户通过直接框选目标来得到一个初始的GCD_PR_FGD为$t_f$,即方框外的像素全部作为GCD_BGD为$t_b$

  2. 对每一像素n,初始化像素n的标签

  3. 通过像素标签来估计目标和背景的GMM,通过k-mean算法分别把属于目标和背景的像素聚类为K类,即GMM中的K个高斯模型

迭代最小化

  1. 对每个像素分配GMM中的高斯分量

  2. 对于给定的图像数据Z,学习优化GMM的参数

  3. 分割估计(通过1中的Gibbs能量项,建立图,并求出权值t-link和n-link,通过max flow/min cut算法来进行分割):

  4. 重复步骤1-3,直到收敛

  5. 对分割的边界进行border matting平滑处理

思考

如果GMM颜色模型换成颜色直方图https://mmcheng.net/zh/salobj/,可能对视觉显著性区域有更好的切割效果

代码

目录

DEMO

框选并提取出 可能的前景GCD_PR_FGD,未被框则选为 背景GCD_BGD,按n获得初次分割结果

demo-1

左键点击选取GCD_FGD,右键点击选取GCD_BGD,按n继续迭代更新

image.png

Lib

Src

https://github.com/Kingfish404/grabcut-apply-cpp

REF

Star 0
Prev: 实现一个简单版vue3-like module