VTK 基本介绍

      VTK(Visualization Toolkit)是 Kitware 公司发布的开源免费软件系统,受到国内外高等院校与科研机构的欢迎,广泛地应用于计算机图形学、图像处理与三维可视化等领域。VTK 独立于系统的图形界面接口(GUI),可方便的嵌入到其他的相关软件中。同时开发人员可以基于 VTK 独立的基础类库开发自己的库函数,拓展 VTK 的应用范围。 

       VTK 采用面向对象思想,基于 OpenGL 开发出目标函数库。它将将一些常用的算法封装为类的形式,用户在开发过程中可以直接调用其函数库进行开发,而不必纠结函数内部具体的实现过程。其优点主要有: 

(1) 拓展 OpenGL:VTK 不仅封装了 OpenGL 复杂的底层环境代码,而且提供了常用功能和算法处理,如常见的图形建模算法和图像处理算法。继承OpenGL 状态机的优势,保留了其可视化工具的特色,使得开发人员秩序关注高级功能的实现,而不必纠结其细枝末节。 

(2)管线设计思想:VTK 相对于其他的可视化工具包,如 Direct3D、OpenGL 等的主要区别就在于采用管线(Pipeline)设计来实现可视化流程,这种设计可以节省设计与开发时间,加快测量系统的研发速度。

(3)开发方便:VTK 采用面向对象的设计思想来实现其管线流程的,在其可视化的流程中,各阶段的数据在管线中都是以类和对象的形式进行调用,增强程序可读性,便于开发与拓展。

 VTK 的基本组成 
       VTK 包含图形图像处理与可视化领域内的上百种算法,支持跨平台,可在 Java、C/C++、Tcl/Tk 与 Python 等高级编程语言环境下使用。

VTK 由两大部分构成,其核心层(Compiled Core,C++类库)是基于 C/C++语言编写的,上层部分是依据特定规则编写的支持脚本语言(如 Java、Tcl/Tk 与 Python)的解释层(Interpreted Interface),如图 1-1 所示。 
 

VTK 基本介绍

                                                                                图1-1 VTK层次结构

       在 VTK 编译层中,VTK 其它的类或相关程序可调用集成了图像处理相关数据结构与算法的 C++对象。解释层部分是脚本语言与编译后的 VTK 动态链接库进行绑定而生成的相应解释型语言的接口。这种结构既保持解释性语言代码的特性,又可用C/C++语言编写相关的算法来进行拓展应用,很大程度上提高了开发效率。

VTK 的拥有特别庞大的类库,可根据各个类在类库中的具体作用将各类分成如下模块:图像处理模块(Imaging)、文件读写模块(IO Interface)、图形处理模块(Graphics)、绘制模块(Rendering)、公共模块(Common)、数据转换模(Filtering),每个模块被编译成相应的动态连接库[48]。各模块层次如图 1-2 所示:

VTK 基本介绍

                                                                                         图1-2 VTK类库层次

VTK 的框架结构 
        VTK 的框架结构如图1-3 所示,类似于 MFC 中的 CObject 基类,vtkObject 是VTK 的基类,为可视化流程提供了基本的方法。vtkSource 是分别是 vtkObject、vtkFilter的派生类与父类,为整个可视化流程(如数据读取等)定义具体的行为与接口,经过vtkFilter 处理后的数据,可转化为直接用特定算法模块进行处理的形式。vtkObject的另一派生类是 vtkMapper,它将 vtkFilter 处理后的数据映射为几何数据形式,为原始数据与图像数据之间提供接口。任何可视化的数据都需要绑定 vtkActor 演示对象,在 vtkRender 类的渲染下,最终显示在屏幕的窗口中。 
 

VTK 基本介绍

                                                                                  图1-3 VTK架构结构

 VTK 的数据结构

           VTK 作为一个封装良好的可视化工具包,有其独特的数据结构和数据类型。对于初始的测量数据,VTK 使用数据流(DataFlow)的方式将其变换成图形数据,这种方法的对象包括流程对象与数据对象,具体将在下节介绍。而对于已具有几何结构、拓扑结构及相关属性(如误差、测量值等)的数据被称作数据集(DataSet)。在 VTK 的数据集中,与拓扑结构、几何结构及相关属性相对应的是点(Point)、单元格(Cell)、属性(Property)对象。 数据集由多边形数据结构(Polygonal Data)、不规则网格(Unstructured Grid)及规则网格(Structured Grid)组成。在进行三维图形的重构中,对于有规律的点可以用相应的规则网格或多边形数据结构来表示,而用不规则网格表示其他没有规律的散乱点数据。此外,VTK 还为常见图形提供快速绘制的接口,叫做图形源对象 Source。对于立方体、球面、圆柱(锥)等图形都有 Source 对象,Source 对象封装了数据结构中的几何结构和拓扑结构,将图形对象的特点作为属性接口面向开发人员。

