VTK 简介

news2024/12/23 17:10:18

VTK 简介

  • VTK 简介
    • 什么是 VTK?
    • VTK 能做什么?
    • VTK 的基本组成
    • VTK 的框架结构
    • VTK 的数据结构
    • VTK 的可视化流程
    • 参考

VTK 简介

什么是 VTK?

VTK,全称是Visualization Toolkit,即可视化工具包。是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。

VTK 独立于系统的图形界面接口(GUI),可方便的嵌入到其他的相关软件中。同时开发人员可以基于 VTK 独立的基础类库开发自己的库函数,拓展 VTK 的应用范围。

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

其优点主要有:

  1. 拓展 OpenGL:VTK 不仅封装了 OpenGL 复杂的底层环境代码,而且提供了常用功能和算法处理,如常见的图形建模算法和图像处理算法。继承OpenGL 状态机的优势,保留了其可视化工具的特色,使得开发人员秩序关注高级功能的实现,而不必纠结其细枝末节。
  2. 管线设计思想:VTK 相对于其他的可视化工具包,如 Direct3D、OpenGL 等的主要区别就在于采用管线(Pipeline)设计来实现可视化流程,这种设计可以节省设计与开发时间,加快测量系统的研发速度。
  3. 开发方便:VTK 采用面向对象的设计思想来实现其管线流程的,在其可视化的流程中,各阶段的数据在管线中都是以类和对象的形式进行调用,增强程序可读性,便于开发与拓展。

