Shi J. and Malik J. Normalized cuts and image segmentation. In IEEE Transactions on Pattern Analysis and Machine Intelligence.

在Digital Image Preprocessing的书上看到了这个算法, 对于其公式结果的推出不是很理解, 于是下载下来看了看. 本文主要讲的是一种利用图结构进行图像分割的算法.

主要内容

假设\(f(x, y), x=1,2,\cdots M, y=1,2,\cdots N\)为一张图片, 我们想要对其进行分割. 给定某一个距离函数, 可以用于衡量任意两点\(i, j\)的相似度:

\[w_{ij} = w(i, j).
\]

把图片的每一个pixel看成一个节点, pixel和pixel之间的边为一条无向边, 则整体构成了一个无向的图 \(G = (V, E)\), 每条边的权重如上所述是\(w_{ij}\), 故易知\(w_{ij} = w_{ji}\). 我们的目标是将图分成相斥的两块\(A, B\), 即满足:

\[A \bigcup B = V, A \bigcap B = \empty.
\]

以往的做法是, 找到一个分割, 使得下列指标最小:

\[cut(A, B) = \sum_{i \in A, j \in B} w_{ij},
\]

但是这种策略往往会导致不均匀的分割, 即最角落里的元素被单独分割出来:

于是作者提出了一种新的指标:

\[Ncut(A, B) = \frac{cut(A, B)}{assoc(A, V)} + \frac{cut(A, B)}{assoc(B, V)},
\]

其中\(assoc(A, V) = \sum_{i \in A, j \in V} w_{ij}\).

注意到:

\[Ncut(A, B) = \frac{cut(A, B)}{cut(A, B) + assoc(A, A)} + \frac{cut(A, B)}{cut(A, B) + assoc(B, B)},
\]

所以只有到\(assoc(A, A), assoc(B, B)\)都足够大的时候Ncut才会足够小, 这说明该指标更关注了内部的一种紧密性.

求解

\[x_i = +1, \text{ if } i \in A, \quad x_i = -1 \text{ if } i \in B \\
d_i = \sum_{j}w_{ij}.
\]

\[Ncut(A, B) = \frac{\sum_{x_i > 0, x_j < 0} -w_{ij}x_i x_j}{\sum_{x_i > 0}d_i}
+\frac{\sum_{x_i < 0, x_i > 0} -w_{ij}x_i x_j}{\sum_{x_i < 0}d_i}.
\]

容易证明(但是不容易想到):

\[[\frac{1+x}{2}]_i = x_i = +1, \: \text{if } i \in A, \quad
[\frac{1+x}{2}]_i = 0, \: \text{if } i \in B.
\]
\[[\frac{1-x}{2}]_i = -x_i = +1, \: \text{if } i \in B, \quad
[\frac{1-x}{2}]_i = 0, \: \text{if } i \in A.
\]

\[[W]_{ij} = w_ij, \\
D_{ii} = d_i,
\]

且\(D_{ii}\)为对角矩阵.

所以我们能够证明以下事实:

\[4\cdot cut(A, B) = (1+x)^T W (1 - x) \\
4 \cdot assoc(A, V) = 2\cdot (1 + x)^T D 1 = (1 + x)^T D (1 + x) \\
4 \cdot assoc(B, V) = 2\cdot (1 - x)^T D 1 = (1 - x)^T D (1 - x) \\
assoc(V, V) = \sum_i d_i = 1^T D 1 \\
(1 + x)^T D (1 - x) = 0.
\]

又注意到:

\[\sum_{x_i > 0, x_j < 0} -w_{ij} x_i x_j = \sum_{x_i > 0} [d_i - \sum_{x_j >0} w_{ij}] = \frac{1}{4}(1 + x)^T (D - W) (1 + x),
\]

于是同理可证:

\[(1 + x)^TW(1 - x) = (1 + x)^T (D - W)(1 +x) = (1 - x)^T (D - W)(1 -x) .
\]

\[k = \frac{assoc(A, V)}{assoc(V, V)},
\]

\[1 - k = \frac{assoc(B, V)}{assoc(V, V)}.
\]

综上可得:

\[ Ncut(A, B) = \frac{cut(A, B)}{k1^T D1} + \frac{cut(A, B)}{(1-k)1^TD1} = \frac{cut(A, B)}{k(1-k)1^TD1}.
\]

