基于均值漂移的三维网格分割算法(Mean Shift)
mean shift算法是一种强大的无参数离散数据点的聚类方法,其在图像平滑、图像分割以及目标跟踪等方面都有着广泛的应用。[Yamauchi et al. 2005]基于mean shift算法提出了一种网格分割方法,具体来说,给定一个三角网格,其面片重心和面片法向可以组成6维特征空间中的一系列离散点集,然后使用mean shift算法对其进行聚类,聚类后每个面片的法向可以修正为各自聚类中心的法向信息,最后基于面片修正法向进行网格分割。下面具体介绍该算法的过程。
给定一个由面片{Ti}所组成的三角网格M,其面片重心{ci}和面片法向{ni}组成R6空间中的离散点集χ = {(pi, qi) = (ci, ni)}。利用mean shift算法对其进行聚类之后,对每个聚类中心yi[c] = {(p, q)的法向部分归一化之后可以作为该类中三角面片的新法向。

修正后的面片法向有两个应用,一个是网格光顺,另一个是网格分割。对于网格分割应用,需要指定网格分割的区域数目。在初始化阶段,先随机选定各个区域的种子面片,然后迭代以下两个步骤直到收敛稳定。
1:区域增长
相邻三角面片Ti和Tj之间的距离定义为:
distance(Ti, Tj) = || Nmi – Nmj ||
其中Nm为利用mean shift算法得到的面片修正法向。
这样利用多源Dijkstra最短路算法可以为每个三角面片指定一个所属区域。
2:计算种子面片
区域增长完成后,需要重新计算每个区域的种子面片,新的种子面片为每个区域最中心的三角面片。因此该阶段相邻三角面片Ti和Tj之间的距离定义为:
distance(Ti, Tj) = || ci – cj ||
其中ci为三角面片Ti的重心。
这样每个区域可以找到一个距离边界最远的三角面片,即为新的种子面片。






图:(上左)原始网格 (上中)原始网格法向 (上右)mean shift聚类
(下左)网格修正法向 (下中)网格分割效果 (下右)网格光顺效果
参考文献:
[1] Hitoshi Yamauchi, Seungyong Lee, Yunjin Lee, Yutaka Ohtake, Alexander Belyaev, and Hans-Peter Seidel. 2005. Feature Sensitive Mesh Segmentation with Mean Shift. In Proceedings of the International Conference on Shape Modeling and Applications 2005 (SMI '05). IEEE Computer Society, Washington, DC, USA, 238--245.
附录
Mean-shift算法
利用某个概率密度函数f(x)采样得到一系列数据样本χ = (x1, x2, … , xn)∈Rd。假设我们需要估计这些样本的概率密度函数f(·),那么由核密度估计(kernel density estimation)方法可以近似得到其概率密度函数为:

其中K(x)称为核函数(kernel function),h为带宽(bandwidth)。核函数满足如下条件:
K(x) ≥ 0 并且 
一般核函数是满足径向对称(radially symmetric),即可以表示为:

其中k(x)称为分布函数(profile function),c为归一化参数。
于是概率密度函数可以转化成如下形式:

一般使用较多的核函数是Gaussian核函数和Epanechnikov核函数,其具体形式如下:
Gaussian核函数:


Epanechnikov核函数:

其中cd是d维单位球的体积。

假设将数据样本χ聚类成一系列簇,我们可以将聚类中心设定为概率密度函数的局部极值点,而寻找局部极值点的一个最简单方法就是梯度上升法。
对概率密度函数求导后得到:

其中g(x) = -k’(x),m(x)的形式如下:

上式中的m(x)就是所谓的mean shift向量,它的物理含义就是概率密度函数的梯度,也就是当前点的移动方向和大小。
利用mean shift算法进行聚类的过程分如下两步:
1. 对于每一个数据样本xi∈χ,初始化xi为yi[0];
2. 利用梯度上升方法计算yi[j]直到收敛,yi[j+1] = yi[j] + m(yi[j]),j = 0, 1, 2, …。
对于如下二维数据样本,利用核密度估计方法可以得到不同带宽下的概率密度函数分布,并且利用mean shift算法可以得到不同的聚类结果。

图:原始二维数据样本


图:bandwidth = 2和bandwidth = 0.8所对应的概率密度函数分布图


图:bandwidth = 2和bandwidth = 0.8所对应的mean shift聚类效果
上述mean shift算法有个简单的扩展,对于数据样本χ = {xi= (pi, qi): pi∈P, qi∈Q},每个样本由两部分内容组成,那么使用多元核密度估计(multivariate kernel density estimation)方法可以得到其概率密度函数为:

此时mean shift向量为:

参考:
http://blog.csdn.net/ttransposition/article/details/38514127
基于均值漂移的三维网格分割算法(Mean Shift)的更多相关文章
- 基于谱聚类的三维网格分割算法(Spectral Clustering)
谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...
- [ZZ] 基于Matlab的标记分水岭分割算法
基于Matlab的标记分水岭分割算法 http://blog.sina.com.cn/s/blog_725866260100rz7x.html 1 综述 Separating touching obj ...
- 基于随机游走的三维网格分割算法(Random Walks)
首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...
- 基于模糊聚类和最小割的层次化三维网格分割算法(Hierarchical Mesh Decomposition)
网格分割算法是三维几何处理算法中的重要算法,具有许多实际应用.[Katz et al. 2003]提出了一种新型的层次化网格分割算法,该算法能够将几何模型沿着凹形区域分割成不同的几何部分,并且可以避免 ...
- 三维网格分割算法(Random Walks)
首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...
- 基于Matlab的标记分水岭分割算法
转自:http://blog.sina.com.cn/lyqmath 1 综述 Separating touching objects in an image is one of the more d ...
- 笔记:基于DCNN的图像语义分割综述
写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...
- Meanshift均值漂移算法
通俗理解Meanshift均值漂移算法 Meanshift车手?? 漂移?? 秋名山??? 不,不,他是一组算法, 今天我就带大家来了解一下机器学习中的Meanshift均值漂移. Mea ...
- opencv2对读书笔记——使用均值漂移算法查找物体
一些小概念 1.反投影直方图的结果是一个概率映射,体现了已知图像内容出如今图像中特定位置的概率. 2.概率映射能够找到最初的位置,从最初的位置開始而且迭代移动,便能够找到精确的位置,这就是均值漂移算法 ...
随机推荐
- spring 定时任务 taskScheduler详解
spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态.也可以使用cron表达式设置定时任务. 被执行的类要实现Runnable接口 TaskSche ...
- GCD 多线程 ---的记录 iOS
先写一个GCD static UserInfoVoModel *userInfoShare = nil; +(instancetype)shareUserInfoVoModel { static di ...
- Java(多态练习 instanceof)
/* 题目: (多态,instanceof)有如下代码 class Animal { private String name; // 1 } class Dog extends Animal { // ...
- java初级开发程序员(第三单元)
1.if基本选择结构: 语法: if(条件){ //程序执行时,先判断条件.当结果为true(真)时,程序先执行大括号的代码块,再执行if结构(即{}部分)后面的代码.当结果为false(假) ...
- centos 把网卡名称修改为 eth0
默认网卡名称是 eno16777736 1.修改配置文件 ifcfg-eno16777736 [root@localhost ~]# cd /etc/sysconfig/network-scripts ...
- Ajax跨域实现淘宝/百度搜索下拉提示效果
最近学到Ajax,觉得自己对与前后端的数据交互有了一个基本的了解.下面是Ajax应用到淘宝/百度的搜索功能的一个简单的小实例,就是输入一个词,下拉框中自动显示匹配的内容:
- iOS 用Swipe手势和动画实现循环播放图片
主要想法 添加3个ImageView展示图片,实现图片的无限循环. 使用Swipe手势识别用户向右或向左滑动图片. 使用CATransition给ImageView.layer添加动画,展示图片更换的 ...
- hibernate系列笔记(3)---持久化对象
持久化对象 再讲持久化对象之前,我们先来理解有关session中get方法与 load方法区别: 简单总结: (1)如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库 ...
- List实现行转列的通用方案
最近在做报表统计方面的需求,涉及到行转列报表.根据以往经验使用SQL可以比较容易完成,这次决定挑战一下直接通过代码方式完成行转列.期间遇到几个问题和用到的新知识这里整理记录一下. 阅读目录 问题介绍 ...
- Mr.聂 带你成为web开发大牛——入门篇(上)
作为一名IT届的后生,当初也经历过懵懂无知的实习期,对那种无力感深有体会.在这,希望能用我这几年的开发经验,让各位即将踏入或者刚刚踏入web开发领域的新人们少走些弯路.鉴于这是入门篇,下面我就从零为大 ...