Graph-Based Image Segmentation:每次对两个区域进行讨论,若满足要求则进行合并
首先看一下图的基本概念:
图
是由顶点集V(vertices)和边集E(edges)组成的集合,表示为G=(V, E),顶点v∈V,在论文即为单个的像素点,连接一对顶点的边(vi, vj)具有权重w(vi, vj),本文中的意义为顶点之间的不相似度(dissimilarity),所用的是无向图。
树
特殊的图,图中任意两个顶点,都有路径相连接,但是没有回路,最常见的二叉树等等。
最小生成树(minimum spanning tree)
特殊的树,给定需要连接的顶点,选择边权之和最小的树。
论文中,初始化时每一个像素点都是一个顶点,然后逐渐合并得到一个区域,确切地说是连接这个区域中的像素点的一个MST。如下图,棕色圆圈为顶点,线段为边,合并棕色顶点所生成的MST,对应的就是一个分割区域。分割后的结果其实就是森林。
1. 相似度
将图片视作图论中的graph,每个像素看做一个顶点(v),顶点之间的边的权重用来衡量相似度(w),对于RGB格式的图像,使用欧氏距离进行相似度衡量。(这里边的权重用距离定义,同样可以使用其他的颜色格式)
2. 分割区域的内部差
其中mst即为顶点集合C和边集合E所对应区域的最小生成树,其中最大的权值即为此区域的内部差。分割区域的内部差如公式所示,表示为顶点边的最大权重(边所连接的两点间最大距离)
3. 分割区域之间的差异
即连接两个区域所有边中,不相似度最小的边的不相似度,也就是两个区域最相似的地方的不相似度。(俩区域中任意顶点间的最小距离)
4. 判断两个区域间是否存在明显差异
基于以上两种概念,记 ,其中
当且仅当时认为二者差异明显,不需要合并(即
时需要合并)
关于 函数,这是一个关于区域大小的反函数,区域越小,其对于边界的要求显然更加苛刻。我们知道当起初两个区域都是孤立的像素值时,
,所有像素都是"零容忍"只有像素值完全一样才能合并,自然会导致过分割。所以刚开始的时候,应该给每个像素点设定一个可以容忍的范围,当生长到一定程度时,就应该去掉该初始容忍值的作用。其中,|C|为区域C所包含的像素点个数,如此,随着区域逐渐扩大,这一项的作用就越来越小,最后几乎可以忽略不计。那么k就是一个可以控制所形成的区域的大小的参数。k=0,则几乎每个像素都成为一个独立的区域,如果k=∞,整张图片都会聚集成一块。所以,k越大,分割后的图片也就越大。
5. 算法流程
-
记此时边数为n
-
将所有的边按照权值进行升序排列
1° 选择当前权值最小的边,不直接使用此条边,记其端点为,当
且
时,说明此时二者的差异比内部差更小,需要进行合并,否则跳过此条边
2° 遍历所有的边,将过程1重复n次,直至全部遍历
3° 将不同的点的集合赋予不同颜色显示。如图所示(网上图片):
以上描述的是依据区域之间边的权重进行合并,在最开始,每一个元素都是一个独立的区域。
https://zhuanlan.zhihu.com/p/50707777
https://blog.csdn.net/surgewong/article/details/39008861