三维模型重建(1):关于三维模型重建的一些简介

三维模型重建顾名思义就是从一些数据(点云,图片,三维轮廓线等)重建出物体的三维逼真的三维模型,在其重建的过程中针对不同的数据的的三维重建会有不同的处理算法,如针对点云数据的三维重建有很多种重建方法,如基于Delaunay三角化,Voronoi图,隐式曲面等方法,另外在三维模型的重建过程(MarchingCube,RayCast,网格构建等)以及三维模型生成后的后处理算法(三维网格简化,三维网格加密,三维模型表面光滑,三维模型的空洞修补等等)也是层出不穷,在这其中需要用到大量的三维图形学知识(从简单的画点画线算法到复杂的体绘制算法,以及光照计算,材质映射等)。在最后的实现方面致力于提高算法效率和运行性能,各种加快算法实现的三维数据结构(KD树,八叉树等)的提出和实现,以及压榨计算机和服务器性能的并行算法(OpenMP,MPI)等,减少算法实现过程中的内存占用以及运行时间(降低空间复杂度以及时间复杂度)。三维模型重建上的优秀算法或者是优秀实例我也只是管中窥豹,上面所提到的有些名词我也是大致了解,我尽自己最大的能力介绍下自己闲暇时间以前做过的相关三维模型重建的实例和其他相关的关于三维重建方面的知识,毕竟能力有限,知识面还有待拓展。

1.编程语言

是用的编程语言是C/C++,基本上相关的图形学方面的实现都是使用C/C++作为开发语言,不是说别的语言如Java,Python等语言不好,确实在效率方面以及内存处理方面C/C++有着比较大的优势,而且现在市面上的三维图形库其底层语言就是C/C++,所以使用起来更加方便。一门语言有其适用的场景和场合,正如Java在WEB和APP上面的天然优势一样,C/C++在图形处理,图像识别以及其他的图形处理领域也有着很大的优势。

2.我所使用的第三方库

(1)三维图形库OpenGL

OpenGL(Open Graphics Library),OpenGL图形绘制库,有着优秀的二维和三维图形API,是一个功能强大的三维图形绘制的底层库,有着大量的调节三维模型视觉效果的函数,例如光照,模型材质,纹理等等。早期OpenGL包GLUT依然比较强劲,但是其不能用于64位平台的编译,而且GLUT官方已经不维护了,那么有一个新的FreeGlut横空出世,支持最新的OpenGL绘图标准,并且支持64位平台的编译,能够完全取代老化的GLUT库。


(2)三维图形库VTK

VTK(Visualization Tool Kit)同样也是一个优秀的三维图形库,近年来相当的火爆,它以OpenGL作为底层绘制语言进行封装,用户不需要考虑太多的光照以及材质影响到模型可视化效果的设置,这些VTK都已经帮你做好了,你需要考虑的是如何从原始数据绘制出你的图形。其内部封装了大量的三维图形处理函数,基本上你所能想到的算法都能找到影子,比如著名的面绘制方法MarchingCube,体绘制方法Raycast等等,往往你能在阅读他的帮助文档的时候看到一个意想不到的功能。


(3)计算机视觉库OpenCV

OpenCV(Open Source Computer Vision Library)今年来大热的计算机视觉库,同样以C/C++作为底层语言,封装了大量的图形处理和计算机视觉领域的算法,比如说图像识别领域,机器人,人类视觉仿真,好像现在大热的人工智能领域也开始使用OpenCV进行视觉领域方面的处理。


(4)矩阵运算库Eigen

在三维图形处理过程中通常需要大量的矩阵运算,而Eigen是一个轻量级的矩阵运算库,其函数API涵盖了几乎所有的矩阵运算,但是它的使用只需要包含一个头文件,不需要过于复杂的配置就可以使用已经封装好的各种矩阵运算函数。


(5)并行计算库OpenMP

OpenMP可以在你把项目代码构建好之后也仍然可以通过几行代码将你的程序自动的进行并行化计算,使用起来非常的简单,并行计算可以大幅度的提高你的程序的运行速度以及计算的效率。如果你的IDE是VS,那么你只需要简单的开启OpenMP就可以了,然后在VS中包含其头文件就可以使用OpenMP封装的函数进行并行程序设计。


其他的如CGAL(几何算法库),QT(图形界面库,不过本人更喜欢用老掉牙的MFC)等等。


3.我所接触到的三维重建类型

(1)点云三维重建(隐式曲面重建)

原始三维点云(三维点云以及法向量)-斯坦福兔子1889个点,采用OpenGL从底层写的径向基隐式曲面点云重建方法

三维模型重建(1):关于三维模型重建的一些简介_第1张图片

采用径向基隐式曲面重建后的三维模型

三维模型重建(1):关于三维模型重建的一些简介_第2张图片

2医学序列图片三维重建(使用VTK进行医学图片处理,模型构建采用MarchingCube算法)

重建结果

三维模型重建(1):关于三维模型重建的一些简介_第3张图片

(3)OpenCV双目视觉重建(医学冠脉三维重建,VTK做可视化)

左视图A

三维模型重建(1):关于三维模型重建的一些简介_第4张图片

右视图B

三维模型重建(1):关于三维模型重建的一些简介_第5张图片

使用OpenCV做的三维冠脉重建,VTK做的显示

三维模型重建(1):关于三维模型重建的一些简介_第6张图片

4基于轮廓线的三维模型重建

轮廓线

三维模型重建(1):关于三维模型重建的一些简介_第7张图片

重建的三维模型

三维模型重建(1):关于三维模型重建的一些简介_第8张图片


4.结语

万事开头难,作为一个刚刚入门三维重建领域的人写这篇文章心中的感觉简直是战战兢兢,三维模型重建方面的知识浩如沧海,我只不过是只窥得了寥寥数星。只不过自己想把自己学习到的一些知识与有缘人交流分享,共同进步。不知以后还不会不在三维领域工作与发展,不过之后的事情谁又知道呢。

后面我会详细介绍一些三维重建算法以及一些实例。



你可能感兴趣的:(OpenGL,VTK,C++,计算机图形图像,OpenCV,三维模型重建,三维图形处理算法)