谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法。该方法首先构建一个相似矩阵用于记录网格上相邻面片之间的差异性,然后计算相似矩阵的前k个特征向量,这些特征向量将网格面片映射到k维谱空间的单位球上,最后使用K-means方法对谱空间中的数据点进行聚类。具体算法过程如下:

一.相似矩阵

  网格分割以面片为基本单元,为了能使算法沿着几何模型的凹形区域进行分割,网格相邻面片之间的距离采用[Katz et al. 2003]中提到的方法,距离由测地距离Geod_Dist和角度距离Ang_Dist两部分组成,具体形式如下:

  上式中有两个重要的参数δη,参数δ通常取值范围为[0.01, 0.05],其用于控制测地距离和角度距离之间的权重比例,参数η通常取值范围为[0.1, 0.2],其使得分割边界更倾向于凹形区域。

  计算完相邻面片之间的距离后,相似矩阵中对应位置的值由距离的高斯函数得到:

其中:

二.网格谱聚类

  谱聚类方法在本质上都是类似的,都是利用相似矩阵的特征向量将原始空间中的数据映射到谱空间,并在谱空间中进行聚类。网格上的谱聚类方法如下:

  1 由上述定义计算相似矩阵W

  2 计算归一化矩阵NN = D-1/2WD-1/2

  3 计算矩阵N的前k个最大特征向量e1, e2, … , ek,以这k个特征向量为列组成矩阵U = [e1, e2, … , ek];

  4 将矩阵U的每一行单位化后得到矩阵Ȗ

  5 提取出k个初始聚类中心用于K-means聚类,该过程先计算矩阵Q = ȖȖT,然后查找矩阵Q中的最小元素Qrs,那么rs点就是两个距离最远的点,然后继续查找后续点;

  6 以Ȗ的行向量为数据样本进行K-means聚类。

图:分割区域分别为k = 2, 3, 4, 5, 6, 7, 8

参考文献:

