本书系统地介绍了VTK基础知识与开发技术,帮助VTK用户从入门到进阶,快速进入项目实战。内容包括:VTK概览;VTK的基本概念;VTK基本数据结构;VTK数据的读写;VTK图像处理;VTK图形处理等。
★国内著名VTK开发人员的原创作品。
★作者有自己的技术博客,可以与读者互动。
★免费提供书中的主要代码和实例运行截图。
视觉是人类获取外部信息的最重要方式,研究表明,人类通过视觉通道获取的信息占总获取信息的80%以上。正所谓“百闻不如一见”,视觉信息比文字、数字等信息更加直观,信息量更为丰富。因此,通过图形图像等方式将数据进行可视化,有助于人们理解数据。
早在20世纪初,人们已经将图表和统计等低级的可视化技术应用于数据分析中。在现代社会中,随着科学技术的迅猛发展,借助超级计算机、航空航天、CT(计算机断层扫描)、核磁共振以及地质勘探等手段,人们可以获得海量的科学数据。而人们进行科学研究的目的不仅仅是为了获取数据,更重要的是分析数据以探索自然规律,这成为人们面临的巨大挑战。而传统的可视化技术已不能满足需要,科学计算可视化得到了广泛的关注与发展。
科学计算可视化科学计算可视化的概念早在20世纪80年代就已经提出。1987年2月,美国国家科学基金会召开的一个专题研讨会上正式提出了“可视化”一词,并在会后发表的正式报告中给出了科学计算可视化的定义、覆盖领域以及近期与长期研究方向。这标志着科学计算可视化作为一个学科在国际范围内已经成熟。
科学计算可视化的含义是运用计算机图形学的原理和方法,将科学与工程中产生的大规模数据转换为图形、图像,以直观的方式显示出来。它涉及计算机图形学、图像处理、计算机视觉、人机交互等多个研究领域,是当前计算机图形学的重要研究方向。随着计算机硬件配置不断提高,计算能力极大增强,许多重要的图形图像处理算法可以快速地通过硬件实现。因此,基于科学计算可视化技术来直观地展示数据计算过程与结果,并进行交互处理,已经成为可能。
可视化函数库随着科学数据可视化技术的发展,出现了大量的新的软硬件可视化技术和手段。广大从事可视化工作的科研与工程人员迫切需要一种功能强大的可视化开发工具。相信许多人已经接触或者听说过OpenGL。OpenGL是行业领域中最为广泛接纳的2D/3D图形API。它采用C语言风格,提供大量的函数来实现从简单到复杂图形的渲染。另外一个与OpenGL类似的函数库是微软的Direct3D。然而,无论是OpenGL还是Direct3D,都仅提供底层的API接口供用户使用,因此学习和使用这两个工具都有一定的难度,通常需要用户深入理解计算机图形学的基础知识。另外,它们并未封装当前流行的可视化算法,例如体绘制算法。对于工程人员来说,使用底层API开发这些算法,既制约了工程开发效率,也不利于代码复用。因此,工程开发与科研人员更需要一种功能强大、方便易用的可视化开发库,而VTK(Visualization Toolkit,可视化工具包)即是这样一种工具。
VTK是一个用于可视化应用程序构造与运行的支撑环境,它是在OpenGL的基础上采用面向对象的设计方法发展起来的。VTK将可视化开发过程中经常遇到的细节屏蔽起来,并将常用的可视化算法(例如Marching Cubes方法)以类的方式进行封装,为从事可视化应用程序开发工作的研究人员提供了一个强大的开发工具,因此VTK发布后得到了广泛的关注与应用。
写作初衷VTK是一种开源的、跨平台的、可自由获取的可视化函数库,来自世界各地的开发人员可以修改以及贡献个人的代码。同时,VTK很早就组建有用户及开发者社区,方便世界各地的VTK使用人员及开发人员的技术交流。截至当前,系统介绍VTK的书籍主要有Kitware(http://www.kitware.com)公司出版的VTK教科书及配套的《VTK User’s Guide》两本书(详见本书参考文献)。
国内的VTK用户和开发人员在学习与使用VTK时,通常参考VTK的官方文档以及上述两本英文书籍。此外,网络上介绍VTK的文章虽多如牛毛,但大都比较零碎,缺乏系统性。截至本书出版,国内还未出现系统介绍VTK的中文书籍。
本书的两位作者相识于2010年,在此之前,双方都学习与使用过VTK,2010年起共同就职于深圳先进技术研究院,在共事期间,曾使用VTK、ITK(Insight Segmentation and Registration Toolkit)、IGSTK(Image-Guided Surgery Toolkit)、CMake等工具开发过多个科研项目,一路走来,深知各种开源框架、算法的学习门槛是多么让人望而生畏,深刻体会过VTK学习和使用过程中的艰辛。从2010年起,本书的两位作者共同制作了《一起学习VTK》和《一起学习ITK》等系列视频教程,承蒙各位初学者的厚爱,从视频发布起,得到了不少初学者的支持。这也给了作者编著一本系统介绍VTK中文书籍的信心。
2011年起,本书作者陆续在网络上发表多篇与VTK、ITK等相关的文章,并于2013年初开通了CSDN专栏。本书即是在该专栏的基础上,对内容重新整理与补充,在工作之余前后历时两年编写了本书,旨在为VTK用户提供VTK入门与提高的参考资料,为VTK用户提供一定的指导。
在写作本书时,作者得到了来自不少同行的帮助,其中特别要感谢的是来自深圳市旭东数字医学影像技术有限公司的张磊,他在繁忙的工作之余给本书部分章节作了校对并提出了很多宝贵意见,使本书的内容更加完善。
本书面向的读者本书从VTK最基础的部分开始讲起,并一步步深入地探讨VTK底层的架构,比如智能指针、可视化管线等内容,最后介绍如何基于VTK的框架实现自己的算法。因此,本书既适用于VTK零基础的用户,也适用于对VTK有一定的了解,想进一步提高的开发人员。
本书通过大量的实例来阐释VTK的学习和使用方法,在选择实例时,结合作者开发经历,以实用性实例为主。书中实例全部采用C++实现,在Window 7、Visual Studio 2008环境下均测试通过,示例程序和运行结果截图可在机械工业出版社网站免费下载。
前言
第1章 VTK概览
1.1 VTK概述
1.2 VTK的编译安装
1.3 创建一个简单的VTK程序
1.4 本章小结
第2章 VTK的基本概念
2.1 一个稍微复杂的VTK程序
2.2 三维场景的基本要素
2.3 坐标系统及空间变换
2.4 VTK管线
2.5 VTK智能指针
2.6 本章小结
第3章 VTK基本数据结构
3.1 可视化数据的基本特点
3.2 数据对象和数据集
3.3 单元类型
3.4 属性数据
3.5 不同类型的数据集
3.6 数据的存储与表达
3.7 本章小结
第4章 VTK数据的读写
4.1 Reader与Writer类
4.2 场景的导入与导出
4.3 本章小结
第5章 VTK图像处理
5.1 VTK图像创建
5.2 VTK图像显示
5.3 VTK图像基本操作
5.4 边缘检测
5.5 图像平滑
5.6 频域处理
5.7 本章小结
第6章 VTK图形处理
6.1 vtkPolyData数据生成与显示
6.2 基本的图形操作
6.3 网格平滑
6.4 封闭性检测
6.5 连通区域分析
6.6 多分辨率处理
6.7 表面重建
6.8 点云配准
6.9 纹理映射
6.10 本章小结
第7章 体绘制
7.1 体绘制管线
7.2 vtkVolumeMapper
7.3 vtkVolume
7.4 不规则网格数据体绘制技术
7.5 本章小结
第8章 VTK交互与Widget
8.1 观察者/命令模式
8.2 交互器样式
8.3 VTK Widget
8.4 拾取
8.5 本章小结
第9章 基于VTK的GUI应用程序
9.1 基于Qt的VTK应用程序
9.2 基于MFC的VTK应用程序
9.3 本章小结
第10章 自定义VTK类
10.1 VTK开发基础
10.2 VTK管线机制
10.3 自定义Filter
10.4 本章小结
附录
附录A 从VTK 5.0到VTK 6.0
附录B 体绘制传输函数控件
附录C VTK中文的实现
附录D VTK在商业软件中的应用
参考文献