可视化工具包(VTK)外文翻译资料

 2022-07-28 15:47:25

英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料


在这篇指导文章中我们介绍了关于可视化工具包(VTK)的基础方面。系统概述辅以一些具体实例能够帮助你学习这个系统。这篇指引文章面向于致力2D或者3D数据处理学科的研究者,以期更好的掌握可视化步骤而非一个配套系统所可提供的。它同时也帮助那些想要制作将VTK作为可视化或者数据处理引擎的应用的开发者们。尽管这篇引导文章只能对这个庞大工具包提供一些简单介绍,但是我们在最后提供了额外的参考材料。

什么是VTK?

VTK是一个开源(可见侧边栏“开放源码的发展历程”),可移植(WinTel/Unix),面向对象的工具包,可实现3D电脑制图,可视化,图像处理的等功能。不仅可用C 编程,VTK同时支持Tcl,Python,和java语言,允许复杂的应用,快速的原型设计以及简单的形式。尽管VTK不提供任何的面向用户界面部分,它能够集合已存在的部件进行设置,比如TK,X/Motif。

VTK是当今常用的可视化系统之一。AVS是第一批可用的商业系统,IBM最早的商业产品的Data Explorer(DX),现在是开源的,而且以OpenDX而广为人知。NAG Explorer和Template Graphics Amira是其他几类比较有名的商业系统。

VTK作为多方面系统被广泛作用于大量的应用之中,如图1所示,因为VTK是开源的,在许多大学的教授,包括美国伦斯勒理工学院,纽约州立大学,俄亥俄州立大学,斯坦福大学和布里格姆妇女医院,都在使用VTK进行课程教授和研究使用。国家实验室比如洛斯阿拉莫斯国家实验室使用VTK进行大数据并行处理。商业机构在开源基础上编写了大量的应用,包括医学可视化,流体力学,有限要素分析和无规则点状数据的表面重建等工程。

VTK作为一个指导软件始于1993年12月的一篇由威廉·罗德,肯·马丁和比尔·劳伦斯发布的文章《VTK:面向对象的可视化工具》。1998年这篇文章再次发表,增添了更多的作者如丽莎·阿维拉,瑞克·阿维拉和查尔斯·劳伦。自从这时起一大批可观的团体围绕着VTK开始迅速发展起来,包括一大批开发者,他们经常提交一些BUG修复和成熟的类实现。这些团体致力于提高VTK的使用体验。举例来说,在图像研究所的大卫·高比已经成功重建VTK的类名编译,而且他现在依然是个活跃的开发者。

体系结构

VTK包括两个主类:一个编译内核(基于C )和一个自动生成的接口层。这个接口层目前支持Tcl,Java和Python。

C 内核

数据结构,算法和时序处理系统有C 内核进行实现。一般的设计模式比如说对象工厂和虚拟对象确保可移植性和可扩展性。VTK独立于用户图形界面(GUI),它不依赖windows系统。绑定ID和事件循环允许开发者将VTK嵌入自己的应用之中,而抽象的图像模型则实现了图像的可移植性。

图1 VTK可用来区域分割,包括医学用途(左)和工业用途(右)

解释层

如果说编译内核提供了速度和效率,那么解释层则提供了灵活性和可拓展性。比如,使用GUI原型工具,Tcl/Tk,Python/Tk,或者Java AWT允许迅速构建专业应用。这些常用的编程语言自带一些扩展包,比如说Python的数字库Numpy。

我们在本文章使用Tcl作为实例。你可以复制在这里的代码然后立即看到运行结果。

图形化模型

VTK有两个主要的子系统-图形化模型和可视化通道。图形化模型基于图像语言生成一个抽象区域(比如说OpenGL)来确保跨平台稳定性。自从1993年VTK诞生起,每个电脑平台有它自己的图形化语言,比如sun公司的XGL和惠普的Starbase以及美国硅图公司的GL。抽象的图形化概念在平台和设备独立层创建了图形模型,自从那个时候起,工业在OpenGL上有了标准。尽管现在只有低级的图像化语言支持VTK,但是抽象层没有被抛弃。在未来,新的图形语言很可能变得普及然后取代OpenGL成为标准。使用抽象层允许我们可以使用新技术来更新VTK而不影响将来的兼容。

