李世虎,王明泉,陈培兴
(1.中北大学动态测试技术重点实验室,山西 太原 030051;2.中北大学信息与通信工程学院,山西 太原 030051)
基于VTK的三维可视化软件设计*
李世虎1,2,王明泉1,2,陈培兴1,2
(1.中北大学动态测试技术重点实验室,山西 太原 030051;2.中北大学信息与通信工程学院,山西 太原 030051)
摘要:三维可视化有利于直观观察物体内部细节,是当前研究的热点问题。论文对VTK及三维可视化算法进行分析介绍,以VTK提供的光线合成可视化算法作为接口,结合MFC设计实现了三维可视化软件设计与开发。
关键词:VTK;三维可视化;MFC
工业CT重建在无损探伤检测领域有重要作用,而三维可视化能够直观重现物体复杂的内部结构,作为其中的关键环节有着十分重要的地位[1]。本文对比体绘制与面绘制方法进行比较,对VTK成像流程做了分析,再对重建数据做预处理,最后选用体绘制方法,使用VTK结合MFC实现可视化软件开发,为物体缺陷检测提供了直观依据[2]。
1三维可视化方法与VTK
1.1三维可视化方法
三维可视化方法主要包括体绘制和面绘制[3]。面绘制是以移动立方体算法(Marching Cubes算法)为代表的绘制方法。它主要是通过提取图像中等值面构造三角面片等来刻画物体轮廓信息进行三维绘制,适用于表面特征明显的物体。面绘制中,只处理体数据场中的部分数据,因此运算量小、速度快。但也造成了图像信息的丢失, 可视化数据不完整,无法展示出物体的内部具体特征信息。
体绘制是以光线透射算法(Ray Casting算法)为代表的绘制方法[4]。它是对体数据场中每一个体素进行处理,运算量较大,绘制速度也相对面绘制慢。体绘制得到的可视化结果能够显示物体内部构造信息和细节,绘制结果也相对更加精确。这里因为需要物体内部细节,选择体绘制算法作为可视化方法。
1.2VTK
VTK(Visualization Toolkit)是由美国 Kitware公司使用C++开发的一套集3D图形学和可视化等于一体的C++通用可视化类库。它的代码是源码的,可在C++、Tcl/Tk、Jave、Pyhon语言环境下配合使用[5]。VTK主要包括两种对象模型:图形模型对象和可视化模型对象[6]。图形模型主要是用图形描述几何体构成的场景;而可视化模型主要把几何数据转换成图形数据及构建几何体。VTK采用流水线机制,并且支持数据并行处理[7,8]。如图1所示,数据由数据源输入,经过滤波处理(这里可以使多次滤波处理)后,经过场景渲染到窗口中:
图1 VTK管道流水线
2图像预处理
这里选取CT扫描固体燃料电磁后,经过FDK重建得到的0~730共731幅切片数据作为可视化数据源进行可视化,该数据由国家重大仪器专项提供。这里每幅切片大小为8 033 KB(大小为:1 434*1 434,类型为:float型),总共为5.59 GB的数据量。对于一个32位的系统而言,Windows对于每个进程提供4 GB虚拟空间,除去代码段等,可用空间不足2 GB,显然,直接加载5.59 GB数据进行可视化是不可取的。对于这个问题,众多学者为此进行了研究,一种有效的方法是八叉树算法。
事实上,多次对选取单层重建切片研究发现,图片中有大量无效信息,如图2所示。图中,除去燃料电池外为无用信息。这里对所有切片进行旋转变换截取,剔除图像中无用信息,所得如图3所示。
图2 第358副图像 图3 数据截取后部分图像
经过以上数据截取后,得到图像总大小为:816 MB(单副切片大小为:425*690,数据类型为:float型),这样以来,数据量得到了有效压缩。
对三维数据的可视化,数据量的减小将能带来更快的可视化速度,甚至达到实时的要求。经过研究发现,国内LED液晶灰度多为8位,国际上为10位,12位已经可以做充足的数据变化[9]。显然,32位float型携带的许多信息超出液晶屏所能表达的范围,这里对其进行多次尝试后,发现即使将浮点型数据映射到unsigned char的字符型数据,在显示器上依然难以分辨,图4,图5为选取的两幅float型压缩到unsigned char型数据前后对比。
图4 浮点型数据图像
图5 字浮型数据图像 图6 最终压缩图像
最终得到如图6所示压缩图像,总图像大小为204 MB,这极大地压缩了可视化源数据,当然受限于实验中所用的LED屏,若选用更高级别灰度等级,可以将图像映射到unsigned short型,这样一来,数据量为408 MB,对于使用VTK来可视化,仍然满足要求。
3软件设计
这里使用VTK与MFC结合基于单文档多视图进行三维可视化软件设计。本软件共设计四个窗口,主窗口进行三维可视化及任意角度切分,其余三个窗口可以联动显示物体沿着X、Y、Z轴方向上任意层切片信息及灰度值,也可以动态调整窗宽窗位。这里选用visual studio 2010进行作为开发工具,参数输入均在新增功能Ribbon控件中进行。设计中,VTK提供了vtkSmartPointer与vtkMFCWindow辅助进行内存管理。
几个关键步骤为:
1) 在MainFrm.cpp中,重写CMainFrame::OnCreateClient()函数,实现多视图切分;
2) 在视图类中,需要重写OnDraw()函数、OnSize()函数、OnCreate()函数、OnInitialUpdate()函数等函数。
3) 主视图类中使用SetVolumeRayCastFunction(compositeFunction)来实现光线透射算法中合成算法设置。
4) 主视图类中使用vtkBoxWidget类进行任意角度包围盒切分。
5) 多视图间相互数据传递及视图更新通过全局变量及调用Invalidate()函数进行。
6) 对于各切片视图,这里使用vtkInteractorStyleUser类进行交互,可以较好地定位相机位置。
7) 在各切片视图中,需调用GetActiveCamera()函数获取当前视图窗口相机,并调用相机相应的SetViewUp()、Azimuth()、SetViewUp()函数来调整相机到合适的视角。
结合以上几个关键步骤,按照VTK提供的管道流水线,结合单文档设计进行软件编写,软件设计结果如图7,8,9所示。
图7 软件读取燃料电池截图
图8 对燃料电池进行刨切并查看任意层切片
图9 对固体火箭发动机模型的三维可视化
4总结
论文使用VTK与MFC结合,实现了固体燃料电池三维数据的可视化,并可以进行任意角度刨切等功能;另外,软件同样在固体火箭发动机重建数据的三维可视化上,也同样适用,软件具有一定的应用价值。另外,软件统一选用了合成光线透射算法,功能上稍显不足,需要进一步进行完善。
参考文献
[1]吕金坤.基于VTK的工业图像三维可视化技术研究[D].太原:中北大学,2013.
[2]William J Schroeder.The VTK User’s Guide[M].Kitware.USA,2001.
[3]袁清伟.CT序列图像三维可视化技术的研究与实现[D].济南:山东大学,2009:45-47.
[4]Levoy M.Display of Surfaces From Volume Data[J].IEEE Computer Graphics and Applications,1988,8(3):29- 37.
[5]Kitware Inc.Visualizing with VTK a Tutorial[J].IEEE CG &A,2000,9:20-27.
[6]William Schroeder,Kenneth Martin,Bill Lorensen.The VisualizationToolkit-An Objectoriented to 3D Grapics(Third Edition)[Z].KitwareInc,2002.
[7]洪涛,潘志方,林立本,等.VTK医学图像三维重建应用及实现[J].计算机系统应用,2011,20(4):127-131.
[8]Frédéric Magoulès,Roman Putanowicz.Visualization of Large Data Sets by Mixing Tcl and C++ Interfaces to the VTK Library[J].Computers and Structures,2007,85:536-552.
[9]黄河鹳雀楼.LED显示屏灰度等级[EB/OL].http://www.360doc.com/content/10/1007/01/735811_58962384.shtml,2010-10-17/2016-01-07.
收稿日期:2016-01-19
基金项目:国家自然基金资助项目(61171177);国家重大仪器设备开发专项(2013YQ240803)
作者简介:李世虎(1988- ),男,安徽阜阳人,硕士研究生,主要研究方向为三维可视化、GPU重建加速等。
文章编号:1674- 4578(2016)02- 0064- 03
中图分类号:TP391
文献标识码:A
The Design of 3D Visualization Software Based on VTK
Li Shihu1,2, Wang Mingquan1,2, Chen peixing1,2
(1.KeyLaboratoriesoftheDynamicTestingTechnology,NorthUniversityofChina,TaiyuanShanxi030051,China;2.SchoolofInformationandCommunicationEngineering,NorthUniversityofChina,TaiyuanShanxi030051,China)
Abstract:3D visualization is the current research hotspot which can be conducive to intuitively find internal details of objects. This paper analyzes and introduces the VTK and 3D visualization algorithm, gives the ray tracing composite algorithm provided by VTK as an interface, then realizes the design and development of 3D visualization software combined with MFC.
Key words:VTK; 3D visualization; MFC