网格简化之顶点聚类算法 学习笔记

本博客内容来源于网络以及其他书籍,结合自己学习的心得进行重编辑,因为看了很多文章不便一一标注引用,如图片文字等侵权,请告知删除。

传统2D计算机视觉学习笔记目录------->传送门
传统3D计算机视觉学习笔记目录------->传送门

前言

马上就要国庆节了,热祝中华人民共和国成立七十周年,祝祖国繁荣富强,当然还有一个高兴的事情就是,要放假了O(∩_∩)O~

网格简化之顶点聚类算法 学习笔记_第1张图片

刚刚准备写网格简化近似方法的时候,笔记里面就列了要写顶点聚类算法,由于比较简单吧,也一直没有写,为了庆祝我国生日,还是来写一下子吧。

顶点聚类算法思路

网格简化的目的就是减少面片的数目,或者说减少顶点的数目。顶点聚类的算法的思路就是类似于我们在点云中的体素降采样,我们将网格分成很多小格子,我们称之为体素,每个体素里面都有若干顶点或没有,将含有顶点的体素里面的顶点 合并为一个顶点。 将体素相连的顶点重新连接成三角面片,形成新的网格。
网格简化之顶点聚类算法 学习笔记_第2张图片

但是从上图看,明天网格的连接结构发生了很大的变化,两个不相连的边被连在了一起,改变了拓补结构。在下一节我们来看看顶点聚类怎么来处理这个问题。

嗯…………,基本的处理方式就是这么简单,好像说完了,我要是理解错了别打我,~~~~ (>_<) ~~~~

顶点聚类算法具体过程

在上面我们简单的描述了顶点聚类的基本原理,但是也表明了其中的问题。下面我们来讲解一下常用的基于顶点聚类的算法。

基于八叉树的顶点聚类网格简化算法,使用八叉树的主要优势可以对原模型包围盒进行自适应划分,即对体素的大小进行自适应的划分,同时利用二次误差度量控制简化模型的变形,类似与QEM误差度量。

网格简化之顶点聚类算法 学习笔记_第3张图片

我们来描述一下算法的流程:

  1. 根据模型构建八叉树,保证在每个八叉树体素内顶点和边所构成的图是连通的,如果又不连通则继续拆分八叉树体素。
  2. 计算每个顶点的Q值(我们在QEM中有描述Q是什么)
  3. 计算出每个体素点合并后,其新点到之前的面的误差的最小值,以及新点的位置
  4. 将所有的体素按照误差权值放到一个最小堆里
  5. 每次合并度量(cost)最小的体素,并且更新连着该体素的所有有效体素的代价
  6. 如果没有达到阈值则重复5,否则退出

算法的流程基本上和QEM一样,不过qem是针对边,而顶点聚类的话是针对八叉树内的一个体素。

效果展示【代码】

vcg的代码太繁杂了,也比较长,如果有需要的可以联系我微信。
原理网格边长2cm 体素大小5cm
网格简化之顶点聚类算法 学习笔记_第4张图片
网格简化之顶点聚类算法 学习笔记_第5张图片
体素大小10cm 体素大小20cm
网格简化之顶点聚类算法 学习笔记_第6张图片
网格简化之顶点聚类算法 学习笔记_第7张图片

总结

在刚开始看顶点聚类算法的时候,貌似好像跟QEM没有什么联系,两种不同的方案。但是最后我们看到,我们使用顶点聚类的基础,采用QEM的策略来优化简化方法,也能使方法有着更优秀的提高。其实学习算法最重要的是发现分析处理事情的思路,让其方法更接近最优解。而且处理不同事情的算法,没有任何联系,但是其解决问题的策略可能能使用很多的事情。所以大家一起努力吧,先从简单的算法开始,慢慢的来,由简入繁,深入浅出,简单的东西往往包含更正确的原理。

网格简化之顶点聚类算法 学习笔记_第8张图片

重要的事情说三遍:

如果您看到我的文章对您有所帮助,那就点个赞呗 ( * ^ __ ^ * )

如果您看到我的文章对您有所帮助,那就点个赞呗( * ^ __ ^ * )

如果您看到我的文章对您有所帮助,那就点个赞呗( * ^ __ ^ * )

传统2D计算机视觉学习笔记目录------->传送门
传统3D计算机视觉学习笔记目录------->传送门

任何人或团体、机构全部转载或者部分转载、摘录,请保留本博客链接或标注来源。博客地址:开飞机的乔巴

作者简介:开飞机的乔巴(WeChat:zhangzheng-thu),现主要从事机器人抓取视觉系统以及三维重建等3D视觉相关方面,另外对slam以及深度学习技术也颇感兴趣,欢迎加我微信或留言交流相关工作。

你可能感兴趣的:(网格简化之顶点聚类算法 学习笔记)