上一篇写了一些数据源的生成或者读取方法。下面开始严肃的讲一下VTK中的数据集,虽然感觉有时候不会直接去用,但是感觉这个是基础,所以要先看。
直接看《VTK用户手册》的第44页 3.1 可视化vtkDataSet类数据
在写这篇的时候,也结合了张晓东、罗火灵两位大大编写的《VTK图形图像开发进阶》。这本书的3.2 节也是讲数据对象和数据集
在VTK中,数据一般以数据对象的形式表现。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。
将数据对象组织成一种结构并赋予相应的属性值,就形成了数据集(Dataset)。VTK里与数据集对应的类是vtkDataSet,该类从vtkdataObject直接派生。(《VTK图形图像开发进阶》)
vtkDataSet 是所有数据集类的父类,是一个抽象类,不能实例化。
vtkDataSet由两个部分组成:组织结构(Organizing Structure)以及与组织结构相关的属性数据(Attribute Data)
而vtkDataSet的组织结构又由拓扑结构(Topology)和几何结构(Geometry)两部分组成。
《VTK图形图像开发进阶》这本书上将的很清晰(P49),特摘录下来(我按照自己的理解重新组织了一下):
几何结构描述了对象的空间位置关系(比如,要画一个三角形,首先需要指定三角形的三个顶点坐标P1,P2,P3,在VTK中指定点用PointData)
拓扑结构描述了对象的构成形式(比如,上面所说的三个顶点P1,P2,P3在不指定拓扑关系的时候,有很多种组织形式,比如,三个孤立的点,比如一条直线加一个孤立的点,或者是一段折线,但是指定了拓扑结构,比如说按照P1-P2-P3的顺序用直线连接起来,那么他就是一个三角形,vtk用单元数据来描述拓扑结构)
上面的三个点P1,P2,P3定义了数据集的几何结构,而P1,P2,P3顺序连接方式定义了数据集的拓扑结构。也就是点数据定义了数据集的几何结构,单元数据定义了数据集的拓扑结构,要形成完整的数据集必须有几何和拓扑两种结构。
拓扑结构具有几个变换不变性。例如说一个多边形是三角形,即指器拓扑结构,而给定每个点的坐标,则为其几何结构。
几何结构是一种空间描述,与空间变换有紧密联系,常见的变换有旋转、平移和缩放。
属性数据是对拓扑结构和几何信息的补充,属性数据可以是某个点的温度值,也可以是某个单元的质量。
可能单看上面觉得有点蒙,也可能会觉得好像太理论没什么用,那可以直接看《VTK图形图像开发进阶》的第62页,这里讲了数据集中的一种,vtkImageData,这个数据集的应用十分广泛,vtkImageData类型的数据集是按照规则排列在矩形方格中的点和单元的集合,如下图所示,如果数据集的点和单元排列在平面(二维)上,则称此数据集为像素映射(pixmap)、位图或图像。如果排列在层叠面(三维)上,则称为体。vtkImageData 是由一维的线、二维的像素或三维的体素组成,vtkImageData的结构以及拓扑都是规则的,因此每个点的位置可以隐式的表达,只需要知道vtkIamgeData数据的维数、起始点的位置和相邻点之间的间距,就可以计算出每个点的空间位置。数据维数用一个三元组(nx,ny,nz)来表示,分别表示在X,Y,Z 方向上点的个数。vtkImageData数据集的点的个数一共是 nx*ny*nz,单元的个数一共是(nx-1)*(ny-1)*(nz-1)。
http://image.szpt.edu.cn/UploadFiles/%E6%95%B0%E6%8D%AE%E9%9B%86%E4%B8%8E%E6%95%B0%E6%8D%AE%E5%B1%9E%E6%80%A7.swf
上面的网址中也详细的讲解了,VTK的数据集和数据属性,这时周振环老师的《医学图像编程技术》中的内容。
下面简单写几个例子,c++实现的例子在书上面都有了,我就把他们改成C#下的实现吧。
代码有点多放在下一篇。