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

22 篇文章 18 订阅
5 篇文章 2 订阅

三维模型重建顾名思义就是从一些数据(点云,图片,三维轮廓线等)重建出物体的三维逼真的三维模型,在其重建的过程中针对不同的数据的的三维重建会有不同的处理算法,如针对点云数据的三维重建有很多种重建方法,如基于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从底层写的径向基隐式曲面点云重建方法

 

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

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

重建结果

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

左视图A

右视图B

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

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

轮廓线

 

重建的三维模型

 

 

4.结语

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

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

如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。

 

 

 

 

 

 

  • 20
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 29
    评论
三维模型重建是将一组二维图像转化为具有逼真立体效果的三维模型的过程。Matlab是一种功能强大的编程语言和开发环境,提供了用于图像处理和计算机视觉的各种工具和函数。基于结构光扫描(SFM)算法的三维模型重建是一种常见的方法。 结构光扫描是一种利用投影器和相机进行三维测量的技术。它通过投影特定的光纹或光源模式到场景中,利用相机捕捉到的光纹或光源的变形信息来恢复场景中的三维结构。Matlab中的SFM算法可以通过分析相机的位置和姿态之间的关系来推断场景的三维结构。 在Matlab中实现基于SFM算法的三维模型重建,首先需要对输入图像进行预处理,包括去噪、图像校准和特征提取等。然后,根据图像特征的匹配和相机姿态的估计,可以计算三维点云的初始估计。 接下来,可以使用非线性优化方法对初始估计进行优化,以得到更准确的三维模型。在优化过程中,可以通过最小化重投影误差来提高三维点云的精度。最后,可以使用MeshLab等软件对三维点云进行三角化处理,生成光滑的三维模型。 Matlab提供了许多用于三维模型重建的工具和函数,如图像处理工具箱、计算机视觉工具箱和优化工具箱等。此外,Matlab还提供了丰富的文档和示例代码,帮助用户理解和实现基于SFM算法的三维模型重建。 总之,Matlab基于SFM算法的三维模型重建是一种有用的图像处理和计算机视觉技术,可以广泛应用于计算机图形学、虚拟现实、增强现实等领域。使用Matlab的强大功能和工具,可以实现高质量的三维模型重建,并为相关研究和应用提供支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值