Abstact
这篇论文解决将一张图片分割成若干个区域的问题。基于图的图像特征定义了一个断言用于区分两个区域的边界。基于这个断言开发了有效的分割算法,虽然这个算法属于贪心算法,它产生了令人满意的图像分割效果。在构造图时我们使用两种不同类型的局部邻居来应用算法进行图像分割,并用真实和合成的图片来证实结果。算法和图边数成线性关系,实践中运行速度也很快。该方法一个重要的特点是它能保留低变化区域的细节而忽略高变化区域的细节。这个特点的好处个人理解是在低变化区域有细节可以很好的融合,在高变化区域可以划分边界。
1. Introduction
图像分割和群组问题在CV领域依然是一个挑战。根据《格式塔运动》心理学,知觉编组在人类视觉感知中起着非常重要的作用。一系列计算机视觉问题在原则上可以充分利用图像分割,那样的分割是稳定、高效可计算的。例如中级水平的可视化问题像立体和姿势估计需要一个适当的区域来支撑相互的操作 。使用分割技术能识别空间不均匀支撑区域。高水平的问题如识别、图像索引也能使用分割结果去匹配,解决诸如图像/背景分离和识别等。
我们的目标是开发一种图像分割的方法能广泛用在一系列计算机视觉任务中,为了能广泛使用,我们认为算法应有如下属性
(1)抓住反映图像全局的重要的区域。两个中心问题是给出确切的描述,什么是感知重要性,提出使用什么样的分割技术。我们认为应该有一个精确的定义分割结果的属性,目的是去和其他方法比较优劣。
(2)高效、和图片像素成线性关系的运行效率。为了应用到工程实践中,分割方法运行速度应和边缘检测相似或其他低水平可视化处理技术,意味着具备平均线性时间和低常数因子。例如,一个每秒几帧分割方法能应用在视频处理应用中。
虽然过去几年使用特征向量的方法进行图像分割,取得了长足进步,但这些方法太慢而不能应用在工程中。本文的方法已经应用在大规模数据库中。虽然在图像分割领域有很多其他方法效率很高,但这些方法不能获取图片中可感知的重要全局属性。
和某些经典聚类方法一样,我们的方法是基于从图中选择边,其中每个像素对应于图中的一个节点,某些相邻像素通过无向边连接。权重是每边两端像素的差值。和经典算法不同,我们的算法基于图像邻近区域的可变性程度自适应调整分割原则。当执行贪心算法时方法的结果显示服从一定的不明显的全局属性。我们也显示针对NP hard 问题相关的其他调整原则。
现在举一个使用分割方法抓取合成图片的一些全局特征的例子。如下图
大多数人觉得左侧的图有三个不同区域:左半部是渐变矩形,右半部是带有一个洞的几乎没有变化区域,洞是一个高度变化的区域。这个例子表明了一些可感知的重要属性,应该被算法获取到。首先,广泛的不同强度的变化不应该单独作为多个区域的证据,例如左半部分矩形和右半部分的洞都是剧烈变化的区域。因此有恒定或者缓慢变化的区域不足以证明是独立的区域。第二个可感知的重要方面是三个区域不能靠纯粹的局部决定原则进行分割,因为左右两部分边界的强度变化程度和区域内部很多区块变化程度差不多。所以,为了分割那样的图像,应使用自适应或全局原则。
方法通过比较两个量来确定区域的边界:一种是基于边界间强度的不同,另外一种是基于每个区域内相邻像素之间强度的不同。直观上,边界间强度差异是重要的。基于这个想法我们开发了一个计算分割的算法。
3 Graph-Based Segmentation
让G = (V,E)是无向图,定点vi∈ V,边(vi,vj)∈E,边连接相邻定点。每条边都有权重w(vi,vj),权重是非负,是相邻定点的不相似度。在图像分割中V是图像的像素,权重是相邻两像素的差异(例如变化强度、颜色、运动、位置或其他属性的差异)。
S是V的一个划分,在同一划分中的像素间边的权重低一些,不同划分像素间边的权重高一些。
3.1算法实现原理
如上图所示。被分为3个区块。高频区h,斜坡区s,平坦区p。如果我们设置一个全局阈值,那么如果h区要合并成一块的话,那么该阈值要选很大,但是那样就会把p和s区域也包含进来,分割结果太粗。如果以p为参考,那么阈值应该选特别小的值,那样的话,p区是会合并成一块,但是,h区就会合并成特别特别多的小块,如同一面支离破碎的镜子,分割结果太细。显然,全局阈值并不合适,那么自然就得用自适应阈值。对于p区该阈值要特别小,s区稍大,h区巨大。
如何实现自适应阈值?使用区域的类内差异的概念,可以近似理解为一个区域内部最大的亮度差异值,定义是MST中不相似度最大的一条边。
Int(C)是随着区域的扩大不停的计算修正,所以类内差异的阈值是自适应。
要是两个区域合并还有另外一个概念类间差异,即连接两个区域所有边中找到最小值的边,代表两个区域最相似的地方的不相似度。
那么直观的判断是否合并的标准:
等价条件
直观的理解,类间差异的最大值代表这个区域的边界,任何像素点超过这个边界就不应该属于这个区域,而小于这个边界值得像素点应该归属于这个区域。当类间差异的最小值小于区域的最大值时就执行合并操作。
特殊情况,当二者都是孤立的像素值时,
,所有像素都是"零容忍"只有像素值完全一样才能合并,自然会导致过分割。所以刚开始的时候,应该给每个像素点设定一个可以容忍的范围,当生长到一定程度时,就应该去掉该初始容忍值的作用。原文条件如下
增加项
:
其中
为区域
所包含的像素点的个数,如此,随着区域逐渐扩大,这一项的作用就越来越小,最后几乎可以忽略不计。那么
就是一个可以控制所形成的的区域的大小,如果,
那么,几乎每个像素都成为了一个独立的区域,如果
,显然整张图片都会聚成一块。所以,
越大,分割后的图片也就越大。
算法步骤
Step 1: 计算每一个像素点与其8邻域或4邻域的不相似度。
如左边所示,实线为只计算4领域,加上虚线就是计算8邻域,由于是无向图,按照从左到右,从上到下的顺序计算的话,只需要计算右图中灰色的线即可。
Step 2: 将边按照不相似度non-decreasing排列(从小到大)排序得到
。Step 3: 选择
Step 4: 对当前选择的边
进行合并判断。设其所连接的顶点为
。如果满足合并条件:(1)
不属于同一个区域
;(2)不相似度不大于二者内部的不相似度。
则执行Step 5。否则执行Step 6
Step 5: 更新阈值以及类标号。
更新类标号:将
的类标号统一为
的标号。更新该类的不相似度阈值为:
。注意:由于不相似度小的边先合并,所以,
即为当前合并后的区域的最大的边,即
。Step 6: 如果
,则按照排好的顺序,选择下一条边转到Step 4,否则结束。
其余内容参考开头引用的博客内容。