1.前言

前面学习了VTK的一个重要概念——可视化管线,了解了VTK数据的流动过程。好比我们做一道菜,在做每一道菜之前,首先要掌握这道菜的做法,什么时候放盐什么时候放酱油等调料,除了需要弄清楚做每一道菜的流程,还需要了解所做的每一道菜的原料,比如有些原料是要蒸出来才比较好吃,有些则可能会用炖的方法才比较可口,只有掌握做菜的流程以及了解菜的原料的特点,最后做出来的菜才可口美味。如果说VTK可视化管线是完成VTK应用程序这道菜的基本步骤,那么VTK的数据结构就好比我们做每一道菜的基本原料。针对可视化领域的特点,VTK定义了种类丰富的数据结构,了解这些数据结构,有助于写出更有针对性的、更高效的可视化应用程序。

2.可视化数据的共性

我们的目的是要对数据进行可视化,因此有必要对可视化的数据特点作一了解。归纳起来,可视化数据具有如下一些特点:

2.1 离散性

为了让计算机能够获取、处理和分析数据,必须对无限、连续的空间体进行采样,生成有限的采样数据点,这些数据以离散点的形式存储,采样的过程是一个离散化的过程。
由于可视化数据的离散性特点,在某些离散点上有精确的值存在,但点与点之间的值则是不可知的,要得到采样点之外的其他点的值,只有通过插值(Interpolation)的方法获取。常用的插值方法是线性插值,要得到更精确的数值可以采用非线性插值,如B样条插值方法。

2.2 数据具有规则或不规则的结构

可视化数据可以分为规则(Regular)和不规则(Irregular)或者说结构化(Structured)和非结构化(Unstructured)。规则结构数据点之间有固定的关联关系,可以通过这些关联确定每个点的坐标,不规则结构数据之间没有固定的关联关系。
对于规则结构的数据,存储时不必存储所有的数据点,只需存储起始点、相邻两点之间的间隔以及点的总数就可以保存完整的数据信息。对于不规则结构的数据,虽然不可以像规则结构的数据那样存储,但它也有自身的优势,即在数据变化频繁的区域可以密集表示,而数据变化不频繁的区域则稀疏表示。规则结构的数据可以在存储及计算时占优势,不规则结构的数据虽然存储和计算时不能像规则结构的那样高效,但它在数据表达方面相对而言则更加自由,更加细致、灵活的表现数据。

2.3 数据具有维度

可视化数据的第三个特点是拓扑维度(Topological Dimension)。可视化数据具有零维、一维、二维、三维等任意维度。如,零维的数据表现为点,一维数据表现为曲线,二维数据表现为曲面,三维数据表现为体等。数据的维度决定了数据可视化的方法,如,对于二维的数据,可以将数据存储到一个矩阵,然后再采用针对二维数据的可视化方法进行可视化。

3. VTK中的数据对象(vtkDataObject)与数据集(vtkDataSet)

3.1 数据对象 vtkDataObject

在VTK中,数据一般以数据对象的形式表现,是VTK里可视化数据最一般的表达形式。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有数据对象被组织成一种结构(Structure)后,才能被VTK提供的可视化算法处理。
下图是vtkDataObject类的继承图,VTK里所有的数据结构形式都是从这个类派生出来的,实际的VTK应用程序中,没有直接使用vtkDataObject来实例化数据对象,而是根据具体的可视化数据选用其具体的子类实现可视化的

3.2 数据集 vtkDataSet

数据对象被组织成一种结构并且被赋予相应的属性值时就形成数据集(Dataset)。VTK里与数据集对应的类是vtkDataSet,该类从vtkDataObject直接派生。

vtkDataSet由两个部分组成,即组织结构(Organizing Structure)以及与组织结构相关联的属性数据(Attribute Data),上图描述了vtkDataSet各结构的详细构成。vtkDataSet是一个抽象基类,结构的实现及表达由其具体的子类来完成。
vtkDataSet的组织结构由拓扑结构(Topology)和几何结构(Geometry)两部分组成。拓扑结构描述了物体的构成形式几何结构描述了物体的空间位置关系。换言之,点数据(Point Data)所定义的一系列坐标点构成了vtkDataSet(数据集)的几何结构;点数据的连接(点的连接先形成单元数据(Cell Data),由单元数据再形成拓扑)就形成了数据集的拓扑结构。比如,我们想要在屏幕上显示一个三角形,首先我们必须定义三角形三个点的坐标(即Point Data,记三个点为P1, P2和P3),然后将这三个点按照一定的顺序连接起来(P1-P2-P3,或者是P3-P2-P1的顺序),这三个点定义了数据集的几何结构,它们的连接就构成了数据集的拓扑结构。亦即,点数据(Point Data)定义数据集的几何结构,单元数据(Cell Data)定义数据集的拓扑结构,要形成完整的数据集,必须有几何和拓扑两种结构。
关于拓扑、几何结构以及属性数据的更多解释:
拓扑结构具有几何变换不变性。例如,说一个多边形是三角形,即指其拓扑结构,而给定的每个点的坐标,则为其几何结构。几何结构是一种空间描述,与空间变换有紧密联系,常见的变换有旋转、平移和缩放。属性数据是对拓扑结构和几何结构信息的补充,属性数据可以是某个空间点的温度值,也可以是某个单元的质量等。

