基于两步法的网格去噪算法顾名思义包含两个步骤:首先对网格表面的法向进行滤波,得到调整后的网格法向信息,然后根据调整后的法向更新顶点坐标位置,下面介绍三篇该类型的文章。

  [Sun et al. 2007]文章首先介绍了当前法向滤波方法以及顶点坐标更新方法,然后提出自己的法向滤波方法和顶点坐标更新方法。

  法向滤波方法:

  1.均值滤波(mean filter):ni = normalize(ΣjN(i) Aj·nj / ΣjN(i) Aj),均值滤波会破坏网格的细节特征。

  2.中值滤波(median filter):ni = arg mediannj {wj⊙∠(ni, nj) : j∈N(i)},中值滤波能够保持网格的细节特征,但当网格噪声较大时,效果并不好。

  3.α-截尾滤波(alpha-trimming filter):ni = normalize(ΣjN(i) Iα(j) ·Aj·nj),∠(ni, nj)角度值前α比例和后α比例对应的Iα(j)为0,当α = 0时等同于均值滤波,当α = 0.5时等同于中值滤波。

  4.模糊矢量中值滤波(fuzzy vector median filter):先使用矢量中值滤波nm = arg minnjkN(i) d(nj, nk) : j∈N(i)},其中d(nj, nk)为nj和nk的Lp范数或∠(nj, nk)角度值,然后再使用高斯滤波ni = normalize(ΣjN(i) nj·exp(-d(nj, nm)2/2σ2))。模糊矢量中值滤波可以得到误差较小的法向,但会增加计算量。

  5.[Sun et al. 2007]文章法向滤波方法:ni = normalize(ΣjN(i) hj·nj),权重定义为,其中N(i)为三角片fi的邻域三角片集,有两种选择,见下图,f(x) = x2,0 ≤ T ≤ 1,T的取值决定了邻域三角片N(i)中有多少三角片法向会参与计算,当T = 1时,只有与ni相等的邻域三角片法向会参与计算,而当T = 0时,所有邻域三角片法向都会参与计算。当网格有明显棱边时,T可以取相对较小值,而当网格比较光滑时,T可以取相对较大值。

Ⅰ基于顶点(vertex based)的三角片邻域;Ⅱ表示基于边(edge based)的三角片邻域

  顶点坐标更新方法:

  1.求解线性方程组:

  2.梯度下降法:

其中Nv(i)为顶点i的1环邻域顶点集。

  3. [Sun et al. 2007]文章顶点更新方法:

其中Fv(i)为顶点i的1环邻域三角片集。

效果:

  [Zheng et al. 2011]文章提出了两种三角片法向更新方法,而其顶点坐标更新方法采用和[Sun et al. 2007]文章一样的方法。

  1.Local and Iterative Scheme:

  该方法采用对法向进行双边滤波:nit+1 = Ki·ΣjN(i) wij·njt,其中N(i)为三角片fi的邻域三角片集,Ki为归一化系数,wij = ξij·Wc·Ws,ξij为三角片fj的面积Si,空间域核Wc(||ci – cj||) = exp(-||ci – cj||2/2σc2),值域核Ws(||ni – nj||) = exp(-||ni – nj||2/2σs2)。

  2. Global and Non-Iterative Scheme:

  该方法通过求解线性方程组来最小化目标函数,相对于上面的显式更新顶点坐标方法,该方法是一种对应的隐式更新顶点坐标方法,目标函数如下:

其中Ai = Si/mean({S}),上式等同于求解线性方程组,但是方程不满秩,需要加入软约束条件:Ed = Σi Ai·||ni – ni||2。最后优化目标为:argmin(1 - λ) ·Es + λ·Ed,其中λ∈[0, 1],用于控制网格的光滑程度。

效果:

 

  [Zhang et al. 2015]文章提出了一种三角片法向更新方法,该方法与[Zheng et al. 2011]文章的方法一相似,不同的是[Zheng et al. 2011]文章采用原始法向作为双边滤波中的值域信息,而[Zhang et al. 2015]文章对原始法向进行引导滤波(guided filter)得到新的法向作为值域信息。而其顶点坐标更新方法同样采用和[Sun et al. 2007]文章一样的方法。

其中Ni为三角片fi的邻域三角片集,Wi为归一化系数,Aj为三角片fj的面积,空间域核Ks和值域核Kr都为高斯核函数。

  关键如何计算三角片fi的引导法向(guidance)gi,文章提出对于三角片fi,在其周围寻找一个包含三角片fi的区域,使该区域内的三角片法向变化最小,然后将这个区域里的所有三角片法向进行加权平均作为三角片fi的引导法向。具体来说,定义Pk为与三角片fi拥有共同顶点的三角片集{fk},那么三角片fi的候选区域(candidate patch)为C(fi) = {Pk∣fi∈Pk}。对于每个区域P∈C(fi),计算区域P内三角片法向的一致性(consistency):H(P) = Ф(P)·R(P),其中Ф(P)为区域P内三角片法向的最大偏差:Ф(P) = maxfj,fkP ||nj – nk||,R(P)为区域P内相邻三角片法向的相对变化程度:,式中φ(ej) = ||nj1 – nj2||。然后选取其中一致性函数H(P)最小的区域P*,并对其中的三角片法向作面积加权平均,即得到三角片fi的引导法向gi:gi = normalize(ΣfjP* Aj·nj)。

