IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    前景提取算法 GrabCut 笔记

    Kingfish404发表于 2021-07-22 00:00:00
    love 0

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

    核心的点

    • 混合高斯模型
    • 迭代图像分割
    • Graph Cut
    • border matting: 这个不是重点

    opencv mask四状态

    • 背景GCD_BGD:0
    • 前景GCD_FGD:1
    • 可能的背景GCD_PR_BGD:2
    • 可能的前景GCD_PR_FGD:3

    流程

    初始化

    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/,可能对视觉显著性区域有更好的切割效果

    代码

    • main.cpp: 主要的用户交互逻辑
    • grabcut.hpp: grabcut算法的实现(含注释)及其依赖的GMM等
    • grabcut_ref.cpp: opencv中的样例的修改

    目录

    • images: 测试用的图像文件
    • lib: 可能用到的库
    • pages: 算法的相关paper

    DEMO

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

    demo-1

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

    image.png

    Lib

    • opencv Open Source Computer Vision Library
    • cmake CMake is an open-source, cross-platform family of tools designed to build, test and package software

    Src

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

    REF

    • 读《"GrabCut" -- Interactive Foreground Extraction using Iterated Graph Cuts》
    • 图像分割之(二)Graph Cut(图割)
    • 图像分割之(三)从Graph Cut到Grab Cut


沪ICP备19023445号-2号
友情链接