基于图的图像分割(Graph-Based Image Segmentation),论文《Efficient Graph-Based Image Segmentation》

论文和C++代码:

Graph-Based Segmentation 是经典的图像分割算法,作者Felzenszwalb也是提出DPM算法的大牛。不过,目前直接用它做分割的应该比较少,但是很多算法用它作垫脚石,用它来产生过分割(oversegmentation)。

文章主要介绍了一种基于图表示(graph-based)的图像分割方法。图像分割(Image Segmentation)的主要目的也就是将图像(image)分割成若干个特定的、具有独特性质的区域(region),然后从中提取出感兴趣的目标(object)。而图像区域之间的边界定义是图像分割算法的关键,论文给出了一种在图表示(graph-based)下图像区域之间边界的定义的判断标准,其分割算法就是利用这个判断标准(predicate)使用贪心选择(greedy decision)来产生分割。

该算法在时间效率上,基本上与图像(Image)的图(Graph)表示的边(edge)数量成线性关系,而图像的图表示的边与像素点成正比,也就说图像分割的时间效率与图像的像素点个数成线性关系。这个算法有一个非常重要的特性,它能保持低变化(low-variability)区域(region)的细节,同时能够忽略高变化(high-variability)区域(region)的细节。这个性质很特别也很重要,对图像有一个很好的分割效果(能够找出视觉上一致的区域,简单讲就是高变化区域有一个很好聚合(grouping),能够把它们分在同一个区域),这也是为什么那么多人引用该论文的原因吧。

图的基本概念

图像(image)的图表示是指将图像(image)表达成图论中的图(graph)。具体说来就是,把图像中的每一个像素点看成一个顶点vi ∈ V(node或vertex),像素点之间的关系对(可以自己定义其具体关系,一般来说是指相邻关系)构成图的一条边ei ∈ E,这样就构建好了一个图 G = (V,E)。图每条边的权值是基于像素点之间的关系,可以是像素点之间的灰度值差,也可以是像素点之间的距离(如果是4-邻域相邻关系的话,这个权值就没意义了)。

是由顶点集V(vertices)和集E(edges)组成,表示为G=(V, E),每个像素点代表图的一个顶点vi ∈ V ,相邻的两个像素点构成一条边(vi, vj) ∈ E,像素颜色值的差异构成边(vi, vj)的权值w((vi, vj)),本文中的意义为顶点之间的不相似度(dissimilarity),所用的是无向图


     树:特殊的图,图中任意两个顶点,都有路径相连接,但是没有回路。如上图中加粗的边所连接而成的图。如果看成一团乱连的珠子,只保留树中的珠子和连线,那么随便选个珠子,都能把这棵树中所有的珠子都提起来。如果,i和h这条边也保留下来,那么h,I,c,f,g就构成了一个回路。

   最小生成树(MST, minimum spanning tree):给定需要连接的顶点,选择边权之和最小的树。

论文中,初始化时每一个像素点都是一个顶点,然后逐渐合并得到一个区域,确切地说是连接这个区域中的像素点的一个MST。如下图,棕色圆圈为顶点,线段为边,合并棕色顶点所生成的MST,对应的就是一个分割区域。分割后的结果其实就是森林。

相似性

对于孤立的两个像素点,所不同的是灰度值,自然就用灰度的距离来衡量两点的相似性,本文中是使用RGB的距离,即                                                     

对于灰度图像就只能使用亮度值了,此外,还可以先使用纹理特征滤波,再计算距离,比如先做Census Transform再计算Hamming distance距离。

全局阈值à自适应阈值

上面提到应该用亮度值之差来衡量两个像素点之间的差异性。对于两个区域(子图)或者一个区域和一个像素点的相似性,最简单的方法即只考虑连接二者的边的不相似度。如下图,已经形成了棕色和绿色两个区域,现在通过紫色边来判断这两个区域是否合并。那么我们就可以设定一个阈值,当两个像素之间的差异(即不相似度)小于该值时,合二为一。迭代合并,最终就会合并成一个个区域,效果类似于区域生长。