\[\begin{array}{ll}
&[(1 + x) - b(1-x)]^T (D-W)[(1+x) - b(1-x)] \\
=& (1+x)^T(D-W)(1+x) + b^2 (1-x)^T(D-W) \\
&- 2b (1+x)^T(D-W)(1-x) \\
=&4(1+b^2)cut(A, B) - 2b (1 + x)^TD(1-x) + 2b(1 + x)^T W(1-x) \\
=&4(1+b^2)cut(A, B) - 0 + 8b cut(A, B) \\
=&4(1 + b)^2 cut(A, B).
\end{array}
\]

\[(1 + \frac{k}{1-k})^2 = \frac{1}{(1-k)^2},
\]

\[4\cdot Ncut(A,B) = \frac{4(1+b)^2}{b1^TD1} = \frac{[(1 + x) - b(1-x)]^T (D-W)[(1+x) - b(1-x)]}{b1^TD1}, \\
b = \frac{k}{1-k}.
\]

令\(y = (1 + x) - b(1 - x)\), 且

\[y^TDy = \sum_{x_i > 0}d_i + b^2 \sum_{x_i < 0}d_i = b( \sum_{x_i < 0}d_i + b \sum_{x_i < 0}d_i) = b1^TD1.
\]
\[4 \cdot Ncut(A, B) = \frac{y^T(D-W)y}{y^TDy}.
\]

\[\min_x Ncut(A, B) = \min_y \frac{1}{4} \frac{y^T(D-W)y}{y^TDy}, \\
\mathrm{s.t.} \quad y_i \in \{1, 1 - b\}.
\]

倘若我们能放松条件至实数域中, 此时只需要通过求解下列系统:

\[(D-W)y = \lambda Dy \Leftrightarrow D^{-\frac{1}{2}}(D-W)D^{-\frac{1}{2}} z = \lambda z, z = D^{\frac{1}{2}}y.
\]

需要注意的是:

\[(D-W)1 = 0,
\]

此时\(z_0 = D^{\frac{1}{2}}1\),

故\(1\)实际上上述系统的一个解, 且对应最小的特征值, 但其不是我们所要的解. 因为\(y\)必须要还满足:

\[y^T D 1 = \sum_{x_i > 0}d_i - b \sum_{x_i < 0} d_i = 0,
\]

这意味着, 我们要的恰恰是

\[D^{-\frac{1}{2}}(D-W)D^{-\frac{1}{2}} z = \lambda z, z = D^{\frac{1}{2}}y
\]

倒数第二小的特征值对应的特征向量\(z_1\), 于是\(y_1 = D^{-\frac{1}{2}}z_1\).

相似度

文中采用如下的计算方式:

