三维网格补洞算法(Radial Basis Function)
在逆向工程中,由于设备或模型的原因,我们获取得到的三维模型数据往往并不完整,从而使得生成的网格模型存在孔洞,这对后续的模型分析会造成影响。下面介绍一种基于径向基函数(RBF:Radial Basis Function)的三角网格补洞方法。
Step 1:检测孔洞边界
三角网格是由一系列顶点(V)以及由这些顶点所构成的三角面片(F)所组成,由三角面片可以得到网格的边(E)。通常一条边连接两个三角面片,这种边称为网格内部边,而如果某条边仅连接一个三角面片,那么称这条边为网格边界边,所有的边界边按顺序连接之后就形成了网格的孔洞。
Step 2:初始化网格
为了使孔洞填充简单、健壮,可以采用最小角度法进行网格修补,具体步骤如下:
(1)得到孔洞边界点信息,计算边界边长度的平均值l。
(2)计算每个边界点的两条相邻边的夹角大小。
(3)找出具有最小夹角的边界点,计算它的两个相邻边界点的距离s,判断s < 2×l是否成立:若成立,则按下图所示增加一个三角形,若不成立则增加两个三角形。
(4)更新边界点信息。
(5)判断孔洞是否修补完整,若未完整,转(2),否则结束。
Step 3:最小二乘网格
初始化补洞得到的网格质量不是很好,我们需要优化网格顶点的位置,优化的条件是:
其中di为顶点vi的1环邻域顶点数。
上式可以用一个线性方程组来描述:LV = 0,其中L是Laplace矩阵,具体形式为,矩阵L的秩等于n – k,n为网格顶点的数目,k为网格连通区域的个数,如果网格是全连通的,那么矩阵L的秩是n – 1。因此如果我们要使方程有解,需要加入m(m ≥ k)个控制顶点坐标vs作为方程的边界条件,在实际中我们将初始化网格的边界顶点作为控制顶点。
其实上述线性方程组的求解等价于如下能量函数最小化的求解:
能量函数的第一部分是使得网格顶点尽量光滑,即每个顶点位于其1环邻域顶点的中心,第二部分是为了控制顶点的位置满足要求。
最小二乘网格的优势是能够生成高质量的光滑网格,生成过程仅需要网格的拓扑连接关系和少数控制点的坐标信息。
Step 4:径向基函数(RBF)隐式曲面
径向基函数是一个仅依赖于离控制点c距离的函数,即h(x,c) = h(||x - c||),距离通常是欧式距离,也可以是其他形式距离。径向基函数网络是一个三层BP网络,其可以表示为多个基函数的线性组合:
下面列出2个最常用的基函数形式:
(1)Gaussian:h(r) = e-(εr)2
(2)Polyharmonic spline:h(r) = rk,k = 1、3、5、… 或h(r) = rkln(r),k = 2、4、6、…
利用径向基函数网络并通过给定控制点xi和对应的值fi之后,可以求解得到网络中的系数λi,因此径向基函数网络能够解决空间散乱数据点的平滑插值问题,函数的零等值面就是我们要求的曲面。
在实际求解时函数f(x)表达式中通常会增加一个一次多项式P(x),如下:
,其中:
将控制点位置xi和值fi代入函数f(x)可以得到如下方程,求解之后即可确定隐式曲面f(x)。
控制点xi可分为三类:
(1)边界控制点:曲面通过的点,f(xi) = 0
(2)外部控制点:将边界控制点沿法向正方向移动一小段距离而得到的控制点,取f(xi) = -1
(3)内部控制点:将边界控制点沿法向负方向移动一小段距离而得到的控制点,取f(xi) = 1
计算时我们选择的基函数为h(r) = r3,其实此时隐式曲面函数满足Δ3f = 0,将基函数代入后得到隐式曲面的表达式如下:
function options = RBF_Create(x, y, type)
% x: input data; y: input data value
options = [];
options.nodes = x;
switch type
case 'linear'
options.phi = @rbfphi_linear;
case 'cubic'
options.phi = @rbfphi_cubic;
end [n, dim] = size(x);
A = zeros(n,n);
for i = :n
r = normrow(bsxfun(@minus, x(i,:), x));
temp = feval(options.phi, r);
A(i,:) = temp';
A(:,i) = temp;
end
% Polynomial part
P = [ones(n,) x];
A = [ A P
P' zeros(dim+1, dim+1)];
B = [y; zeros(dim+, )]; coeff = A\B;
options.coeff = coeff;
end % Radial Base Functions
function u = rbfphi_linear(r)
u = r;
end
function u = rbfphi_cubic(r)
u = r.*r.*r;
end
Step 5:牛顿插值
为了得到插值隐式曲面的网格,我们需要把最小二乘网格的顶点投射到隐式曲面上,这里我们采用牛顿迭代法:
最小二乘网格的顶点位置作为迭代初始条件,当||xk+1 – xk|| < ε时,迭代停止,ε为设定的误差。上式中梯度表达式如下:
效果:
本文为原创,转载请注明出处:http://www.cnblogs.com/shushen
参考文献:
[1] Olga Sorkine and Daniel Cohen-Or. 2004. Least-Squares Meshes. In Proceedings of the Shape Modeling International 2004 (SMI '04). IEEE Computer Society, Washington, DC, USA, 191-199.
[2] Greg Turk and James F. O'Brien. 1999. Shape transformation using variational implicit functions. In Proceedings of the 26th annual conference on Computer graphics and interactive techniques (SIGGRAPH '99). ACM Press/Addison-Wesley Publishing Co., New York, NY, USA, 335-342.
[3] 袁天然. 三角网格模型光顺简化和缝补技术的研究及应用[D]. 南京航空航天大学, 2007.
三维网格补洞算法(Radial Basis Function)的更多相关文章
- 三维网格补洞算法(Poisson Method)
下面介绍一种基于Poisson方程的三角网格补洞方法.该算法首先需要根据孔洞边界生成一个初始化补洞网格,然后通过法向估算和Poisson方程来修正补洞网格中三角面片的几何形状,使其能够适应并与周围的原 ...
- 三维网格补洞算法(Poisson Method)(转载)
转载:https://www.cnblogs.com/shushen/p/5864042.html 下面介绍一种基于Poisson方程的三角网格补洞方法.该算法首先需要根据孔洞边界生成一个初始化补洞网 ...
- 【Radial Basis Function Network】林轩田机器学习技法
这节课主要讲述了RBF这类的神经网络+Kmeans聚类算法,以及二者的结合使用. 首先回归的了Gaussian SVM这个模型: 其中的Gaussian kernel又叫做Radial Basis F ...
- Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks
Orthogonal Least Squares Learning Algorithm for Radial Basis Function Networks S. Chen, C. F. N. Cow ...
- 机器学习技法:14 Radial Basis Function Network
Roadmap RBF Network Hypothesis RBF Network Learning k-Means Algorithm k-Means and RBF Network in Act ...
- 机器学习技法笔记:14 Radial Basis Function Network
Roadmap RBF Network Hypothesis RBF Network Learning k-Means Algorithm k-Means and RBF Network in Act ...
- Coursera台大机器学习技法课程笔记14-Radial Basis Function Network
将Radial Basis Function与Network相结合.实际上衡量两个点的相似性:距离越近,值越大. 将神经元换为与距离有关的函数,就是RBF Network: 可以用kernel和RBF ...
- OpenCascade B-Spline Basis Function
OpenCascade B-Spline Basis Function eryar@163.com Abstract. B-splines are quite a bit more flexible ...
- [Machine Learning] 浅谈LR算法的Cost Function
了解LR的同学们都知道,LR采用了最小化交叉熵或者最大化似然估计函数来作为Cost Function,那有个很有意思的问题来了,为什么我们不用更加简单熟悉的最小化平方误差函数(MSE)呢? 我个人理解 ...
随机推荐
- webapi filter过滤器中获得请求的方法详情(方法名,Attributes)
public class GlobalActionFilter : ActionFilterAttribute { private string _requestId; public override ...
- php怎么获取input输入框中的值去数据库比较显示出来
前端: <!--商品查询--> <input type="text" name="bianhao" value="" ma ...
- 从零开始学 Java - Windows 下安装 Tomcat
谁都想分一杯羹 没有一个人是真正的无私到伟大的,我们试着说着做自己,与人为善,世界和平!殊不知,他们的真实目的当你知道后,你会被恶心到直摇头并下意识地迅速跑开,下辈子都不想见到他.不过,他没错,你也没 ...
- 基于 Eclipse 的 MapReduce 开发环境搭建
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起 ...
- Linux(CentOS 6.7)下配置Mono和Jexus并且部署ASP.NET MVC3、4、5和WebApi(跨平台)
1.开篇说明 a. 首先我在写这篇博客之前,已经在自己本地配置了mono和jexus并且成功部署了asp.net mvc项目,我也是依赖于在网上查找的各种资料来配置环境并且部署项目的,而其在网上也已有 ...
- 字体属性设置(一):谷歌浏览器12px以下字体的显示;方法和原理
前言: chrome 谷歌浏览器默认的字体大小为16px:可以通过设置font-size来设置字体大小但是当设置到12px以下的时候字体大小不再改变:对于想设置其他大小的字体就很头疼,本文参考网上的方 ...
- mysql环境搭建
最近决定学习数据库,在比较了各个数据库之后,选择从mysql入手,主要原因: 开源 成熟,通用 用户量多,社区完善 入门简单 下载安装 mysql的官网下载地址:http://dev.mysql.co ...
- arcgis for flex全国地图天气预报的具体实现过程解析
系统架构是B/S,开发语言是flex,开发工具是myeclise或者flashbuild,通过调用百度提供的在线天气预报web api接口的方式来实现. 采用地图是ArcGIS全国地图,开发接口为ar ...
- MyEclipse 2016 CI 4新增BootStrap模板
Live Preview with CodeLive 目前CodeLive还只有Live Preview这一个功能,在后续的版本中会陆续添加新功能. 新增Bootstrap模板 在模板面板中选择相应的 ...
- 玩转大麦盒子airplay
长城宽待送了大麦盒子,一直没怎么用,既然是安卓的系统,那估计可以安装很多的软件吧,今天演练了一下. 大麦盒子 规格和介绍 http://baike.so.com/doc/7487612.html 有G ...