效果:

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

参考文献:

[1] Xianfang Sun; Rosin, P.L.; Martin, R.R.; Langbein, F.C., "Fast and Effective Feature-Preserving Mesh Denoising," Visualization and Computer Graphics, IEEE Transactions, vol.13, no.5, pp.925-938, Sept.-Oct. 2007.

[2] Youyi Zheng; Hongbo Fu; Au, O.K.-C.; Chiew-Lan Tai, "Bilateral Normal Filtering for Mesh Denoising," Visualization and Computer Graphics, IEEE Transactions, vol.17, no.10, pp.1521-1530, Oct. 2011.

[3] Wangyu Zhang, Bailin Deng, Juyong Zhang, Sofien Bouaziz, Ligang Liu, "Guided Mesh Normal Filtering," Computer Graphics Forum (Proc. Pacific Graphics), 34(7): 23–34, 2015.

三维网格去噪算法(two-step framework)的更多相关文章

  1. 三维网格去噪算法(L0 Minimization)

    [He et al. 2013]文章提出了一种基于L0范数最小化的三角网格去噪算法.该思想最初是由[Xu et al. 2011]提出并应用于图像平滑,假设c为图像像素的颜色向量,▽c为颜色向量的梯度 ...

  2. 三维网格去噪算法(bilateral filter)

    受图像双边滤波算法的启发,[Fleishman et al. 2003]和[Jones et al. 2003]分别提出了利用双边滤波算法对噪声网格进行光顺去噪的算法,两篇文章都被收录于当年的SIGG ...

  3. Vertex-Based Diffusion for 3-D Mesh Denoising(三维网格去噪中基于顶点的扩散算法)

    Abstract—We present a vertex-based diffusion for 3-D mesh denoising by solving a nonlinear discrete ...

  4. Atitit.java图片图像处理attilax总结  BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  5. 三维网格形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)

    在三维网格形变算法中,个人比较喜欢下面两个算法,算法的效果都比较不错, 不同的是文章[Lipman et al. 2005]算法对控制点平移不太敏感.下面分别介绍这两个算法: 文章[Lipman et ...

  6. 【算法随记六】一段Matlab版本的Total Variation(TV)去噪算法的C语言翻译。

    最近看到一篇文章讲IMAGE DECOMPOSITION,里面提到了将图像分为Texture layer和Structure layer,测试了很多方法,对于那些具有非常强烈纹理的图像,总觉得用TV去 ...

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

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

  8. 基于谱聚类的三维网格分割算法(Spectral Clustering)

    谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...

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

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

随机推荐

  1. 【经验之谈】前端面试知识点总结(CSS相关)——附答案

    目录 二.CSS部分 1.解释一下CSS的盒子模型? 2.请你说说CSS选择器的类型有哪些,并举几个例子说明其用法? 3.请你说说CSS有什么特殊性?(优先级.计算特殊值) 4.要动态改变层中内容可以 ...

  2. JS与一般处理程序之间传值乱码

    好久没用到,突然遇到此问题还用了点时间. 在JS里面通过URL向Handler传中文值的时候,在Handler里面取值出来后会发现是乱码的~~.这就需要个编码解码过程.(先记录自己遇到的一个方面的解决 ...

  3. NavigationBar隐藏后,返回时表现不完美

    是这样的,app首页头部可能要自定义,所以选择把NavigationBar隐藏,所以在viewWillAppear时这样写: self.navigationController?.setNavigat ...

  4. [ javascript canvas isPointInPath(x,y) 判断点是否在最后绘制的图形中 ] javascript canvas isPointInPath(x,y) 判断点是否在最后绘制的图形中方法演示 效果之三

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...

  5. 【转】扫盲 同步利器、分布式网盘--BT Sync

    原文地址:http://program-think.blogspot.com/2015/01/BitTorrent-Sync.html先向大伙儿宣布个好消息——经过多位热心读者的大力支持,经过几天的努 ...

  6. C语言一级指针与二级指针

    指针的概念 指针就是地址, 利用这个地址可以找到指定的数据 指针就是地址, 那么在使用的时候, 常常会简单的说 指针变量为指针 指针变量就是存储地址的变量 int *p1;// 申请了一个变量, 即在 ...

  7. DirectX HLSL相关基础

    DirectX HLSL相关 顶点着色器可用软件顶点运算方式来模拟,即在创建设备时,将设备行为标记设定为: D3DCREATE_SOFTWARE_VERTEXPROCESSING 在记事本中编写着色器 ...

  8. 【代码笔记】iOS-看图听故事

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFo ...

  9. IOS TextField伴随键盘移动

    这篇文章介绍的是一个简单而又实用的小方法. 我想对于登陆时的一些效果大家应该都不会陌生. 今天就介绍一下,当开始输入TextField文本时键盘弹出TextField伴随键盘移动的实现. 先看一下演示 ...

  10. Android开发拾遗(一)用Wi-Fi连接adb

    可以用Wi-Fi通过标准的TCP/IP连接来连接Android设备. 这在开发监听USB相关事件的应用程序时会特别有用,原因是USB连接会起到干扰作用,比如USB的连接/断开事件. 首先要像通常一样用 ...