VTK最早是作为Prentice Hall在1993年出版的《The Visualization Toolkit: An Object-Oriented Approach to 3D Graphics》一书的附件出现的。该书及相应的VTK软件由美国GE公司的三位研究人员:Ken Martin、Will Schroeder和Bill Lorensen用其闲暇时间合作编著与开发的,因此该软件的授权完全由这三位决定。由于其开放源码式的授权,该书一上市后,很快就建立起VTK的使用者及开发者社区交流平台,同时GE(特别是GE医疗系统)与其他数家公司也开始提供对VTK的支持。1998年,Will Schroeder和Ken Martin离开GE创立了Kitware公司(http://www.kitware.com)。有了Kitware的资金支持,VTK社区快速地成长,其在学术研究及商业应用领域都受到重用,例如Slicer生物医学计算软件使用VTK作为其核心,许多讨论研究VTK的IEEE论文出现。VTK也是许多大型研究机构,如Sandia,Los Alamos及Livermore国家实验室与Kitware的合作基础,这些研究中心使用VTK作为数据可视化处理工具。VTK同时也是美国国家卫生研究院(National Institutes of Health,NIH)创立的美国国家医学影像计算合作联盟(National Alliance for Medical Image Computing,NA-MIC,http://www.na-mic.org)的关键计算工具。

VTK 能做什么?

三维计算机图形、图像处理及可视化是VTK主要的应用方向。通过VTK可以将科学实验数据如建筑学、气象学、医学、生物学或者航空航天学,对体、面、光源等等的逼真渲染,从而帮助人们理解那些采取错综复杂而又往往规模庞大的数字呈现形式的科学概念或结果。

VTK包含一个C++类库,众多的翻译接口层,包括Tcl/Tk,Java,Python。VTK是在三维函数库OpenGL的基础上采用面向对象的设计方法发展起来的,它将我们在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。比如VTK将我们在表面重建中比较常见的MarchingCubes算法进行封装,以类的形式供用户使用,这样我们在对三维规则点阵数据进行表面重建时就不必再重复编写MarchingCubes算法的代码,而直接使用VTK中已经提供的vtkMarchingCubes类。

VTK是给从事可视化应用程序开发工作的研究人员提供直接的技术支持的一个强大的可视化开发工具。它具有如下特点:

  1. 具有强大的三维图形功能。VTK既支持基于体素的体绘制(Voxel-BasedVolume Rendering),又保留了传统的面绘制(SurfaceRendering),从而在极大的改善可视化效果的同时又可以充分利用现有的图形库和图形硬件。
  2. VTK的体系结构使其具有非常好的流streaming和高速缓存caching的能力,在处理大量的数据时不必考虑内存资源的限制。
  3. VTK能够更好的支持基于网络的工具,比如Java和VRML。随着Web和Internet技术的发展,VTK有着很好的发展前景。
  4. 能够支持多种着色,如OpenGL等。
  5. VTK具有设备无关性,使其代码具有良好的可移植性。
  6. VTK中定义了许多宏,这些宏极大的简化了编程工作并且加强了一致的对象行为。
  7. VTK具有更丰富的数据类型,支持对多种数据类型进行处理。
  8. VTK的跨平台特性方便了各类用户。

VTK 的基本组成

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

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

在这里插入图片描述

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

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

各模块层次如下所示:

在这里插入图片描述

VTK 的框架结构

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

在这里插入图片描述

VTK 的数据结构

VTK 作为一个封装良好的可视化工具包,有其独特的数据结构和数据类型。

对于初始的测量数据,VTK 使用数据流(DataFlow)的方式将其变换成图形数据,这种方法的对象包括流程对象与数据对象,具体将在下节介绍。而对于已具有几何结构、拓扑结构及相关属性(如误差、测量值等)的数据被称作数据集(DataSet)。

在 VTK 的数据集中,与拓扑结构、几何结构及相关属性相对应的是点(Point)、单元格(Cell)、属性(Property)对象。 数据集由多边形数据结构(Polygonal Data)、不规则网格(Unstructured Grid)及规则网格(Structured Grid)组成。在进行三维图形的重构中,对于有规律的点可以用相应的规则网格或多边形数据结构来表示,而用不规则网格表示其他没有规律的散乱点数据。此外,VTK 还为常见图形提供快速绘制的接口,叫做图形源对象 Source。对于立方体、球面、圆柱(锥)等图形都有 Source 对象,Source 对象封装了数据结构中的几何结构和拓扑结构,将图形对象的特点作为属性接口面向开发人员。

在这里插入图片描述

VTK 的可视化流程

VTK采用的是管线(Pipeline)运行机制,几乎可以对任何类型的数据进行处理,并提供了许多相应的类对各种类型的数据进行转换或处理。

根据所要处理的原始数据类型和所使用的算法以及所要达到的结果的不同,可以设计自己的可视化流程,并由此选择不同的数据处理和转换的类,用数据通道将这些类连接起来,将原始数据类型转换为所采用的算法模块可以直接进行处理的数据类型,最终得到我们所需要的可视化的结果。所有的类和算法模块都是可扩充的,用户可以将自己开发的类或模块转换成系统可以接受的形式,并可替换或扩充原有的类,因此,VTK是一个开放的系统,可以扩展到任何应用领域。

图形模型与可视化模型的结合构成了 VTK 的可视化管线。

可视化模型主要用来对拟合后的数据进行处理,生成可被VTK绘制的几何形体,它包括处理对象(vtkProcessObject)与数据对象(vtkDataObject)。数据对象用于表达各种类型的数据,处理对象作用于过滤器(Filter),被用来对数据对象进行相关操作并产生新的数据对象。

图形模型主要对生成的几何体进行绘制,包括相机(vtkCamera)、映射器(vtkMapper)、对象属性(vtkProperty)、灯光(vtkLight)、渲染器(vtkRenderer)、演示对象(vtkActor)及渲染窗口(vtkRenderWindows)。

在 VTK 管线中的数据流两个基本的对象:流程对象(Process Object)与数据对象(Data Object)。

  • 数据对象的数据类型有许多,其父类为 vtkDataSet 类,数据结构有标准的格式。VTK 支持的数据类型有:结构网格(vtkStructureGrid)、结构点(vtkStructurePoint)、多边形数据(vtkPolyData)、非结构网格(vtkUnStructureGrid)及非结构点(vtkUnStructurePoint)等。

  • 流程对象运用数据的系统级运算法则对数据对象进行操作用来生成新的数据对象。流程对象根据其作用可分为映射对象(Mapper)、过滤器对象(Filter)以及源对象(Source)。

VTK 的可视化流程是流程对象与数据对象的结合:

在这里插入图片描述

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

VTK 运行机制:

在这里插入图片描述

参考

  1. 维基百科介绍:http://en.wikipedia.org/wiki/VTK
  2. 百度百科介绍:https://baike.baidu.com/item/vtk
  3. https://blog.csdn.net/weixin_42291376/article/details/106810026
  4. https://blog.csdn.net/Littlehero_121/article/details/125842269

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++面向对象程序设计 - 访问对象中成员的3种方法

在C程序中访问对象的成员变量和成员函数,有三种方法: 通过对象名和成员运算符访问对象中的成员;通过指向对象的指针访问对象中的成员;通过对象的引用变量访问对象中的成员 在了解访问对象中成员的3种方法前,先了解下C…

uniapp 小程序和app map地图上显示多个酷炫动态的标点,头像后端传过来,真机测试有效

展示效果 二、引入地图 如果需要搜索需要去腾讯地图官网上看文档,找到对应的内容 1.申请开发者密钥(key):申请密钥 2.开通webserviceAPI服务:控制台 ->应用管理 -> 我的应用 ->添加key-> 勾选WebService…

LCD TP触摸屏调试方法

一、硬件连接 I2C总线:I2C-SDA和i2C-SCL 中断信号:touch-gpio 复位信号:reset-gpio 电源信号:power-gpio 二、驱动调试 2.1 确认从设备地址 在给TP供电正常后,检测其I2C设备从地址,或者通过datashee…

香港科技大学广州|数据科学与分析学域硕博招生宣讲会—天津大学专场

时间:2024年4月12日(星期五)14:00 地点:天津大学北洋园校区55楼B204 报名链接:https://www.wjx.top/vm/Q0cKTUI.aspx# 跨学科研究领域 *数据驱动的人工智能和机器学习 *统计学习和建模 工业和商业分析 *特定行业的数…

渗透测试:数据库UDF提权(linux)

目录 开头: 1.UDF提权简介: 1.1共享库文件(UDF文件)指定目录: 版本特征: 操作系统版本: 2.靶场UDF提权复现 提权前提 1.要有一个高权限的MySQL的账号 ​编辑 2.MySQL的权限配置secure_file_priv为空 3.必须有存放UDF文件的…

非关系型数据库——Redis配置与优化

目录 一、关系型数据库和非关系型数据库 1.定义 1.1关系型数据库 1.2非关系型数据库 2.非关系型数据库产生的背景 3.关系型数据库和非关系型数据库区别 3.1适用性不同 3.2数据一致性要求不同 3.3数据模型不同 3.4数据查询语言不同 3.5数据存储方式不同 3.6扩展方式…

【面试八股总结】超文本传输协议HTTP(二)

一、HTTP缓存技术 将资源(如网页、图像、脚本等)的副本存储在客户端或中间代理服务器上,以便将来的请求可以直接从缓存中获取,而不必重新从服务器下载资源。这有助于减少网络延迟,提高页面加载速度,并减轻…

Docker工作流

1.工作流 开发应用编写Dockerfile构建Docker镜像运行Docker容器测试应用发布镜像到Hub迭代更新镜像 2.开发应用 首先你需要创建一个应用,这个应用可以是后端应用或者前端应用,任何语言都可以。 比如:我使用IDEA 创建一个Java后端应用&…

行人重识别项目 | 基于Pytorch实现ReID行人重识别算法

项目应用场景 面向行人重识别场景,项目具有轻量化 (训练的时候也只需要 2GB 的显存占用)、性能好 (只使用 softmax 损失就能够达到 Rank188.24%, mAP70.68%),另外提供友好的上手项目流程教程 项目效果: 项目流程 > 具体参见项目内README.…

穿山甲广告平台SDK接入效果怎么样?

广告收入是大多数开发者的应用变现收入来源,如何进行流流量变现是从应用设计之初就需要开发者思考的问题。 穿山甲广告平台作为国内第三方广告变现平台,是不少开发者选择的对接平台。 穿山甲广告平台的广告类型较多,有信息流,ba…

用Python实现办公自动化(自动化处理PDF文件)

自动化处理 PDF 文件 目录 自动化处理 PDF 文件 谷歌浏览器 Chrome与浏览器驱动ChromeDriver安装 (一)批量下载 PDF 文件 1.使用Selenium模块爬取多页内容 2.使用Selenium模块下载PDF文件 3.使用urllib模块来进行网页的下载和保存 4.使用urllib…

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

SpringBoot+uniApp宠物领养小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.保存宠物信息代码2.提交订单信息代码3.查询评论信息代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开发的宠物领养微信小程序系统。…

wps 开发插件

官方文档参考wps官方文档参考 1.环境安装 安装wps https://www.wps.cn/ 安装Node.js https://nodejs.org/en 安装代码编辑器 Visual Studio Code https://code.visualstudio.com/ 环境检查-进入cmd查看 node -v2.demo 2.1 demo下载 打开vscode,新建终端 安装…

渗透测试练习题解析 5(CTF web)

1、[安洵杯 2019]easy_serialize_php 1 考点:PHP 反序列化逃逸 变量覆盖 【代码审计】 通过 GET 的方式获取参数 f 的值,传递给变量 function 定义一个过滤函数,过滤掉特定字符(用空字符替换) 下面的代码其实没什么用…

面试智力题

面试智力题 二进位bit1. 题目:一千杯水,一杯水有毒,怎么用10只老鼠,把这杯水找出来(1)解法1:常规法(2)bit法(位数法) (3) 时间法三级目录 二进位b…

Flutter Web 的未来,Wasm Native 即将到来

早在去年 Google I/O 发布 Flutter 3.10 的时候就提到过, Flutter Web 的未来会是 Wasm Native ,当时 Flutter 团队就表示,Flutter Web 的定位不是设计为通用 Web 的框架,类似的 Web 框架现在有很多,而 Flutter 的定位…

Vision-Language Models for Vision Tasks: A Survey

论文地址:https://arxiv.org/pdf/2304.00685.pdf 项目地址:https://github.com/jingyi0000/VLM_survey 一、综述动机 视觉语言模型,如CLIP,以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖&a…

文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

1、引言 跨模态大模型是指能够在不同感官模态(如视觉、语言、音频等)之间进行信息转换的大规模语言模型。当前图文跨模态大模型主要有: 文生图大模型:如 Stable Diffusion系列、DALL-E系列、Imagen等 图文匹配大模型:如CLIP、Chinese CLIP、…

Rust---有关介绍

目录 Rust---有关介绍变量的操作Rust 数值库:num某些基础数据类型序列(Range)字符类型单元类型 发散函数表达式(! 语句) Rust—有关介绍 得益于各种零开销抽象、深入到底层的优化潜力、优质的标准库和第三方库实现,Ru…