图像分割—基于图的图像分割(Graph-Based Image Segmentation)
Reference:
Efficient Graph-Based Image Segmentation,IJCV 2004,MIT Code
最后一个暑假了,不打算开疆辟土了,战略中心转移到品味经典,计划把图像分割和目标追踪的经典算法都看一看,再记些笔记。
Graph-Based Segmentation 是经典的图像分割算法,作者Felzenszwalb也是提出DPM算法的大牛。该算法是基于图的贪心聚类算法,实现简单,速度比较快,精度也还行。不过,目前直接用它做分割的应该比较少,毕竟是99年的跨世纪元老,但是很多算法用它作垫脚石,比如Object Propose的开山之作《Segmentation as Selective Search for Object Recognition》就用它来产生过分割(oversegmentation)。还有的语义分割(senmatic segmentation )算法用它来产生超像素(superpixels)具体忘记了……
图的基本概念
因为该算法是将照片用加权图抽象化表示,所以补充图的一些基本概念。
图是由顶点集(vertices)和边集
(edges)组成,表示为
,顶点
,在本文中即为单个的像素点,连接一对顶点的边
具有权重
,本文中的意义为顶点之间的不相似度,所用的是无向图。
树:特殊的图,图中任意两个顶点,都有路径相连接,但是没有回路。如上图中加粗的边所连接而成的图。如果看成一团乱连的珠子,只保留树中的珠子和连线,那么随便选个珠子,都能把这棵树中所有的珠子都提起来。如果,i和h这条边也保留下来,那么顶点h,i,c,f,g就构成了一个回路。
最小生成树(MST, minimum spanning tree):特殊的树,给定需要连接的顶点,选择边权之和最小的树。上图即是一棵MST
本文中,初始化时每一个像素点都是一个顶点,然后逐渐合并得到一个区域,确切地说是连接这个区域中的像素点的一个MST。如图,棕色圆圈为顶点,线段为边,合并棕色顶点所生成的MST,对应的就是一个分割区域。分割后的结果其实就是森林。
相似性
既然是聚类算法,那应该依据何种规则判定何时该合二为一,何时该继续划清界限呢?
对于孤立的两个像素点,所不同的是颜色,自然就用颜色的距离来衡量两点的相似性,本文中是使用RGB的距离,即
当然也可以用perceptually uniform的Luv或者Lab色彩空间,对于灰度图像就只能使用亮度值了,此外,还可以先使用纹理特征滤波,再计算距离,比如,先做Census Transform再计算Hamming distance距离。
全局阈值à自适应阈值
上面提到应该用亮度值之差来衡量两个像素点之间的差异性。对于两个区域(子图)或者一个区域和一个像素点的相似性,最简单的方法即只考虑连接二者的边的不相似度。
如图,已经形成了棕色和绿色两个区域,现在通过紫色边来判断这两个区域是否合并。那么我们就可以设定一个阈值,当两个像素之间的差异(即不相似度)小于该值时,合二为一。迭代合并,最终就会合并成一个个区域,效果类似于区域生长:星星之火,可以燎原。