图割论文阅读笔记:Implementing GrabCut

2023-12-03 09:58

本文主要是介绍图割论文阅读笔记:Implementing GrabCut,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Implementing GrabCut

这篇论文介绍了GrabCut的实现方法,并说了原GrabCut论文的一些弊端。其实也就是一种实现,而且这里说的弊端我觉得有些不妥。

GrabCut Summary

1.用户用矩形框创造一个初始Trimap,框里边被标记为未知区域,框外边被标记为已知背景。
2.由此计算出一个初始图像分割,其中所有未知像素暂时放置在前景类中,并且所有已知的背景像素被放置在背景类中。
3.GMMs由初始的前背景类求得。
4.前景类中的每个像素被分配给前景GMM中最可能的高斯分量。类似地,背景中的每个像素被分配给最可能的背景高斯分量。
5.当前GMMs被丢弃,并且从在先前集合中创建的像素集中学习新的GMMs。
6.构建图并运行图切割以找到像素的新的暂时前景和背景分类。
7.重复步骤4-6,直到分类收敛。

Data structures

在GrabCut中,每个像素需要有4种不同的信息。在我们的实现中,每种信息都存在一个数组中,每个数组都和原始图像一样大。原论文中出现的变量名在解释后边的括号里:

  • 颜色:一个RGB值(z)
  • Trimap:背景Trimap、前景Trimap和未知Trimap的一种
  • Matte:在初始硬分割那一步中,不是背景Matte就是前景Matte
  • 分量标号:1到K之间,K是GMM中高斯分量数目(k)

除此之外,GrabCut也需要前景和背景GMMs中的K个高斯分量。对每要个高斯分量:
这里写图片描述

Initialization

初始化步骤包括1-3。1.由矩形框初始化Trimap,这是给算法的初始信息。2.掩码被初始化,背景为Trimap背景,前景为Trimap未知区域。Trimap和掩码的区别有效的把正确的用户输入和GrabCut得出的分割分离开来,但这可能是不正确的。3.在初始化的掩码中,分别给前景掩码和背景掩码有K个分量的GMM,也就是说必须创建2K个分量。我们先把两个区域划分为K个像素集,然后由每个像素集的颜色初始化高斯分量。

Learning GMM components

随着我们迭代的进行算法的学习部分(4-6),掩码将会被改变。一些像素将从前景移到背景,反之亦然。
高斯聚类算法由两个步骤(4和5)组成。 首先,将MatteForeground集中的每个像素分配给最匹配(像素颜色相似的概率最高)的前景GMM分量。 这通过简单地评估以像素的颜色作为输入的高斯方程来找到。 类似地,我们将MatteBackground集中的像素分配给背景GMM的最可能的分量。 分量标签记录像素对应的分量。 注意,前景像素仅被分配给前景GMM的分量,反之亦然。 因此,Matte(MatteForeground或MatteBackground)和Component Index(1 - K)中的值对唯一地标识2K个组件之一。 然后,像素分类好后,丢弃当前高斯分量,并创建新的Matte/Component标签对。

Performing Graph Cut

我们接下来创建一个图,用于Graph Cut算法。 在Graph Cut中,有两种类型的links。 N-links连接8邻域中的像素。 这些链接描述了在相邻像素之间放置分割边界的代价。 我们希望在低梯度区域惩罚非常高而高梯度(边缘)区域的惩罚低。 N-links权重在算法的整个执行期间是恒定的。 因此,它们可以被计算一次并重复使用。 T链接将每个像素连接到前景和背景节点。 这些描述了每个像素属于前景或背景的概率。 在GrabCut中,这个概率包含在GMM中。 当我们遍历步骤4-6时,GMM更新并且概率相应地改变。 这意味着在每次迭代期间必须更新T链路权重。
对于N链路,像素m和n之间合适的链路权重是:
这里写图片描述
这是与原论文不一样的地方之一,删除了求和,因为它隐含的包含在了图割的计算当中。但我觉得原论文也是对的,因为原论文只是针对总的能量来列的公式,而不是针对每一项来写公式的。
每个像素有两个T-links。 背景的T-links将像素连接到背景节点。 前景T-links将像素连接到前景节点。 这些链接的权重取决于trimap的状态。 如果用户已经指示特定像素肯定是前景或肯定的背景,则通过对T-link加权来反映这个事实,使得像素被强制进入适当的组。 对于未知像素,我们使用从GMM获得的概率来设置权重。
这里写图片描述
这里的常数K取所有相邻边的权重最大的那个。

User Touchup

用户通过对Trimap的改变来纠正分割,trimap改变影响了T-links,每次纠正,都会更新trimap并重新计算最小图割。
用户修正后,我们将trimap背景区域初始化掩码背景,而其他地方设置为掩码前景。(trimap有三部分,而掩码只有两个值)

Color clustering details

这里写图片描述
对于高斯分量,我们必须计算平均值,协方差矩阵的逆,协方差矩阵的行列式和加权值π。
平均值和协方差矩阵由像素颜色计算。 由协方差矩阵计算行列式及协方差矩阵的逆。
权重π就是通过步骤4分配给该高斯分量的前景(或背景)像素的比重。

虽然这篇论文介绍了方法,但我也没找到代码……

这篇关于图割论文阅读笔记:Implementing GrabCut的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/449016

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