概念原理
图论分割:把图像映射成无向带权图,像素为节点,像素位置关系为边,像素相似和差异程度为权,用能量函数最优分割。
能量函数:能量函数就是我们用方程的最小值来描述我们想要达到的实际效果,并且在得到最小值时我们所求得的参数就是我们想要得到的最优解。类似损失函数。
图的最小割问题:
带有起点与终点并且具有边权值的网络图中,如何进行边的切割,把这个网络图分成独立的两个部分(或者多个部分),使得这个切割中被切割的边的权值之和最小。
图像简单来说就是矩阵,对于只是灰度图像,那么就是一般的二维矩阵,矩阵中值的大小就是该点的灰度值,那么图像分割问题就是寻找到图像的边界,而边界肯定在两个像素值差别很大的邻域间,如果把两个邻域间的像素值差定义为该邻域的边权值的话,分割问题就转化为如何切割这些边的问题了,这样模型就和上述的对应上了,有点,有边,有边的权值,那么就可以运用上述理论解决图的分割问题了。
GraphCuts
GraphCuts图是在普通图的基础上多了2个顶点,这2个顶点分别用符号S和T表示,统称为终端顶点,S一般表示前景目标,T一般表示背景。其它所有的顶点都必须和这2个顶点相连形成边集合中的一部分。所以Graph Cuts中有两种顶点,也有两种边。
第一种顶点和边是:第一种普通顶点对应于图像中的每个像素。每两个邻域顶点(对应于图像中每两个邻域像素)的连接就是一条边。这种边也叫n-links。
第二种顶点和边是:除图像像素外,还有另外两个终端顶点,叫S源点和T汇点。每个普通顶点和这2个终端顶点之间都有连接,组成第二种边。这种边也叫t-links。
能量函数
每条边都有一个非负的权值,边的断开恰好可以使目标和背景被分割开,即”S”和”T”图的分开,所以就称为“割,l”。如果一个割,它的边的所有权值之和最小,那么这个就称为最小割,也就是图割的结果,这时候能量也应该是最小的。图像的能量可以表示为:E(L)=aR(L)+B(L), R(L)为区域项,B(L)为边界项,而a就是区域项和边界项之间的重要因子,决定它们对能量的影响大小。如果a为0,那么就只考虑边界因素,不考虑区域因素。E(L)表示的是权值,即损失函数,也叫能量函数,图割的目标就是优化能量函数使其值达到最小。
区域项
其中Rp(lp)表示为像素p分配标签lp的惩罚,Rp(lp)能量项的值可以通过比较像素p的灰度和给定的目标和前景的灰度直方图来获得,换句话说就是像素p属于标签lp的能量,希望像素p分配为其概率最大的标签lp,这时候我们希望能量最小,要求出全部像素的Rp(lp)和最小,所以一般取概率的负对数值,故t-link的权值如下,目标(s-node)的label设为1,背景(t-node)的label设为0:Rp(1) = -ln Pr(Ip|’obj’); Rp(0) = -ln Pr(Ip|’bkg’) 像素p的灰度值属于目标的概率Pr(Ip|’obj’)大于背景Pr(Ip|’bkg’),那么Rp(1)就小于Rp(0),也就是说当像素p更有可能属于目标时,将p归类为目标就会使能量R(L)小。那么,如果全部的像素都被正确划分为目标或者背景,那么这时候能量就是最小的。
边界项
其中,p和q为邻域像素,边界平滑项主要体现分割L的边界属性,B<p,q>可以解析为像素p和q之间不连续的惩罚,一般来说如果p和q越相似(例如它们的灰度),那么B<p,q>越大,如果他们非常不同,那么B<p,q>就接近于0。换句话说,如果两邻域像素差别很小,那么它属于同一个目标或者同一背景的可能性就很大,如果他们的差别很大,那说明这两个像素很有可能处于目标和背景的边缘部分,则被分割开的可能性比较大,所以当两邻域像素差别越大,B<p,q>越小,即能量越小。所以只有边界正确分割时差异最大,能量最小,错误分割时两边相似能量较大。
min cut就是权值和最小的边的集合,这些边的断开恰好可以使目标和背景被分割开,也就是min cut对应于能量的最小化。而min cut和图的max flow(最大流)是等效的,故可以通过max flow算法来找到s-t图的min cut。
步骤
Graph cut的3x3图像分割示意图:我们取两个种子点(就是人为的指定分别属于目标和背景的两个像素点),然后我们建立一个图,图中边的粗细表示对应权值的大小,然后找到权值和最小的边的组合,也就是(c)中的cut,即完成了图像分割的功能。