我们使用电影制作工业来为图像模型的各类进行命名。光线,相机,成员和道具是用户创建场景所用的类。你会发现,用于3D多边形渲染(光线,相机,成员)的模型跟用于体积和其他类型渲染的模型(光线,相机,体积)是类似的。在接下来的章节之中,我们将要浏览一些简单的例子来论证这些简单的类名在表面多方形和体积渲染的作用。你可以复制这些代码在正确安装后的Tcl来验证之前章节内容。图2展示了这些例子的结果。

图2 在渲染窗口中的两个渲染器包括了表面,体积和2D绘制。左面的渲染器显示了一个简单的立方体;右面的渲染器显示了一个不规则的多边形。最右边的下拉栏显示了数据的范围和色差。

开源代码起源

开源代码就是在软件世界获得许可的软件模型。尽管关于开源代码准确的定义仍处于争论之中,但是最基本的看法就是源代码对于任何想要使用的人来说都是免费的。这跟商业软件,免费软件和分享软件有很大差别,以上的这些正常情况下都是以二进制格式保存的。开源代码对于广大群众的开放在软件发展中创造了许多机遇和好处。最近,一些高利润的计划将这种模式带到了媒体和公众里。这些计划包括Linux开发系统,the Apache Web服务(占有世界万维网的50%)以及邮件发送(当今邮件发送的主干源码)。尽管人们在电脑诞生之初就开始分享代码,新的商业模式,软件发展工具和互联网使这种模式在过去的五年中急速发展。

开源代码有数不清的好处。埃里克·雷蒙在《大教堂与市集:关于Linux和开源代码在改革中的沉思》声称开源代码发展在本质上比自闭发展有更好的延伸性。可以在更多方面检验开源代码,bugs能够很快的被发现和被完善。不仅如此,新的研究者可以免费加入研发团队。这开发了更加可靠和更加方便的软件,并且比很多封闭的商业团队有着更快的发展周期。随着来自各地的研究者的加入,测试变得更加重要。

在过去的十年中,商业模式在蓬勃发展中推动了开源代码的发展。对于一个公司来说放弃软件而生存是不可能的。无论如何,公司可通过开源代码迅速发展。一些正常的生产收入的方式,比如结算,培训,增加对象,出售技术支持,构建自营的终端用户应用程序的开源库和销售开发工具。

渲染窗口和渲染器

为了使数据可视化,你首先需要在你的电脑上打开一个窗口,vtkRenderWindow是一个或者多个渲染器在其上进行绘制的窗口的抽象基类。跟大多数的图形对象一样,它自动为你的平台对正确的设备基类进行实例化。vtkRenderWindow是 vtkRender对象的容器对象,多个对象可以平铺在一个vtkRenderWindow中以创建复杂的可视化系统。在下个例子中,我们将两个渲染器以不同的颜色放在同一个渲染窗口中。放置位置被定义使用在渲染窗口中的标准坐标(0,1):

vtkRenderWindow renWin

renWin SetSize 600 300

vtkRenderer ren1

ren1 SetViewport 0.0 0.0 0.5 1.0

ren1 SetBackground 0.8 0.4 0.2

renWin AddRenderer ren1

vtkRenderer ren2

ren2 SetViewport 0.5 0.0 1.0 1.0

ren2 SetBackground 0.1 0.2 0.4

renWin AddRenderer ren2

renWin Render

vtkRenderWindow对象成功进行渲染处理,所以一个单独的Rend()将会在窗口上进行映射,然后渲染器会升级这些结果信息。到目前为止,这个例子仅仅规定了背景颜色,因为我们还没有定义任何道具。

道具、映射器、特性