VTK 基本介绍

 

                                                                                    图1-4 数据集的分类及构成

VTK 的可视化流程

       VTK 的可视化流程将需要处理的数据视作流动介质在管道中流动,因此可视化的不同阶段的数据将会有不同的处理方式,图形模型与可视化模型的结合构成了 VTK的可视化管线。 可视化模型主要用来对拟合后的数据进行处理,生成可被VTK绘制的几何形体,它包括处理对象(vtkProcessObject)与数据对象(vtkDataObject)。数据对象用于表达各种类型的数据,处理对象作用于过滤器(Filter),被用来对数据对象进行相关操作并产生新的数据对象;图形模型主要对生成的几何体进行绘制,包括相机(vtkCamera)、映射器(vtkMapper)、对象属性(vtkProperty)、灯光(vtkLight)、渲染器(vtkRenderer)、演示对象(vtkActor)及渲染窗口(vtkRenderWindows)。 在 VTK 管线中的数据流两个基本的对象[44]:流程对象(Process Object)与数据对象(Data Object)。数据对象的数据类型有许多,其父类为 vtkDataSet 类,数据结构有标准的格式。VTK 支持的数据类型有:结构网格(vtkStructureGrid)、结构点(vtkStructurePoint)、多边形数据(vtkPolyData)、非结构网格(vtkUnStructureGrid)及非结构点(vtkUnStructurePoint)等。流程对象运用数据的系统级运算法则对数据对象进行操作用来生成新的数据对象。流程对象根据其作用可分为映射对象(Mapper)、过滤器对象(Filter)以及源对象(Source)。 
VTK 的可视化流程是流程对象与数据对象的结合,如图 1-5所示。 

VTK 基本介绍

 

                                                                            图1-5 VTK 可视化流程

Source 对象的数据既可以是已知读入的,也可是程序运算得到。过滤器(Filter)将经过 Source 对象处理后数据对象(Data Object)进行处理来生成新的数据对象。新生成的数据对象进入映射器(Mapper),将三维数据映射成几何图像,然后绑定到演示对象(Actor),此时用户可以设置演示对象的属性(如文本、颜色等)。渲染器(Renderer)在设置灯光(Light)与相机(Camera)等属性后,将演示对象添加到绘制器窗口(RenderWindow)对三维体进行绘制与显示。交互器(RenderWindowInteractor)可为演示对象提供人机交互(如缩放、旋转、文本显示等)。 

VTK 实现数据的三维显示 

        VTK 的可视化管道流程常用来进行图形的三维显示,其流程如图1-6所示。激光跟踪仪的测量数据经过几何运算后,测量实体的几何数据将按空间坐标位置放置于对应的空间场景中,最终以三维图形的方式显示在计算机的显示屏上。用户可通过测量软件的人机交互模块来控制三维场景的显示效果,这样就可以全方位地观察测量实体的空间坐标位置,掌握误差的分布情况,以便于测量工作的顺利展开。 
 

VTK 基本介绍

                                                                     图1-7 数据的三维显示流程

测量系统读入数据后,数据将存储于数据库中,然后对其拟合,得到几何图形三维重构的必要参数。经过处理后的数据,可成为 VTK 可视化流程的拟合图形源处理对象(Source)。首先创 建 vtkRegularPolygonSource 类对象并 且作为数 据映射
vtkPolyDataMapper 类对象的输入,设置几何图形的参数,以圆为例:如圆心、半径及法向等。然后创建一个对应的演示对象 vtkActor 类并与 vtkPolyDataMapper 对象相关联,为达到最佳显示效果,可通过绑定 vtkProperty 类对象来设置演示对象 vtkActor 的属性(如透明度、颜色、文本字体大小等)。之后,设置渲染器 vtkRenderer 和渲染窗口 vtkRenderWindow 的对象,将 vtkActor 演示对象添加到 vtkRenderWindow 中。为了便于交互,可将 vtkRenderWindowInteractor 类对象加入 vtkRenderWindow 中,至此测量数据的三维显示基本完成。 在测量数据的三维显示过程中,通过拟合得到的数据模型与原始数据会有一定的偏差。原始点数据与拟合模型对应的点数据之间的数学关系,可成为误差分析时的源数据(Source)对象。根据该对象,利用 VTK 可视化流程,在创建 vtkConeSource 类对象后,按照拟合图形的三维显示流程可将误差对象显示出来,以便直观的分析与处理。 

 

参考文献:

1、姚为星. 激光跟踪仪测量数据处理及可视化技术研究[D].吉林大学,2016.