不同于灰度图像特征,纹理通过像素及其周围空间邻域的灰度分布来表现,即局部纹理信息,纹理具有三大标志:

  • 某种局部序列性不断重复;
  • 非随机排列;
  • 纹理区域内大致为均匀的统一体;

举个例子说明:下面这张图应该聚成右图所思的3类,高频区h,斜坡区s,平坦区p。如果我们设置一个全局阈值,那么如果h区要合并成一块的话,那么该阈值要选很大,但是那样就会把p和s区域也包含进来,分割结果太粗。如果以p为参考,那么阈值应该选特别小的值,那样的话,p区是会合并成一块,但是,h区就会合并成特别特别多的小块,如同一面支离破碎的镜子,分割结果太细

显然,全局阈值并不合适,那么自然就得用自适应阈值。对于p区该阈值要特别小,s区稍大,h区巨大。

对于两个区域(原文中叫Component,实质上是一个MST,单独的一个像素点也可以看成一个区域),本文使用了非常直观,但抗干扰性并不强的方法。先来两个定义,原文依据这两个附加信息来得到自适应阈值。

一个区域内的类内差异Int(C):可以近似理解为一个区域内部最大的亮度差异值,定义是MST中不相似度最大的一条边。

俩个区域的类间差异Diff(C1, C2):即连接两个区域所有边中,不相似度最小的边的不相似度,也就是两个区域最相似的地方的不相似度。

直观的判断,当:  ,时,两个区域应当合并!

解释: 分别是区域C1, C2所能忍受的最大差异,当二者都能忍受当前差异时,你情我愿,一拍即合,只要有一方不愿意,就不能强求。

特殊情况,当二者都是孤立的像素值时,,所有像素都是"零容忍"只有像素值完全一样才能合并,自然会导致过分割。所以刚开始的时候,应该给每个像素点设定一个可以容忍的范围,当生长到一定程度时,就应该去掉该初始容忍值的作用。

阈值函数τ主要是为了更好的控制分割区域边界的定义。比较直观的理解,小分割区域的边界定义要强于大分割区域,否则可以将小分割区域继续合并形成大区域。在这里给出的阈值函数与区域的大小有关。

|C|是指分割部分顶点的个数(或者像素点个数),如此,随着区域逐渐扩大,这一项的作用就越来越小,最后几乎可以忽略不计。那么k就是一个可以控制所形成的的区域的大小,如果,那么,几乎每个像素都成为了一个独立的区域,如果,显然整张图片都会聚成一块。所以,越大,分割后的图片也就越大。

算法过程

  1. 对于图G的所有边,按照权值进行排序(升序)
  2. S[0]是一个原始分割,相当于每个顶点当做是一个分割区域
  3. q = 1,2,...,m 重复4的操作(m为边的条数,也就是每次处理一条边)
  4. 根据上次S[q-1]的构建。选择一条边o[q](vi,vj),如果vi和vj在分割的互不相交的区域中,比较这条边的权值与这两个分割区域之间的最小分割内部差MInt,如果o[q](vi,vj) < MInt,那么合并这两个区域,其他区域不变;如果否,什么都不做。
  5. 最后得到的就是所求的分割S = S[m]

上面的过程算法过程就相当于先将图分割成一个个顶点,然后通过合并策略,将它们合并.

from :https://blog.csdn.net/huixingshao/article/details/42642973

