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

  该问题可以描述为如下数学形式:

P(0) = 0

P(N) = 1

P(x) = 1/2*P(x - 1) + 1/2*P(x + 1) for x = 1, 2, 3, … , N-1

  如果用矩阵形式描述,即:

那么通过求解该线性方程组就可以得到各个点到达目的地N点的概率,以上就是一维随机游走算法原理。

[Grady et al. 2006]提出了利用随机游走思想来分割二维图像,文章将图像考虑成一张图(Graph),每个像素对应图中一个节点,根据亮度差值定义节点间的权重(相当于一维随机游走中向左和向右的概率),然后用户指定前景(foreground)和背景(background)标签(相当于一维随机游走中N点和0点),通过求解线性方程组就可以得到各个像素点属于前景或背景的概率,如果将阈值概率设置为0.5,那么就可以分割得到期望的图像区域。

[Lai et al. 2008]将这种思想扩展到三维网格分割,文章将网格中每个三角片对应图中一个节点,利用相邻三角片之间的二面角来定义节点之间的权重,具体如下:

对于三角片fi,定义一个fi与相邻三角片fi,k(k = 1, 2, 3)之间几何差异的函数d(fi, fi,k):

d(fi, fi,k) = η·[1 – cos(dihedral(fi, fi,k))] = η/2·||Ni – Ni,k||2

其中:dihedral(fi, fi,k)代表相邻三角片fi与fi,k之间的二面角,Ni为三角片fi的法向,对于凹边η设置为1.0,对于凸边η设置为0.2。

  将d归一化:

  节点之间的权重pi,k可以根据函数d(fi, fi,k)给定:

  同样通过求解线性方程组可以得到网格分割效果。

  [Zhang et al. 2010]对[Lai et al. 2008]的网格分割算法做了部分改进,文章将网格中每个顶点对应图中一个节点,由于一个网格的三角片数量通常是顶点数量的2倍左右,这样求解的方程变量数就会减少一半左右,计算速度就会得到提高。

效果:

 

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

参考文献:

[1] Grady, L., "Random Walks for Image Segmentation," in Pattern Analysis and Machine Intelligence, IEEE Transactions on , vol.28, no.11, pp.1768-1783, Nov. 2006

[2] Yu-Kun Lai, Shi-Min Hu, Ralph R. Martin, and Paul L. Rosin. 2008. Fast mesh segmentation using random walks. In Proceedings of the 2008 ACM symposium on Solid and physical modeling (SPM '08). ACM, New York, NY, USA, 183-191.

[3] Zhang, J., Wu, C., Cai, J., Zheng, J. and Tai, X.-c. (2010), Mesh Snapping: Robust Interactive Mesh Cutting Using Fast Geodesic Curvature Flow. Computer Graphics Forum, 29: 517–526.

基于随机游走的三维网格分割算法(Random Walks)的更多相关文章

  1. 推荐系统之基于图的推荐:基于随机游走的PersonalRank算法

    转自http://blog.csdn.net/sinat_33741547/article/details/53002524 一 基本概念 基于图的模型是推荐系统中相当重要的一种方法,以下内容的基本思 ...

  2. 图推荐-基于随机游走的personrank算法

    转自http://blog.csdn.net/sinat_33741547/article/details/53002524 一 基本概念 基于图的模型是推荐系统中相当重要的一种方法,以下内容的基本思 ...

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

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

  4. 介绍一个全局最优化的方法:随机游走算法(Random Walk)

    1. 关于全局最优化求解   全局最优化是一个非常复杂的问题,目前还没有一个通用的办法可以对任意复杂函数求解全局最优值.上一篇文章讲解了一个求解局部极小值的方法--梯度下降法.这种方法对于求解精度不高 ...

  5. 重启随机游走算法(RWR:Random Walk with Restart)

    1 pagerank算法的基本原理 Pagerank算法是Google的网页排名算法,由拉里佩奇发明.其基本思想是民主表决.在互联网上,如果一个网页被很多其他网页所链接,说明它受到普遍的承认和信赖,那 ...

  6. 【Matlab】随机游走产生图像效果

    随机游走类似布朗运动,就是随机的向各个方向走吧.产生的图像实在漂亮,所以还是贴出分享. clear all; close all; clc; n=100000; x= 0; y= 0; pixel=z ...

  7. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  8. LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)

    写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...

  9. 【LOJ2542】【PKUWC 2018】随机游走 min-max容斥 树上高斯消元

    题目描述 有一棵 \(n\) 个点的树.你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一 ...

随机推荐

  1. Android - ScrollView 使用小计 里面嵌套的View 如何设置全屏

    设置ScrollView的属性android:fillViewport="true" 即可 <?xml version="1.0" encoding=&q ...

  2. 解决Windows10下安装Ubuntu16.04双系统后开机没有Ubuntu引导

    转载 https://blog.csdn.net/qq_27838307/article/details/79149791 1.按照网上教程在磁盘中压缩硬盘并且不需要给他新建卷标,就让他显示空闲就好了 ...

  3. 初学者的linux - 基本知识篇

    1.Linux系统结构 Linux是一套免费使用和自由传播的类Unix操作系统,它是一种倒树结构. “/”就是系统的顶级目录,称作根目录,“/bin,/root,/home,/etc.."这 ...

  4. Android利用Handler异步获取子线程中的产生的值

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     近段时间有一个需求:在线获取图片并且显示在界面 ...

  5. 基础算法和数据结构高频题 II

    DFS的两种理解方式:1. 按照实际执行顺序模拟 (适合枚举型DFS,下节课内容)2. 按照DFS的定义宏观理解 (适合分治型DFS,本节课内容) 1 Convert BST to Greater T ...

  6. Win10系统下安装labelme,json文件批量转化

    一.安装环境:windows10,anaconda3,python3.6         由于框架maskrcnn需要json数据集,在没安装labelme环境和跑深度学习之前,我安装的是anacon ...

  7. [系列] Go gRPC Hello World

    目录 概述 四类服务方法 安装 写个 Hello World 服务 推荐阅读 概述 开始 gRPC 了,这篇文章学习使用 gRPC,输出一个 Hello World. 用 Go 实现 gRPC 的服务 ...

  8. 第四章-使用本机文件对话框和帮助进程间沟通 | Electron实战

    本章主要内容: 使用Electron的dialog模块实现一个本机打开文件对话框 促进主进程和渲染器进程之间的通信 将功能从主进程暴露给渲染器进程 使用Electron的remote模块从主进程导入功 ...

  9. Could not load NIB in bundle: 'NSBundle.....

    学习NSNotification时遇到了这个问题,错误日志如下: 2015-08-28 17:47:24.617 NSNotificationDemo[7158:786614] *** Termina ...

  10. 微信小程序中悬浮窗功能的实现(主要探讨和解决在原生组件上的拖动)

    问题场景 所谓悬浮窗就是图中微信图标的按钮,采用fixed定位,可拖动和点击. 这算是一个比较常见的实现场景了. 为什么要用cover-view做悬浮窗?原生组件出来背锅了~ 最初我做悬浮窗用的不是c ...