1、什么是可视化?
术语
不同的术语用于描述可视化。科学可视化是计算机科学领域的正式名称,包括用户界面、数据表示和处理算法、视觉表示和其他感官表示,如声音或触摸。术语数据可视化是用于描述可视化的另一个短语。数据可视化通常被解释为比科学可视化更通用,因为它意味着对科学和工程以外的数据源的处理。这些数据源包括财务、营销或商业数据。此外,数据可视化一词的范围足够广泛,包括统计方法和其他标准数据分析技术的应用。
另一个最近出现的术语是信息可视化。该领域致力于可视化抽象信息,如万维网上的超文本文档、计算机上的目录/文件结构或抽象数据结构。信息可视化研究人员面临的一个主要挑战是开发有意义地组织和表示数据的坐标系、转换方法或结构。
对可视化技术进行分类的另一种方法是检查数据存在的上下文。如果数据本质上是时空的(最多三个空间坐标和时间维度),那么通常会使用科学可视化的方法。如果数据存在于高维空间或抽象空间中,则使用来自信息可视化的方法。这种区别很重要,因为人类的感知系统高度适应时空关系。在这个坐标系中表达的数据本质上是可以理解的,几乎不需要解释。抽象数据的可视化通常需要对所查看的内容进行广泛的解释。这并不是说科学可视化和信息可视化之间没有重叠——通常信息可视化过程的第一步是将抽象数据投影到时空域,然后使用科学可视化的方法来查看结果。投影过程可能相当复杂,涉及统计图形、数据挖掘和其他技术的方法,也可能简单到选择原始数据的低维子集。
在本文中,我们使用了数据可视化这一术语,而不是更具体的术语科学可视化或信息可视化。我们认为科学可视化对该领域的描述过于狭隘,因为可视化技术已经超越了科学领域,进入了商业、社会科学、人口统计和信息管理等领域。我们还认为,数据可视化这个术语足够宽泛,可以涵盖信息可视化这个术语。
可视化示例
也许可视化的最佳定义是通过示例提供的。在许多情况下,可视化正在影响人们的生活,并上演几年前难以想象的壮举。这方面的一个典型例子是它在现代医学中的应用。
计算机成像技术已成为现代医学实践中的一种重要诊断工具。其中包括X射线计算机断层扫描(CT)和磁共振成像(MRI)等技术。这些技术使用采样或数据采集过程来捕获关于活体患者的内部解剖结构的信息。这种信息是患者的切片平面或横截面图像的形式,类似于传统的摄影X射线。CT成像使用许多铅笔状的X射线来获取数据,而MRI则将大磁场与脉冲无线电波相结合。复杂的数学技术被用来重建切片平面。通常,将许多这样紧密间隔的切片收集在一起,形成一个数据卷,以完成研究。
从成像系统获取的切片是表示X射线(CT)衰减或核自旋磁化(MRI)弛豫的一系列数字。在任何给定的切片上,这些数字都排列成矩阵或规则阵列。数据量很大,以至于无法理解原始形式的数据。然而,通过给这些数字分配一个灰度值,然后在计算机屏幕上显示数据,结构就出现了。这种结构是人类视觉系统与数据的空间组织和我们选择的灰度值相互作用的结果。计算机表示的是一系列数字,我们看到的是人体的横截面:皮肤、骨骼和肌肉。当我们将这些技术扩展到三维时,可能会得到更令人印象深刻的结果。可以将图像切片收集成体积,并且可以对体积进行处理以揭示完整的解剖结构。使用现代技术,我们可以在不需要介入手术的情况下观察活体患者的整个大脑、骨骼系统和血管系统。这种能力已经彻底改变了现代医学诊断,并将随着成像和可视化技术的成熟而变得越来越重要。
可视化的另一个日常应用是在娱乐行业。电影和电视制片人经常使用计算机图形和可视化来创建我们在身体中永远无法访问的整个世界。在这些情况下,我们正在想象其他世界,或者我们认为存在的过去的世界。很难在观看《侏罗纪公园》和《玩具总动员》等电影时,不深入欣赏令人敬畏的霸王龙,也很难被《玩具总司令》英雄般的巴斯光年迷住。
变形是另一种流行的可视化技术,广泛应用于娱乐行业。变形是将一个对象平滑地混合到另一个对象中。一个常见的应用程序是在两个面之间变形。变形也被有效地用于说明汽车设计从一年到下一年的变化。虽然这看起来像是一个深奥的应用程序,但可视化技术通常用于显示每日天气报告。使用等值线或等高线来显示恒温、降雨和大气压区域已成为每日天气报告中的标准工具。
可视化的许多早期用途是在工程和科学界。从一开始,计算机就被用作模拟物理过程的工具,如弹道轨迹、流体流动和结构力学。随着计算机模拟规模的增长,有必要将计算结果转换为图片。数据的数量超过了人类吸收和理解数据的能力。事实上,图片是如此重要,以至于早期的可视化都是通过手动绘制数据来创建的。今天,我们可以利用计算机图形学和计算机硬件的进步。但是,无论是什么技术,可视化的应用都是一样的:显示模拟、实验、测量数据和幻想的结果;并使用这些图片进行交流、理解和娱乐。
2、为什么要可视化?
可视化是理解当今计算机世界中信息泛滥的必要工具。卫星、超级计算机、激光数字化系统和数字数据采集系统以惊人的速度获取、生成和传输数据。地球轨道卫星(EOS)每天传输数兆字节的数据。激光扫描系统在15秒的扫描中产生超过500000个点【Waters91】。超级计算机模拟整个地球的天气模式[Chen93]。1995年前四个月,纽约证券交易所平均每天处理3.33亿笔交易[纽约时报]。如果没有可视化,这些数据中的大部分将隐藏在计算机磁盘和磁带上。可视化为我们提取隐藏在数据中的重要信息提供了一些希望。
可视化还有另一个重要因素:它利用了人类视觉系统的自然能力。我们的视觉系统是我们身体复杂而强大的一部分。我们几乎在做任何事情时都使用它并依赖它。考虑到我们祖先生活的环境,某些感官的发展帮助他们生存也就不足为奇了。正如我们前面在2D MRI扫描示例中所描述的,视觉表示更容易使用。我们不仅具有强大的2D视觉能力,而且善于将不同的视点和其他视觉线索整合到3D对象或情节的心理图像中。这导致了交互式可视化,在那里我们可以操纵我们的观点。围绕物体旋转有助于更好地理解。同样,我们也有识别图像中时间变化的天赋。给定一个由数百帧组成的动画,我们有一种不可思议的能力来识别趋势并发现快速变化的区域。
随着计算机的引入和生成大量数据的能力,可视化提供了充分利用我们高度发达的视觉感官的技术。当然,统计分析、人工智能、数学滤波和采样理论等其他技术也将在大规模数据处理中发挥作用。然而,由于可视化直接涉及视觉系统和人脑,因此它仍然是一种无与伦比的理解和交流数据的技术。
可视化还提供了显著的财务优势。在当今竞争激烈的市场中,计算机模拟与可视化相结合可以降低产品成本并缩短上市时间。产品设计的一大成本是创建和测试设计原型所需的费用和时间。目前的设计方法努力消除这些物理原型,并用数字等效物取而代之。这种数字原型需要能够创建和操作产品几何形状,在各种操作条件下模拟设计,开发制造技术,演示产品维护和服务程序,甚至在产品制造前培训操作员正确使用产品。可视化在每种情况下都发挥着作用。CAD系统已经被常规地用于对产品几何形状进行建模和设计制造过程。可视化使我们能够查看几何图形,并看到曲面曲率等特殊特性。例如,使用有限元、有限差分和边界元等分析技术来模拟产品性能;并且使用可视化来查看结果。最近,人类工效学和人体测量正在使用计算机技术结合可视化进行分析。正在使用三维图形和可视化来创建训练序列。这些通常被合并到超文本文档或万维网(WWW)页面中。图形和可视化的另一个实际用途是飞行模拟器。与驾驶真正的飞机相比,这已被证明是一种显著的成本节约,并且是一种有效的训练方法。
3、图像、计算机图形学和可视化?
人们对成像、计算机图形学和可视化之间的区别感到困惑。我们提供这些定义。
成像或图像处理是对2D图片或图像的研究。这包括变换(例如,旋转、缩放、剪切)、从图像中提取信息、分析和增强图像的技术。
计算机图形学是使用计算机创建图像的过程。这包括2D绘制和绘制技术以及更复杂的3D绘制(或渲染)技术。
可视化是将数据作为图像(或其他感官形式)进行探索、转换和查看的过程,以获得对数据的理解和见解。
基于这些定义,我们发现这些领域之间存在重叠。计算机图形学的输出是图像,而可视化的输出通常是使用计算机图形学产生的。有时可视化数据是以图像的形式出现的,或者我们希望使用计算机图形学中的逼真渲染技术来可视化对象几何体。
一般来说,我们从三个方面将可视化与计算机图形学和图像处理区分开来。
数据的维度是三维或更大。许多众所周知的方法可用于二维或更小的数据;当应用于更高维度的数据时,可视化效果最好。
可视化本身涉及数据转换。也就是说,信息被反复创建和修改,以增强数据的意义。
可视化是自然交互的,包括人类直接在创建、转换和查看数据的过程中。
另一个观点是,可视化是一种包含探索和理解数据过程的活动。这包括成像和计算机图形学以及数据处理和过滤、用户界面方法、计算技术和软件设计。图1-1描述了这一过程。
如图所示,我们可以看到可视化过程的重点是数据。在第一步中,从某个来源获取数据。接下来,通过各种方法对数据进行转换,然后将其映射到适合呈现给用户的形式。最后,数据被渲染或显示,从而完成该过程。通常,随着对数据的更好理解或新模型的开发,这个过程会重复。有时可视化的结果可以直接控制数据的生成。这通常被称为分析导向。分析导向是可视化的一个重要目标,因为它增强了整个过程的交互性。
4、数据可视化的起源
可视化作为一门正式学科的起源可以追溯到1987年美国国家科学基金会的报告《科学计算中的可视化》。该报告创造了“科学可视化”一词。从那时起,随着IEEE可视化等大型会议的召开,该领域迅速发展。许多大型计算机图形学会议,例如ACM SIGGRAPH,将其程序的很大一部分用于可视化技术。
当然,在1987年的报告引用之前,数据可视化技术已经存在了很多年。第一批从业者认识到将数据作为图像呈现的价值。早期的图像数据表示是在18世纪随着统计图形的出现而产生的。直到数字计算机的到来和计算机图形学领域的发展,可视化才成为一门实用的学科。
数据可视化和图形的未来似乎是爆炸性的。就在几十年前,数据可视化领域还不存在,计算机图形学被视为更正式的计算机科学学科的一个分支。随着技术的发明和计算机能力的增强,工程师、科学家和其他研究人员开始使用图形来理解和交流数据。与此同时,正在开发用户界面工具。这些力量现在已经汇聚到我们期望计算机适应人类的程度,而不是相反。因此,计算机图形和数据可视化是了解计算机的窗口,更重要的是,了解计算机操作的数据。现在,通过可视化窗口,我们可以从数据中提取信息,并分析、理解和管理比以往任何时候都更复杂的系统。
北卡罗来纳大学教堂山分校的凯南计算机科学教授、IEEE约翰·冯·诺依曼奖章获得者弗雷德·布鲁克斯博士换了一种说法。在1994年ACM SIGGRAPH的颁奖典礼上,Brooks博士表示,与人工智能相比,计算机图形和可视化提供了“智能放大”(IA)。除了围绕这个问题的更深层次的哲学问题(例如,计算机之前的人)之外,这是一个务实的观察。虽然人工智能的长期目标是开发可以在某些应用中取代人类的计算机系统,但由于这一领域缺乏真正的进展,一些研究人员将计算机视为人类的放大器和助手。在这种观点中,计算机图形和可视化发挥着重要作用,因为可以说最有效的人机界面是可视化的。最近在计算机能力和内存方面的进步只会加速这一趋势,因为人与计算机之间的接口往往是计算机有效应用的障碍。
5、本书的目的
目前存在定义和描述数据可视化的文本,其中许多文本使用案例研究来说明技术和典型应用。一些提供了算法或可视化系统架构的高级描述。详细描述留给学术期刊或会议记录。这些文本缺少的是一种练习可视化的方法。我们在本文中的目标是超越描述,提供工具来了解可视化并将其应用于您自己的应用领域。简而言之,这本书的目的有四个方面。
详细描述可视化算法和体系结构。
演示数据可视化在广泛的案例研究中的应用。
提供一个工作架构和软件设计,用于将数据可视化应用于现实世界的问题。
提供打包在C++类库中的有效软件工具。我们还为解释语言Tcl、Python和Java提供了语言绑定。
总之,我们将文本和软件称为可视化工具包,简称VTK。我们希望您可以使用文本了解可视化的基本概念,然后将计算机代码调整为适合您自己的应用程序和数据。
6、这本书不是什么
本书的目的不是提供一篇关于数据可视化的严谨学术论文。我们也不打算对可视化技术进行详尽的调查。我们的目标是将数据可视化的正式学科与实际应用联系起来,并为这项新兴技术提供坚实的技术概述。在许多情况下,我们会向您介绍包含的软件,以了解实现细节。您也可以参考适当的参考资料以获取更多信息。
7、目标受众
我们的主要受众是创建、分析、量化和/或处理数据的计算机用户。我们假设最低水平的编程技能。如果你能编写简单的计算机代码来导入数据,并知道如何运行计算机程序,你就可以使用本书附带的软件练习数据可视化。
在我们写这本书的时候,我们也考虑到了计算机图形学和可视化入门课程的教育工作者和学生。在更高级的课程中,本文可能不够严谨,无法作为唯一的参考。在这些情况下,本书将很好地作为配套文本,该软件非常适合作为编程项目和课堂练习的基础。
其他学科的教育工作者和学生也可能发现文本和软件是展示结果的宝贵工具。数值分析、计算机科学、商业模拟、化学、动态系统和工程模拟等课程通常需要创建大量数据的大型编程项目。这里提供的软件工具易于学习,并且易于适应不同的数据源。学生可以将该软件融入到他们的作业中,以显示和分析他们的结果。
8、如何使用本书
你可以采取多种方法来有效利用这本书。具体的方法取决于你的技能水平和目标。三种可能的路径如下:
新手如果你缺乏图形、可视化或面向对象原理的基本知识,你就是一个新手。如果您不熟悉面向对象原理,请先阅读第2章,如果您不了解计算机图形学,请先读第3章,如果不熟悉可视化,请先看第4章。继续阅读第12章中的应用研究。然后,您可以转到CD-ROM并尝试一些编程示例。在您熟悉基础知识并计划开发自己的应用程序之前,请不要对算法和数据表示进行更详细的处理。
黑客。如果你能自如地编写自己的代码并编辑他人的代码,那么你就是一个黑客。复习第3章、第4章和第12章中的例子。此时,您将希望获得本文本的配套软件指南(《VTK用户指南》),或熟悉上的编程资源http://www.vtk.org.然后从CD-ROM中检索示例并开始练习。
研究员/教育家。如果你开发了计算机图形和/或可视化算法,或者你积极参与使用和评估这些系统,你就是一名研究人员。如果你在课程中涵盖了计算机图形学和/或可视化的各个方面,那么你就是一名教育工作者。从阅读第二章、第三章和第四章开始。从文本中选择适当的算法,并检查相关的源代码。如果您希望扩展系统,我们建议您获取本文本的配套软件指南(VTK用户指南),或熟悉上的编程资源http://www.vtk.org.
9、软件注意事项和示例代码
在写这本书时,我们试图在实践和理论之间取得平衡。我们不希望这本书成为用户手册,但我们确实希望算法演示和软件实现之间有很强的对应性。(注:VTK用户指南由Kitware,股份有限公司出版。http://www.kitware.com推荐作为本书的配套文本。)由于这一理念,我们采取了以下方法:
应用程序与设计。这本书的重点是可视化技术在现实世界问题中的应用。我们较少关注软件设计问题。其中一些重要的设计问题包括:内存管理、派生新类、浅对象复制与深对象复制、单继承与多继承以及与其他图形库的接口。软件问题包含在由Kitware,股份有限公司出版的配套文本VTK用户指南中。
理论与实施。只要有可能,我们就会将数据可视化的理论与它的实现分开。我们认为,如果理论部分独立于软件问题和术语,那么这本书将最好地作为参考工具。在每一章的末尾都有单独的实现或示例部分,它们是特定于实现的。前面的部分是免费实现的。
文档本文包含被认为对理解软件体系结构至关重要的文档,包括对象图和精简的对象描述。更广泛的对象方法和数据成员文档嵌入软件(在.h头文件中)、CD-ROM或在线http://www.vtk.org.特别是,Doxygen生成的手册页面包含类关系、方法和其他属性的详细描述。
我们在本文中使用了一些约定。导入的计算机代码用打字机字体表示,外部程序和计算机文件也是如此。为了避免与其他C++类库发生冲突,VTK中的所有类名都以“VTK”前缀开头。方法通过添加“()”后缀来区别于变量。(VTK用户指南中列出了其他约定。)
本文中的所有图像都是使用可视化工具包软件和随附CD-ROM或网站上的数据创建的http://www.vtk.org.此外,每个图像都有源代码(有时是C++,有时是Tcl脚本)。我们决定不使用其他研究人员的图像,因为我们希望您能够对我们提供的每个例子进行可视化练习。每个计算机生成的图像都指示原始文件。以.cxx结尾的文件是C++代码,以.cl结尾的文件则是tcl脚本。希望这些示例可以作为您创建自己的应用程序的起点。
要查找示例代码,您需要在三个区域中的一个区域中进行搜索。标准VTK发行版包括一个VTK/Examples目录,其中可以找到许多有据可查的示例。VTK测试目录VTK/*/testing,例如VTK/Graphics/testing/Tcl,包含本文中使用的一些示例代码。这些示例使用VTKData分发版中的数据。最后,一个单独的软件发行版VTKTextbook发行版包含标准VTK发行版中不存在的示例和数据。VTK、VTKData和VTKTextbook发行版可在随附的CD-ROM和/或网站上找到http://www.vtk.org.
10、逐章概述
第2章:面向对象设计
本章讨论了开发大型和/或复杂软件系统的一些问题,并描述了面向对象设计如何解决其中的许多问题。本章定义了面向对象建模和设计中使用的关键术语,并通过一个真实世界的例子进行了工作。本章最后简要介绍了一些面向对象的语言以及与面向对象可视化相关的一些问题。
第3章:计算机图形学入门
计算机图形学是创建可视化的手段。本章从应用的角度介绍了计算机图形学的基本概念。描述了常见的图形实体,如相机、灯光和几何图元,以及控制照明和图像生成的一些基本物理方程。介绍了与当前可用的图形硬件相关的问题,因为它们会影响我们选择渲染的方式和内容。介绍了与数据交互的方法。
第4章:可视化管道
本章解释了我们将原始数据转换为有意义的表示的方法,该表示可以通过图形系统进行渲染。我们介绍了可视化管道的概念,它类似于软件工程中的数据流图。介绍了流程对象和数据对象之间的差异,以及我们如何解决性能和内存使用之间的问题。我们解释了管道网络拓扑在执行顺序、结果缓存和引用计数方面的优势。
第5章:基础数据表示
应用可视化的各种领域产生了许多类型的数据。本章描述了我们用来表示和访问此类数据的数据对象。引入了一种灵活的设计,程序员可以使用一个一致的接口与大多数任何类型的数据进行交互。介绍了数据的三个高级组件(结构、单元和数据属性),并讨论了它们的具体子类和组件。
第六章:基本算法
在前一章讨论数据对象的地方,本章介绍了流程对象。这些对象包含转换和操作数据的算法。本章介绍了常用的等轮廓提取、标量生成、颜色映射和矢量场显示等技术。本章的重点是让读者对更常见、更重要的可视化算法有一个基本的了解。
第7章:高级计算机图形学
本章介绍计算机图形学的高级主题。本章首先介绍透明度和纹理映射,这两个主题对本章的主旨很重要:体积渲染。体积渲染是一种查看3D对象内部的强大技术,用于可视化体积数据。我们以其他高级主题结束本章,如立体渲染、特殊相机效果和3D小部件。
第8章:高级数据表示
数据对象的部分功能是存储数据。关于数据表示的第一章讨论了数据对象的这一方面。本章重点介绍基本的几何和拓扑访问方法,以及各种数据对象实现的计算操作。本章涵盖了数据集的坐标变换、插值函数、导数计算、拓扑邻接运算以及线相交和搜索等几何运算等方法。
第9章:高级算法
本章是基础算法的延续,涵盖了更复杂或使用较少的算法。标量算法(如划分立方体)与矢量算法(如流带)一起涵盖。讨论了大量建模算法,包括三角形条带生成、多边形抽取、特征提取和隐式建模。最后,我们将介绍一些利用纹理映射的可视化算法。
第10章:图像处理
虽然3D图形和可视化是本书的重点,但图像处理是预处理和操作数据的重要工具。在本章中,我们重点介绍了几种重要的图像处理算法,并描述了我们如何使用流数据表示来处理大型数据集。
第11章:网络可视化
网络是共享可视化效果的最佳场所之一。在本章中,我们将向您展示如何编写基于Java的可视化应用程序,以及如何创建VRML(虚拟现实建模语言)数据文件以包含在您自己的Web内容中。
第12章:应用
在本章中,我们通过从各种应用领域进行一系列案例研究,将前几章联系在一起。对于每种情况,我们都简要描述了应用程序以及我们希望通过使用可视化获得的信息。然后,我们遍历设计和生成的源代码,以演示本文前面描述的工具的使用。
11、法律考虑
我们不保证,无论明示或暗示,本文本中包含的计算机代码没有错误,或将满足您对任何特定应用程序的要求。不要在任何应用程序中使用此代码,因为编码错误可能会导致人身伤害或财产损失。如果你以这种方式使用代码,风险自负。作者和出版商对您使用本代码造成的直接或间接损害不承担任何责任。
本文中包含的计算机代码受版权保护。我们允许您出于任何目的使用、复制和分发此软件。但是,您不能修改然后重新分发软件。这里介绍的一些算法是专利软件的实现。如果您计划将此软件用于商业目的,请确保遵守适用的专利法。
CD-ROM上的一些数据可以自由分发或使用(经过适当的确认)。有关详细信息,请参阅本地自述文件或其他文档。
12、参考文献注释
有许多可视化文本可用。参考文献部分列出的前六个文本是很好的一般参考文献。如果你有计算背景,Gallaghe特别有价值。Wolff and Yaege包含许多美丽的图像,面向苹果Macintosh用户。文本包括一张带有图像和软件的CD-ROM。
要了解有关使用Visualization Toolkit编程的更多信息,我们推荐使用文本《VTK用户指南》。本文有一个广泛的示例套件以及对软件内部的描述。提供了编程资源,包括API、VTK文件格式和类描述的详细描述。
13、其他
Chapter 1 - Introduction — VTK Book