\[w_{ij} =
\left \{
\begin{array}{ll}
e^{-\|F_i - F_j\|^2 / \sigma^2_I} \cdot e^{-\|X_i - X_j\|^2 / \sigma^2_X} & \text{if } \|X_i - X_j\| < r \\
0 & \text{else}.
\end{array}
\right.
\]

其中\(F\)对应颜色之类的距离, 如直接取密度值, 而\(X\)对应空间距离, \(r\)限定了搜索范围, 同样会导致\(W\)变成系数矩阵, 对应特征求解加速有帮助.

总的算法流程

  1. 计算权重矩阵\(W\)以及\(D\);
  2. 通过
    \[D^{-\frac{1}{2}}(D-W)D^{-\frac{1}{2}} z = \lambda z
    \]

    计算得到倒数第二小的特征值所对应的特征向量\(z_1\)并令\(y_1=z_1\);

  3. 通过某种方法(如网格搜索)找到一个阈值\(t\):
    \[x_i = 1, \: \text{if }y_i > t, \: \text{else } -1.
    \]

    且\(x\)的划分下

    \[Ncut(A, B)
    \]

    较小.

  4. 对于\(A, B\)可以重复上述分割过程, 直到满足区域数目或者其它某种条件(比如文中说的特征向量的分布过于均匀时停止).

skimage.future.graph.cut

skimage.future.graph.cut

Normalized Cuts and Image Segmentation的更多相关文章

  1. {Reship}{Code}{CV}

    UIUC的Jia-Bin Huang同学收集了很多计算机视觉方面的代码,链接如下: https://netfiles.uiuc.edu/jbhuang1/www/resources/vision/in ...

  2. UIUC同学Jia-Bin Huang收集的计算机视觉代码合集

    转自:http://blog.sina.com.cn/s/blog_631a4cc40100wrvz.html   UIUC的Jia-Bin Huang同学收集了很多计算机视觉方面的代码,链接如下: ...

  3. 计算机视觉与模式识别代码合集第二版two

    Topic Name Reference code Image Segmentation Segmentation by Minimum Code Length AY Yang, J. Wright, ...

  4. 谱聚类 Spectral Clustering

    转自:http://www.cnblogs.com/wentingtu/archive/2011/12/22/2297426.html 如果说 K-means 和 GMM 这些聚类的方法是古代流行的算 ...

  5. CV code references

    转:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction:   SIFT [1] [Demo program][SI ...

  6. [ZZ] UIUC同学Jia-Bin Huang收集的计算机视觉代码合集

    UIUC同学Jia-Bin Huang收集的计算机视觉代码合集 http://blog.sina.com.cn/s/blog_4a1853330100zwgm.htmlv UIUC的Jia-Bin H ...

  7. Computer Vision Resources

    Computer Vision Resources Softwares Topic Resources References Feature Extraction SIFT [1] [Demo pro ...

  8. 漫谈 Clustering (4): Spectral Clustering

    转:http://blog.pluskid.org/?p=287 如果说 K-means 和 GMM 这些聚类的方法是古代流行的算法的话,那么这次要讲的 Spectral Clustering 就可以 ...

  9. CV codes代码分类整理合集 《转》

    from:http://www.sigvc.org/bbs/thread-72-1-1.html 一.特征提取Feature Extraction:   SIFT [1] [Demo program] ...

随机推荐

  1. day9 图书设计项目

    总路由层url from django.conf.urls import url from django.contrib import admin from app01 import views ur ...

  2. DBeaver客户端工具连接Hive

    目录 介绍 下载安装 相关配置 1.填写主机名 2.配置驱动 简单使用 主题设置 字体背景色 介绍 在hive命令行beeline中写一些很长的查询语句不是很方便,急需一个hive的客户端界面工具 D ...

  3. 【AWS】【Basis】基础概念

    1.基础服务类型: 1.1. 链接: 官方文档,很详细:https://www.amazonaws.cn/products/#compute_networking/?nc1=f_dr 这个是一个whi ...

  4. 如何使用gitHub管理自己的项目

    GitHub 与 Git Git是一种分布式版本控制系统,与svn是同样的概念 GitHub是一个网站,提供Git服务 前提:你的本机电脑已经安装了git,并且已经注册了gitHub账号 Git上传本 ...

  5. RocketMQ应用及原理剖析

    主流消息队列选型对比分析 基础项对比 可用性.可靠性对比 功能性对比 对比分析 Kafka:系统间的流数据通道 RocketMQ:高性能的可靠消息传输 RabbitMQ:可靠消息传输 RocketMQ ...

  6. python pandas 中文件的读写——read_csv()读取文件

    read_csv()读取文件1.python读取文件的几种方式read_csv 从文件,url,文件型对象中加载带分隔符的数据.默认分隔符为逗号read_table 从文件,url,文件型对象中加载带 ...

  7. 捷码:重塑DevOps,打造更流畅紧密的开发与服务交付业务链

    捷码Gemcoder 1周前如果有机会安排一场行业吐槽大会,熟悉软件开发.交付.服务业务各环节的业内人士,对开发中的各种扯皮.交付反反复复.运维服务中的提心吊胆,往往会有很多深刻的体验和刻骨铭心的案例 ...

  8. Gitlab Flow到容器

    一.简介 长话短说,本文全景呈现我司项目组gitlab flow && devops Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架 ...

  9. 为什么kafka和zk总是在一起?

    一.概念 发布订阅,一个发布者发布到消息,所有订阅者都可以接收到 生产消费,一个消息对象只能被一个消费者消费 kafka是生产者,zookeeper是消费者 有3个微服务,聚合形成一个统一的业务层 但 ...

  10. M语言中的引用(Power Query 之 M 语言)

    名词 查询表 函数 行{}/列[] 单元格 表(Table) 列表(List) 记录(Record) 引用[查询表] =查询表表名 引用[应用的步骤] =步骤名 引用表中的[单元格](深化) =表{行 ...