转载:Contour Detection and Hierarchical Image Segmentation 图像边缘分割算法的学习与理解
2018-01-09 09:58
609 查看
原文链接:http://blog.csdn.net/alex_luodazhi/article/details/47337327
这篇博客非常简单易懂的剖析了Contour Detection and Hierarchical Image Segmentation这篇文章,而这篇文章,也是在分割领域里非常重要的一片文章,后续的很多边缘检测算法都利用了该模型,推荐阅读
算法路线:gPb-------OWT------UCM
每一部份的功能:
1. gPb(global Pb)计算每一个pixel的作为boundary的可能性,即pixel的weight;
2. OWT(Oriented Watershed Transform)将上述gPb的结果转换为多个闭合的regions;
3. UCM(Ultrametric Contour Map)将上述regions集,转换为hierarchical tree;
●gPb:
gPb分为两个部分,分别为mPb和sPb
1. mPb:
Step1:
其思路是对于每一个pixel,以其为圆心,做出一个圆形。
![](http://img.blog.csdn.net/20150825182132100?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
用倾斜角为θ的直径,将圆形划分为两个区域,对于每一个区域中的pixels,做出它们的histogram,如下:
![](http://img.blog.csdn.net/20150825215750688?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
使用histogram数据,代入到距离公式:
![](http://img.blog.csdn.net/20150825215625035?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
该值,就是G(x,y,θ),代表pixel(x,y)以θ为方向的gradient magnitude;
Step2:
下一步,普通的Pb算法将每一幅图片,分解为4个不同的feature channels,分别是brightness, color a, color b以及texture channel,其中前三个channels是基于CIE color space。
而每个pixel的weight就是由这4个channels下计算得到的G(x,y,θ)值的加权和得到。
针对普通的Pb算法,作者提出了multiscale的方法,即为mPb。
它的原理是在原有Pb算法的基础之上,同时使用多个圆形直径长度δ(作者使用三个,[ δ/2 ,δ, 2δ]),针对每一个δ,计算其G(x,y,θ),最终公式如下:
![](http://img.blog.csdn.net/20150825215735056?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
公式中的i代表channel,s代表scale,意思是
对于每一个pixel,我们计算其每一个不同直径条件下的每一个feature channel的和,作为其mPb值;
α代表每一个不同直径条件下的每一个feature channel的权重,是针对F-measure进行gradient ascent得到,使用的训练集是BSDS。
2. sPb:
接下来计算sPb值。
首先,作者作出了一个sparse symmetric affinity matrix W,其中,每一个元素Wij的计算如下:
![](http://img.blog.csdn.net/20150825215822920?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
i,j代表两个距离不超过半径r(单位:像素,作者在代码中设定r=5)的像素,p是两个像素连成的线段上的任意一个点,找到某两个pixel连成的线段上的pixel的weight的最大值。ρ是常数,作者代码中设定为ρ= 0.1。
因为该矩阵W代表pixels之间的相似度,通过令
![](http://img.blog.csdn.net/20150825215925317?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
得到矩阵D,由
![](http://img.blog.csdn.net/20150825220015838?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
计算得到前n+1个特征向量,代码中作者使用的是n=16;
接着,作者将每一个特征向量视为一幅图片,使用Gaussian directional derivative filters对它进行卷积操作,得到
![](http://img.blog.csdn.net/20150825220146034?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
从而,得到以下公式:
![](http://img.blog.csdn.net/20150825220127356?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中的参数
![](http://img.blog.csdn.net/20150825220212914?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
是将特征向量的物理解释问题视为mass-spring system得到的。
自此,我们得到了mPb和sPb,总公式为:
![](http://img.blog.csdn.net/20150825220236047?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
β参数前面前文已经解释,参数γ是使用BSDS训练集,通过在F-measure =
![](http://img.blog.csdn.net/20150825220841579?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
上进行gradient ascent得到。
最后,对于该gPb值进行sigmoid函数变换,使其值处于0-1之间,作为该pixel作为boundary的probability,我在下文都将其称为pixel的weight。
●OWT(Oriented Watershed Transform):
对于每一个pixel,
![](http://img.blog.csdn.net/20150825221202572?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,(该E(x,y,θ)即为gPb公式)代入八个设定的角度θ∈[0, pi],取其最大值;这样,每一个pixel均赋予了一个0到1之间的值,其值大小代表该pixel是boundary的可能性;
接着使用WT( watershed transform )技术,将以上的输入转化为一系列Po(regions)和Ko(arcs)。如图:
![](http://img.blog.csdn.net/20150825221218811?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图中红点为其region的minimal,arcs即为边界。
原来的WT算法,是使用该arc上的pixels的weight的平均值作为其强度。
然而这种方法,会导致一些弱arc的某些pixel因为处在强arc的周边,在计算
![](http://img.blog.csdn.net/20150825220636342?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
的过程中,选择了针对强arc的方向θ,从而该pixel的值偏大,于是弱arc的强度也相应偏大。如下图(两个石头像的中间,有许多横的强arc,这就是因为旁边的高强度的arc对它们的影响):
![](http://img.blog.csdn.net/20150825221251758?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150825221308932?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
而作者提出的OWT,是在WT的基础上,对所有处在arc上的pixel,重新选择合理的方向θ,计算E(x, y, θ),从而对arc的强度值作调整,方法如下:
对于每一个arc,我们将arc subdivide为许多线段,如图:
![](http://img.blog.csdn.net/20150825221404008?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
计算出其线段的方向,使用o(x,y)表示其方向,对于每一个pixel,重新计算其gPb,使用以下公式:
![](http://img.blog.csdn.net/20150825221456180?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最后重新计算每个arc的强度,即为arc上所有pixels的weight的平均值,OWT步骤自此完成,对比效果如图(中间的横线的强度恢复正常):
![](http://img.blog.csdn.net/20150825221532137?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150825221558047?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
●UCM(Ultrametric Contour Map):
为了在不同细节层次上对图像进行segmentation,作者使用了Ultrametric Contour Map (UCM)。
OWT算法已经output出细节度最高的regions集合,接下来,作者作出一个graph,如下:
![](http://img.blog.csdn.net/20150825221628816?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中,Po是regions,Ko是arcs,W(Ko)是该arc的强度。该图以region作为node,若两region相邻,则其对应的两个node相连,连接强度为W(Ko);
下一步,设两两regions之间的dissimilarity为其共同arc的强度平均值。
使用一种基于graph的merging技术,以两两regions之间的dissimilarity作为衡量标准,将regions按照dissimilarity升序排列,依次将dissimilarity小的region合并,直到最后只有一个region,这样,就完成了hierarchical tree的建设。
在这颗树中,因为生成树的每一个步骤,都是去除dissimilarity最小的arc,从而将两个region合并,因此,树中某个region元素的高度就代表着合并得到该region时,去除的arc的强度值大小,即:
![](http://img.blog.csdn.net/20150825221656725?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
因此,可以得到一个矩阵:
![](http://img.blog.csdn.net/20150825221720676?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
该矩阵的元素代表细节度最高的segmentation下,所有regions两两之间的dissimilarity,其值由两region的最小公共所属region的高度
![](http://img.blog.csdn.net/20150825221749114?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
决定。
元素值计算公式如下:
![](http://img.blog.csdn.net/20150825221835245?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
由于该树符合以下性质:
因此,这是一个Ultrametric Contour Map (UCM)
由此,通过设定不同的阈值k,我们可以得到不同细节度的segmentation。
设定不同K值,代码运行结果如图:
原图:
![](http://img.blog.csdn.net/20150825221918407?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
k=0.0001
k=0.001
![](http://img.blog.csdn.net/20150825222014985?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150825222032455?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
K=0.01
K=0.05
![](http://img.blog.csdn.net/20150825222155139?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150825222241118?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
K=0.1
K=0.12
![](http://img.blog.csdn.net/20150825222348432?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150825222436540?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
K=0.5 K=0.9
![](http://img.blog.csdn.net/20150825222604934?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20150825222650347?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
总结:
作者在原有的方法上,主要做了这四个方面的革新:
1. 在contour detector部分中的mPb环节引入了multiscale的概念,提出了mPb算法,可以将其视作普通Pb算法的加强版,公式如下:
![](http://img.blog.csdn.net/20150825222732117?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 在contour detector部分中的sPb环节,对特征向量采取Gaussian directional derivative filters卷积操作,公式如下:
![](http://img.blog.csdn.net/20150825222747347?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3. 提出了OWT(Oriented Watershed Transform),对原来算法中受强boundary影响而存在问题的pixel,结合其所属arc的方向再次计算其weight。
4. 将OWT生成的region集合组合成UCM(Ultrametric Contour Map),使得我们可以通过阈值k来输出不同细节度的图像轮廓。
原文链接:http://blog.csdn.net/alex_luodazhi/article/details/47337327
这篇博客非常简单易懂的剖析了Contour Detection and Hierarchical Image Segmentation这篇文章,而这篇文章,也是在分割领域里非常重要的一片文章,后续的很多边缘检测算法都利用了该模型,推荐阅读
算法路线:gPb-------OWT------UCM
每一部份的功能:
1. gPb(global Pb)计算每一个pixel的作为boundary的可能性,即pixel的weight;
2. OWT(Oriented Watershed Transform)将上述gPb的结果转换为多个闭合的regions;
3. UCM(Ultrametric Contour Map)将上述regions集,转换为hierarchical tree;
●gPb:
gPb分为两个部分,分别为mPb和sPb
1. mPb:
Step1:
其思路是对于每一个pixel,以其为圆心,做出一个圆形。
用倾斜角为θ的直径,将圆形划分为两个区域,对于每一个区域中的pixels,做出它们的histogram,如下:
使用histogram数据,代入到距离公式:
该值,就是G(x,y,θ),代表pixel(x,y)以θ为方向的gradient magnitude;
Step2:
下一步,普通的Pb算法将每一幅图片,分解为4个不同的feature channels,分别是brightness, color a, color b以及texture channel,其中前三个channels是基于CIE color space。
而每个pixel的weight就是由这4个channels下计算得到的G(x,y,θ)值的加权和得到。
针对普通的Pb算法,作者提出了multiscale的方法,即为mPb。
它的原理是在原有Pb算法的基础之上,同时使用多个圆形直径长度δ(作者使用三个,[ δ/2 ,δ, 2δ]),针对每一个δ,计算其G(x,y,θ),最终公式如下:
公式中的i代表channel,s代表scale,意思是
对于每一个pixel,我们计算其每一个不同直径条件下的每一个feature channel的和,作为其mPb值;
α代表每一个不同直径条件下的每一个feature channel的权重,是针对F-measure进行gradient ascent得到,使用的训练集是BSDS。
2. sPb:
接下来计算sPb值。
首先,作者作出了一个sparse symmetric affinity matrix W,其中,每一个元素Wij的计算如下:
i,j代表两个距离不超过半径r(单位:像素,作者在代码中设定r=5)的像素,p是两个像素连成的线段上的任意一个点,找到某两个pixel连成的线段上的pixel的weight的最大值。ρ是常数,作者代码中设定为ρ= 0.1。
因为该矩阵W代表pixels之间的相似度,通过令
得到矩阵D,由
计算得到前n+1个特征向量,代码中作者使用的是n=16;
接着,作者将每一个特征向量视为一幅图片,使用Gaussian directional derivative filters对它进行卷积操作,得到
从而,得到以下公式:
其中的参数
是将特征向量的物理解释问题视为mass-spring system得到的。
自此,我们得到了mPb和sPb,总公式为:
β参数前面前文已经解释,参数γ是使用BSDS训练集,通过在F-measure =
上进行gradient ascent得到。
最后,对于该gPb值进行sigmoid函数变换,使其值处于0-1之间,作为该pixel作为boundary的probability,我在下文都将其称为pixel的weight。
●OWT(Oriented Watershed Transform):
对于每一个pixel,
,(该E(x,y,θ)即为gPb公式)代入八个设定的角度θ∈[0, pi],取其最大值;这样,每一个pixel均赋予了一个0到1之间的值,其值大小代表该pixel是boundary的可能性;
接着使用WT( watershed transform )技术,将以上的输入转化为一系列Po(regions)和Ko(arcs)。如图:
图中红点为其region的minimal,arcs即为边界。
原来的WT算法,是使用该arc上的pixels的weight的平均值作为其强度。
然而这种方法,会导致一些弱arc的某些pixel因为处在强arc的周边,在计算
的过程中,选择了针对强arc的方向θ,从而该pixel的值偏大,于是弱arc的强度也相应偏大。如下图(两个石头像的中间,有许多横的强arc,这就是因为旁边的高强度的arc对它们的影响):
而作者提出的OWT,是在WT的基础上,对所有处在arc上的pixel,重新选择合理的方向θ,计算E(x, y, θ),从而对arc的强度值作调整,方法如下:
对于每一个arc,我们将arc subdivide为许多线段,如图:
计算出其线段的方向,使用o(x,y)表示其方向,对于每一个pixel,重新计算其gPb,使用以下公式:
最后重新计算每个arc的强度,即为arc上所有pixels的weight的平均值,OWT步骤自此完成,对比效果如图(中间的横线的强度恢复正常):
●UCM(Ultrametric Contour Map):
为了在不同细节层次上对图像进行segmentation,作者使用了Ultrametric Contour Map (UCM)。
OWT算法已经output出细节度最高的regions集合,接下来,作者作出一个graph,如下:
其中,Po是regions,Ko是arcs,W(Ko)是该arc的强度。该图以region作为node,若两region相邻,则其对应的两个node相连,连接强度为W(Ko);
下一步,设两两regions之间的dissimilarity为其共同arc的强度平均值。
使用一种基于graph的merging技术,以两两regions之间的dissimilarity作为衡量标准,将regions按照dissimilarity升序排列,依次将dissimilarity小的region合并,直到最后只有一个region,这样,就完成了hierarchical tree的建设。
在这颗树中,因为生成树的每一个步骤,都是去除dissimilarity最小的arc,从而将两个region合并,因此,树中某个region元素的高度就代表着合并得到该region时,去除的arc的强度值大小,即:
因此,可以得到一个矩阵:
该矩阵的元素代表细节度最高的segmentation下,所有regions两两之间的dissimilarity,其值由两region的最小公共所属region的高度
决定。
元素值计算公式如下:
由于该树符合以下性质:
因此,这是一个Ultrametric Contour Map (UCM)
由此,通过设定不同的阈值k,我们可以得到不同细节度的segmentation。
设定不同K值,代码运行结果如图:
原图:
k=0.0001
k=0.001
K=0.01
K=0.05
K=0.1
K=0.12
K=0.5 K=0.9
总结:
作者在原有的方法上,主要做了这四个方面的革新:
1. 在contour detector部分中的mPb环节引入了multiscale的概念,提出了mPb算法,可以将其视作普通Pb算法的加强版,公式如下:
2. 在contour detector部分中的sPb环节,对特征向量采取Gaussian directional derivative filters卷积操作,公式如下:
3. 提出了OWT(Oriented Watershed Transform),对原来算法中受强boundary影响而存在问题的pixel,结合其所属arc的方向再次计算其weight。
4. 将OWT生成的region集合组合成UCM(Ultrametric Contour Map),使得我们可以通过阈值k来输出不同细节度的图像轮廓。
原文链接:http://blog.csdn.net/alex_luodazhi/article/details/47337327
相关文章推荐
- Contour Detection and Hierarchical Image Segmentation 伯克利的一篇图像分割论文理解与学习
- 文章 contour detection and hierarchical image segmentation 源代码 编译
- Contour Detection and Hierarchical Image Segmentation
- 图像分割(一)Contour Detection and Hierarchical Image Segmentation
- Contour Detection and Hierarchical Image Segmentation 源码编译运行
- Contour Detection and Hierarchical Image Segmentation(续)
- Contour Detection and Hierarchical Image Segmentation 源码编译运行
- Contour Detection and Hierarchical Image Segmentation
- Contour Detection and Image Segmentation 简介
- image segmentation emulating ecognition source code in vc6 图像分割算法模仿FENA
- 图像分割—基于图的图像分割(Graph-Based Image Segmentation)
- 深度学习之图像分割 《Fully Convolutional Networks for Semantic Segmentation》—FCN
- CCS算法(Contour-Constrained Superpixels for Image and Video Processing)
- 图像分割—基于图的图像分割(Graph-BasedImageSegmentation)
- 图像分割算法:概述及常用边缘检测算法
- 深度学习研究理解6:OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
- 【转载】[完整]Automatic Audio Segmentation: Segment Boundary and Structure Detection in Popular Music
- Image Contour and Junction Detection
- rcnn学习笔记:Rich feature hierarchies for accurate object detection and semantic segmentation
- 对图像边缘进行随机均匀采样的算法实现( 转载)