[1] Rong Liu and Hao Zhang. 2004. Segmentation of 3D Meshes through Spectral Clustering. In Proceedings of the Computer Graphics and Applications, 12th Pacific Conference (PG '04). IEEE Computer Society, Washington, DC, USA, 298-305.

[2] Sagi Katz and Ayellet Tal. 2003. Hierarchical mesh decomposition using fuzzy clustering and cuts. ACM Trans. Graph. 22, 3 (July 2003), 954-961.

附录

谱聚类(Spectral Clustering)算法

1 Laplacian矩阵

  给定顶点集V = {v1, v2, … , vn},顶点vivj之间存在非负权重wij ≥ 0。G = (V, E)代表无向图,其满足wij = wji,如果wij = 0,则说明图中vivj之间无连接。顶点viV的度定义:,图的度矩阵D为对角矩阵,其对角线上的元素为d1, d2, … , dn

  非归一化的Laplacian矩阵定义:L = DW,其具备如下性质:

  ★ 对于任意向量f ∈ Rn,都有:

  ★ 矩阵L为对称半正定矩阵

  ★ 矩阵L最小的特征值为0,对应的特征向量为1

  ★ 矩阵L存在n个非负实特征值0 = λ1 ≤ λ2 ≤ … ≤ λn

  归一化的Laplacian矩阵有2种形式,具体定义如下:

Lsym = D-1/2LD-1/2 = ID-1/2WD-1/2

Lrw = D-1L = I – D-1W

  归一化的Laplacian矩阵具备如下性质:

  ★ 对于任意向量f ∈ Rn,都有:

  ★ 矩阵Lrw存在特征值λ和特征向量u时,矩阵Lsym对应存在特征值λ和特征向量D1/2u

  ★ 矩阵Lrw特征值λ和特征向量u的求解等价于广义特征值问题Lu = λDu

  ★ 矩阵Lrw最小的特征值为0,对应的特征向量为1;矩阵Lsym最小的特征值为0,对应的特征向量为D1/21

  ★ 矩阵Lsym和矩阵Lrw为半正定矩阵,并且存在n个非负实特征值0 = λ1 ≤ λ2 ≤ … ≤ λn

2 谱聚类之图割解释

  下面将介绍谱聚类的具体原理,聚类的目标是将数据点分成若干类,使得在同一个类里的数据点之间存在较大的相似性,而在不同类里的数据点之间差异较大。假设给定邻接权重矩阵为W的相似图,构建图分割最简单直接的方法就是转化为最小割问题。对于k个分割区域而言,那么分割区域A1, A2, … , Ak的求解即对应如下最小化问题:

式中Ā代表A的补集,即分割区域A以外的部分。

  实际上利用上述方法求解得到的结果往往并不理想,例如假设分割区域数目为2时,上述最小割的结果很有可能会出现从图中单独分割一个数据点作为一个区域的情况,如下图所示。一种避免出现该问题的方法是对分割区域A1, A2, … , Ak的大小做限制,如何限定分割区域大小,有两种最常用的方法:Ratio Cut和Normalized Cut。

  在Ratio Cut方法里,区域大小由区域中数据点的个数|A|决定,而在Ncut中,区域大小由区域中数据点的权重vol(A)决定,有了区域大小限定之后上述图分割问题可以进一步修改为如下形式:

  上述目标函数表明分割区域不能太小,但是当加入区域大小限定条件之后,上述问题的求解变成了NP-hard问题,而谱聚类算法利用松弛思想可以近似求解该问题。

2.1 Ratio Cutk = 2

  对于2个分割区域而言,我们的优化目标如下:

  为了求解上述问题,我们首先定义一个指示向量(indicator vector)f = (f1, f2, … , fn) ∈ Rn

  我们可以将Ratio Cut的目标函数写成Laplacian矩阵形式:

  同时可以得到:

  因此优化问题可以等价为:

  指示向量f中元素只能取2个特定的离散值,该问题仍然是NP-hard问题。如果将f中的元素取值范围松弛扩大到整个实数域R,那么根据Rayleigh-Ritz定理,该问题的最优解就是矩阵L第二小特征值所对应的特征向量(注意矩阵L最小的特征值为0,对应的特征向量为1),然后我们再将最优解进一步转化为离散特征向量,这一过程通常使用k-means聚类方法将指示向量中的元素聚为2类,使得每一类中的元素对应一个离散值。

2.2 Ratio Cut(任意k

  对于k个分割区域而言,求解过程与上述类似,我们定义k个指示向量hj = (h1,j, h2,j, … , hn,j)

i = 1, … , nj = 1, … , k

  以这k个指示向量为列可以组成矩阵H∈ Rn×k,其满足H’H = I,并且可以得到:

  于是:

  因此优化问题等价为:

  利用松弛思想并根据Rayleigh-Ritz定理,在实数域内,上述问题的最优解H为矩阵Lk个特征向量为列向量所组成的矩阵,然后我们再将实数域解转化为离散域解,同样这一过程以矩阵H的行向量作为数据样本进行k-means聚类。

  对于Ratio Cut方法,总结得到如下算法流程:

2.3 Ncutk = 2

  对于2个分割区域,定义指示向量f

  那么可以得到:

  因此优化问题等价为:

  将向量f里的元素松弛到实数域,并用f = D-1/2g替换后可以得到:

  由于D-1/2LD-1/2 = LsymD1/21是矩阵Lsym的最小特征向量,vol(V)是一个常量,所以根据Rayleigh-Ritz定理,实数域内最优解g为矩阵Lsym第二小特征值所对应的特征向量,替换后得到最优解f = D-1/2g。而根据归一化Laplacian矩阵的性质,最优解f同样等于矩阵Lrw第二小特征值所对应的特征向量。之后再利用k-means聚类方法将实数域内转化为离散域解。

2.4 Ncut(任意k

  对于k个分割区域,定义k个指示向量hj = (h1,j, h2,j, … , hn,j)

i = 1, … , nj = 1, … , k

  以这k个指示向量为列组成矩阵H∈ Rn×k,其满足:

H’H = Ihi’Dhi = 1,hi’Lhi = cut(Ai, Āi)/vol(Ai)

  因此优化问题等价为:

  用H = D-1/2T替换并将解空间松弛到实数域,问题转变为:

  利用Rayleigh-Ritz定理,实数域内最优解T为矩阵Lsymk个特征向量为列向量所组成的矩阵,替换后最优解H = D-1/2T。而根据归一化Laplacian矩阵的性质,最优解H同样等于矩阵Lrwk个特征向量为列向量所组成的矩阵。之后再利用k-means聚类方法将实数域内转化为离散域解。

  对于Ncut方法,总结得到如下算法流程:

本文为原创,转载请注明出处:http://www.cnblogs.com/shushen

参考:

Von Luxburg, Ulrike. "A tutorial on spectral clustering." Statistics and Computing 17.4 (2007): 395-416.

http://blog.pluskid.org/?p=287

基于谱聚类的三维网格分割算法(Spectral Clustering)的更多相关文章

  1. 基于均值漂移的三维网格分割算法(Mean Shift)

    mean shift算法是一种强大的无参数离散数据点的聚类方法,其在图像平滑.图像分割以及目标跟踪等方面都有着广泛的应用.[Yamauchi et al. 2005]基于mean shift算法提出了 ...

  2. 谱聚类算法(Spectral Clustering)

        谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的 ...

  3. [ZZ] 基于Matlab的标记分水岭分割算法

    基于Matlab的标记分水岭分割算法 http://blog.sina.com.cn/s/blog_725866260100rz7x.html 1 综述 Separating touching obj ...

  4. 基于模糊聚类和最小割的层次化三维网格分割算法(Hierarchical Mesh Decomposition)

    网格分割算法是三维几何处理算法中的重要算法,具有许多实际应用.[Katz et al. 2003]提出了一种新型的层次化网格分割算法,该算法能够将几何模型沿着凹形区域分割成不同的几何部分,并且可以避免 ...

  5. 谱聚类算法(Spectral Clustering)优化与扩展

    谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用.本文将讲述进一步扩展其应用场景:首先是User- ...

  6. 基于随机游走的三维网格分割算法(Random Walks)

    首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...

  7. 三维网格分割算法(Random Walks)

    首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...

  8. 基于Matlab的标记分水岭分割算法

    转自:http://blog.sina.com.cn/lyqmath 1 综述 Separating touching objects in an image is one of the more d ...

  9. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

随机推荐

  1. Spring+SpringMVC+MyBatis+easyUI整合优化篇(十一)数据层优化-druid监控及慢sql记录

    本文提要 前文也提到过druid不仅仅是一个连接池技术,因此在将整合druid到项目中后,这一篇文章将去介绍druid的其他特性和功能,作为一个辅助工具帮助提升项目的性能,本文的重点就是两个字:监控. ...

  2. Unity 检测物体是否在相机视野范围内

    需求: 类似NPC血条,当NPC处于摄像机视野内,血条绘制,且一直保持在NPC头顶. 开始: 网上查找资料,然后编写代码: public RectTransform rectBloodPos; voi ...

  3. Android Gradle 指定 Module 打包

    Android Gradle 指定 Module 打包 项目中有许多的可以直接独立运行的 Module ,如何在 Gradle 中将签名文件配置好了,那么就不需要普通的手动点击 Generate Si ...

  4. Mac IDEA插件——protobuf 插件

    最近在搞PB的版本的升级,历史的PB的版本是2.4,现在是打算升级到3.2,当面PB的版本肯定有很多变化了,就不再这里多说了,这里重点说一说,采用IDEA的插件方便执行PB的文件的JAVA编译,这样的 ...

  5. python基本数据类型——int

    一.int的范围 python2: 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1: 在64位系统上,整数的位数为64位,取值范围为-2**63-2**63-1: pyth ...

  6. iOS开发 - 适配Https的野路子

    大致写下适配Https时遇到的坑,做完服务器迁移一直通宵到现在,表示无力再多做详解,只放一些常见问题的解决方案吧 问题一.Https请求失败 1. NetManager初始化时可参考如下设置(因为我没 ...

  7. 数据仓库Hive数据导入导出

    Hive库数据导入导出 1.新建表data hive (ebank)> create table data(id int,name string) > ROW FORMAT DELIMIT ...

  8. C语言精要总结-内存地址对齐与struct大小判断篇

    在笔试时,经常会遇到结构体大小的问题,实际就是在考内存地址对齐.在实际开发中,如果一个结构体会在内存中高频地分配创建,那么掌握内存地址对齐规则,通过简单地自定义对齐方式,或者调整结构体成员的顺序,可以 ...

  9. mina.net 梳理

    LZ最近离职,闲着也是闲着,打算梳理下 公司做的是电商,CTO打算把2.0系统用java 语言开发,LZ目前不打算做java,所以 选择离职.离职前,在公司负责的最后一个项目 供应链系统. 系统分为 ...

  10. nginx与apache配合反向代理技术1

    序:最近在看Dimitri Aivaliotis的<Mastering Nginx>,刚好跆拳道课下班在路上看了反向代理服务器,准备在自己的博客VPS尝试一下 web代理服务器可以实现分布 ...