基于图的图像分割(Graph-Based Image Segmentation)相关推荐

  1. 基于图的图像分割(Effective graph-based image segmentation)python实现

    基于图的图像分割Effective graph-based image segmentation 前言 简介 代码实现与解读 图的构建 图像分割 问题 前言 最近在学习区域卷积神经网络(RCNN)时, ...

  2. 图构造总结-Graph‑based semi‑supervised learning via improving the quality of the graph dynamically

    前言 本博文主要对论文中提到的图构造方法进行梳理,论文自己提出的模型并未介绍,感兴趣的可以阅读原文 摘要 基于图的半监督学习GSSL主要包含两个过程:图的构建和标签推测.传统的GSSL中这两个过程是完 ...

  3. 当图网络遇上计算机视觉!计算机视觉中基于图神经网络和图Transformer的方法和最新进展...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 可能是目前最全面的<当图网络遇上计算机视觉>综述!近四 ...

  4. 【论文解读 ICEIT2022】Heterogeneous Graph Based Knowledge Tracing基于异构图的知识追踪

    文章目录 摘要 1 引言 2 相关工作 2.1 知识追踪 2.2 异构图嵌入 3 基于异构图嵌入的知识追踪 4 实验 5 结论 依然是两阶段 摘要 最近,随着在线辅导系统的发展,对知识追踪(Knowl ...

  5. 【论文笔记】Revisiting graph based collaborative Filtering:一种线性残差图图卷积网络方法

    Revisiting Graph based Collaborative Filtering:A Linear Residual Graph Convolutional Network Approac ...

  6. 【质量评价】Inferring Point Cloud Quality via Graph Similarity 基于图相似性的点云质量评价

    [质量评价]Inferring Point Cloud Quality via Graph Similarity 基于图相似性的点云质量评价 内容介绍 1. Introduction 1.1 Back ...

  7. 基于图卷积的价格推荐论文(Price-aware Recommendation with Graph Convolutional Networks)

    基于图卷积的价格推荐论文概述 ICDE2020非常好的文章 Price-aware Recommendation with Graph Convolutional Networks paper lin ...

  8. 基于空间方法的图神经网络模型_用于时空图建模的图神经网络模型 Graph WaveNet | 课程上新...

    课程概要 本课程来自集智学园图网络论文解读系列活动. 是对论文<Graph WaveNet for Deep Spatial-Temporal Graph Modeling>的解读. 时空 ...

  9. 基于matlab的图像分割,基于MATLAB的图像分割算法研究毕业论文

    作者姓名   XXX 学号 指导教师    XX教授 学科专业   计算机科学与技术 所在学院     计算机学院 提交日期 结  论 数字图像目标分割与提取是数字图像处理和计算机视觉领域中一个备受关 ...

最新文章

  1. 人工智能会被赋予人性么?
  2. Hardcoded string , should use @string resource警告 Tag start is not closed
  3. 巴特沃斯滤波器python_如何用Scipy.signal.bu实现带通巴特沃斯滤波器
  4. error: Microsoft Visual C++ 14.0 is required.
  5. 单用户修改root密码--redhat7.2 or centos7
  6. vue页面锚文本_Vue如何实现锚点定位功能?
  7. php动态写入vue,Vue.js中使用动态组件的方法
  8. (经典实用五大排序)选择排序,计数排序,冒泡排序,快速排序,插入排序
  9. 那些在错误道路上一路狂奔的国产VR
  10. 【iOS】Web Color 的 Swift 实现
  11. Windows 10 安装(硬盘装机)
  12. 综合能源业务有哪些?
  13. VB做的 串口PID 调试助手
  14. jmp连mysql_JMP官方教学视频列表
  15. Python准备篇:第三方库管理
  16. golang模拟抢票
  17. python数据挖掘(2.分类 OneR算法)
  18. defaults(default是什么职位)
  19. 【Windows10+Ubuntu22.04双系统 华硕主板 B660M-plus 装机个人总结】
  20. matlab水果图片,matlab数字图像处理-----------------水果识别

热门文章

  1. mysql视图转sql server视图_SQL Sever MYSQL 视图实现的 2 种方式
  2. python脚本打包成linux命令_Python脚本文件打包成可执行文件的方法
  3. 概率图模型更进一步的知识点
  4. 订单号生成的一些想法
  5. JMeter(十三)-代理服务器录制脚本
  6. Ajax异步方式实现登录与參数的校验
  7. muduo源代码分析--Reactor模式在muduo中的使用
  8. 配置electron
  9. 2013腾讯编程马拉松初赛第二场(3月22日) 小Q系列故事——为什么时光不能倒流 ---好水!!...
  10. Flutter PageView 属性使用详解