道具是被用来被添加至渲染器以生成场景的对象。类名vtkProp是一个所有2D和3D道具的抽象基类,其中包含了可见性,取向,大小以及位置等信息。道具同映射器和私人对象相关联。映射器指的是一个输入的数据对象(在可视化通道章节被提及),它知晓如何渲染数据对象。这个私人对象包含渲染参数比如说颜色和物质属性。在接下来的三个章节里面,我们将会举出几个关于道具、映射器、特性的具体基类,其可用于渲染3D表面几何数据,3D体积数据和2D几何图形,文档以及图片。

渲染3D几何数据

vtkActor是在VTKProp中的一个可用于在场景中重现3D几何数据的具体基类。这个actor对象将会自动生成一个默认的vtkProperty对象,而且允许用户去指定vtkMapper的一个基类。基于几何关联映射器的特性,基类vtkDataSetMapper或者vtkPolyDataMapper必须被使用。如果数据包含由vtkPolyData重现出的点、线或者多边形,vtkPolyDataMapper能够被使用。否则,vtkDataSetMapper必须被使用。

接下来的Tcl代码片段能够被用于创建多边形数据集然后将其放置于窗口中。在这段代码和接下来的其他代码中,在代码结尾由(/)来表示这段代码不适合这一行。缩进行属于之前的那行代码。只删除/符号然后输入一行代码。

vtkCubeSource cubeData

vtkPolyDataMapper cubeMapper

cubeMapper SetInput \

[cubeData GetOutput]

vtkActor cubeActor

cubeActor SetMapper cubeMapper

ren1 AddProp cubeActor

ren1 ResetCamera

renWin Render

因为vtkCubeSource的输出是一个多边形数据,是一个vtkPolyDataMapper渲染数据的实例。ResetCamera()将镜头对向数据。

接下来的Tcl代码片段使正方体旋转然后将颜色改变成粉色:

cubeActor RotateX 30.0

cubeActor RotateY 20.0

[cubeActor GetProperty] \

SetColor 1.0 0.7 0.7

renWin Render

使用GetProperty() 可创建私有对象。

渲染3D体积数据

vtkImageData对象能够重现一维,二维,三维图像数据。作为vtkDataSet的基类,vtkImageData能够由vtkActor重现以及被vtkDataSetMapper所渲染。在3D中这个数据可被认为是一个体元。另外,它也可由vtkVolume重现以及被vtkVolumeMapper所渲染。由于vtkVolumeMapper的一些基类使用图形技术来渲染体积数据,体积和actors的区别主要在于不同的术语和参数以及其用于体积渲染和底层渲染的方法。

VTK当前支持三种类型的体积渲染即光线跟踪,2D纹理映射以及VolumePro图像卡。尽管本节实例使用的是2D纹理映射方法,你可以通过一些其他的方法来改变它但是结果不受变化。

为了开始我们的体积渲染实例,我们需要读取一个无符号字符值的3D结构化信息,然后使它作为vtkVolumeTextureMapper2D的输入。

vtkSLCReader negReader

negReader SetFileName “neghip.slc”

vtkVolumeTextureMapper2D negMapper

negMapper SetInput \

[negReader GetOutput]

在体积可视化中常常是定义转换函数,其作用是把标量值转换成颜色和透明度。在这个例子中,我们将要使用一个简单的0.0到0.02的不透明度,其颜色选择包含了红色,蓝色和绿色。

vtkPiecewiseFunction negOpacity

negOpacity AddPoint 0 0.0

negOpacity AddPoint 255 0.2

vtkColorTransferFunction negColor

negColor AddRGBPoint 64 1.0 0.0 0.0

negColor AddRGBPoint 128 0.0 0.0 1.0

negColor AddRGBPoint 196 0.0 1.0 0.0

当将一个点添加到传递函数时,标量值是首先需要被定义的量,其伴随着为vtkPiecewiseFunction的变量或者为vtkColorTransferFunction的RGB三原色。因为我们要使8位数据可视化,在这个例子的标值范围为0到255.

既然我们已经定义好两种必须的转移变量,我们可以建立一个体积特性。

vtkVolumeProperty negProperty

negProperty SetColor negColor

negProperty SetScalarOpacity \

negOpacity

vtkVolume negVolume

negVolume SetMapper negMapper

negVolume SetProperty negProperty

ren2 AddProp

全文共12320字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[143678],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。