4.参看资料

1.《C++ primer》
2.《The VTK User’s Guide – 11thEdition》
3.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》
4.  张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

VTK修炼之道11:基本数据结构_数据对象数据集相关推荐

  1. VTK修炼之道14:图像处理_创建

    1.引言:图像数据结构 数字图像文件内容由两个部分组成:图像头信息和数据.图像头信息定义了图像的基本信息,主要包括起点位置(Origin),像素间隔(space)和维数(dimension).通过这三 ...

  2. VTK修炼之道62:体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制

    1.固定点光线投影算法 vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者.该类能够实现基于Alpha合成的体绘制方法和最 ...

  3. VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法

    1.vtkVolumeMapper vtkVolumeMapper是所有体绘制Mapper类的虚基类,提供接口函数,并由其子类实现具体功能.该类的继承关系如下图所示: 应该掌握一些常用的体绘制类. 2 ...

  4. VTK修炼之道60:体绘制_体绘制管线图形渲染管线

    1.几何渲染与体绘制 1.1 几何渲染 前面练习的渲染技术都是几何渲染技术.所谓的几何渲染技术,就是通过绘制几何图元(顶点.线段.面片等)来渲染数据,例如:绘制图像需要在空间中建立一个四边形图元,然后 ...

  5. VTK修炼之道39:图像平滑_各向异性滤波

    1.各向异性扩散滤波 高斯平滑方法在平滑噪声的同时,模糊了图像的重要边缘图像. 各向异性滤波是一种基于偏微分方程的滤波技术,建立于热量的各向异性扩散理论. 各向异性滤波在图像的平坦区域选择大尺度平滑, ...

  6. VTK修炼之道38:图像平滑_中值滤波器

    1.中值滤波 vtkImageHybridMedian2D实现了对二维图像的中值滤波.其实现原理是,采用一个5x5的模板,逐次将模板中心对应于图像的每个像素上,将模板图像覆盖的像素的中值作为当前像素的 ...

  7. VTK修炼之道37:图像平滑_高斯滤波器

    1.高斯滤波 高斯平滑的原理类似于均值滤波.均值滤波模板的系数都是一样的,而高斯平滑则是需要根据像素与模板中心的距离来定义权重.权重的计算方法是采用高斯分布,离中心越远,权重越小. 下面是一个利用Ga ...

  8. VTK修炼之道36:图像平滑_均值滤波器

    1.图像平滑 图像平滑常用于图像的预处理中,如计算梯度时先对图像进行平滑处理,可以减少噪声对梯度的影响.图像平滑一般是通过模板卷积运算实现.模板可以看做是一个大小为nxn的小图像,例如3x3,5x5等 ...

  9. VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)

    1.前言 前面演示的例子都是在一个窗口中显示一个图像.但是在常见的图像处理软件中,经常会遇到在一个窗口中显示多个图像,这就会用到图像融合技术.图像融合利用图像的alpha通道和不透明度来实现.VTK中 ...

最新文章

  1. Linux 内核引导选项简介 *********很多常用的受益匪浅
  2. Dmoz介绍及怎么提交?
  3. python 进程池 等待数量_【2020Python修炼记】python并发编程(六)补充—进程池和线程池...
  4. 430单片机实现三人投票表决器_长虹KFR-28变频空调器室内机控制板电路原理分析...
  5. [转载] Java获取泛型T的类型 T.class
  6. 面向对象的关系数据库设计
  7. PixelShuffle特征图的上采样的方法
  8. centos mysql cpu_MySQL占用CPU100%解决一例
  9. python控制台输入代码_Python实现控制台输入密码的方法
  10. 鬼灭之刃人物炫酷高清壁纸
  11. 多人聊天、预约会议,FaceTime登录Windows和Android系统
  12. Redis教程(一):Redis简介
  13. 使用CSS在文字前面加上图标。
  14. ENVI计算不同轨道号范围中的平均高程
  15. 图像处理之直方图均衡和直方图匹配
  16. 【周五松土】私家萝卜与坑
  17. 判断是否为非负数、小数点后两位
  18. 多彩的产品之年——产品经理一席谈
  19. 基于hbuilder开发的微信小程序音乐播放系统,可添加本地音乐(含源码)
  20. 数据库:故障种类,恢复技术,备份方式

热门文章

  1. 11.使用ForwardAction实现页面屏蔽。
  2. tablelayout的使用
  3. 开源监控软件ganglia安装手册
  4. IE6-7-8 JS关闭窗口不提示的方法
  5. [转]NUnit详细使用方法
  6. hdu 4991(树状数组优化dp)
  7. 《Head First Python》第三章--文件与异常
  8. SQL Server 创建用户及权限管理
  9. 使用Vue.js初次真正项目开发-2018/07/14
  10. 117. Populating Next Right Pointers in Each Node II