VTK开发笔记(一):VTK介绍,Qt5.9.3+VS2017x64+VTK8.2编译

VTK开发笔记(一):VTK介绍,Qt5.9.3+VS2017x64+VTK8.2编译

一言准备中...

前言

  主流开源三维三大流派:openGL、osg和vtk,各有优劣,所以根据项目和产品定义的不同,选择合适的方式,本系列开启VTK三维系列教程。
  这里注意我们走的是C++技术流,对内存、性能和交互实时性是我们承担研制开发项目和产品所追求的。

 

版本区分

  根据网上搜索的,整理一下:

  • Qt5.9.2 + VS2017 x64 + VTK8.2
  • Qt5.9.3 + VS2015x64 + VTK8.2
  • Qt5.9.3 + VS2017x64 + VTK8.2(我们使用的)
  • Qt5.14.2 + VS2015 x64 + VTK8.2
  • Qt5.15.2 + VS2019x64 + VTK8.2
  • Qt5.15.12 + VS2022x64 + VTK9.4.2
  • Qt5.12 + VS2022x64 + VTK9.1.0
 

VTK

介绍

  VTK,即 Visualization Toolkit(可视化工具包),是一个开源的免费软件系统 ,致力于为科学数据的处理和展示提供全面的支持。它被定位为一个功能丰富、高度可扩展的可视化框架,能够满足从简单数据可视化到复杂科学研究和工业应用等各种场景的需求。无论是处理小规模的本地数据,还是应对大规模的分布式数据,VTK 都能提供高效的解决方案。
  在这里插入图片描述

背景

  VTK 的起源可以追溯到 1993 年,当时它是美国国家标准与技术研究院(NIST)的一个科研项目 。由 GE 研发部 Corporate R&D 的三位研究人员 Will Schroeder、Ken Martin 与 Bill Lorensen 利用闲暇时间合作开发,最初作为 Prentice Hall 出版的《The Visualization Toolkit: An Object - Oriented Approach to 3D Graphics》一书的附件释出 。由于其开放源码式的授权,VTK 迅速吸引了众多用户和开发者,逐渐建立起活跃的使用及开发者社群。1998 年,Will Schroeder 和 Ken Martin 离开 GE 创立了 Kitware 公司,在 Kitware 的资金支持下,VTK 社群得以快速成长,其应用范围不断扩大,在学术研究及商业应用领域都受到了广泛重用。例如,Slicer 生物医学计算软件就使用 VTK 作为其核心 ,同时也有大量 IEEE 论文对 VTK 展开讨论和研究。此外,许多大型研究机构如 Sandia、Los Alamos 及 Livermore 国家实验室等,都与 Kitware 合作,将 VTK 作为视觉化资料的基础处理工具 。VTK 还是美国国家卫生研究院规划的美国国家医学影像计算合作联盟(National Alliance for Medical Image Computing, NA - MIC)的关键计算工具 ,用于开发未来的医学计算工具。从最初的简单版本到如今功能丰富的成熟软件系统,VTK 在不断的发展和完善中,持续为可视化领域带来创新和变革。

许可协议

  VTK 采用 BSD 许可协议,这一许可协议具有高度的开放性和灵活性。它允许商业和非商业用户自由地使用、修改和分发 VTK,无需公开源代码。具体来说,如果满足以下条件,即可进行重新分发和使用:源代码的重新分发必须保留原始的版权声明、条件列表和免责声明;以二进制形式重新分发时,也需要在相关文档和材料中复制这些内容;并且未经事先书面许可,不得使用相关作者或贡献者的姓名来认可或推广从该软件衍生的产品 。这种宽松的许可协议极大地促进了 VTK 在全球范围内的广泛应用和发展,吸引了来自学术界、工业界等各个领域的开发者参与到 VTK 的生态系统中,共同推动其不断进步。

 

VTK核心特点

强大的数据处理能力

支持多种数据格式

  VTK 能够处理多种多样的数据格式,涵盖了科学和工程领域中常见的各种数据类型。对于结构化网格数据,如医学领域中常见的 CT/MRI 切片数据,VTK 可以高效地进行读取、存储和处理,准确地解析数据中的空间信息和属性信息。在非结构化网格数据方面,例如有限元分析结果数据,VTK 也能很好地支持。这种数据格式中节点和单元的连接关系较为复杂,但 VTK 凭借其强大的算法和数据结构,可以对其进行流畅的处理,包括数据的可视化、分析和进一步的转换。点云数据在三维重建、自动驾驶等领域应用广泛,VTK 同样具备处理点云数据的能力,能够对大量离散的点进行组织和处理,实现点云的可视化、滤波、配准等操作。多边形数据也是 VTK 支持的重要数据格式之一,在计算机图形学、工业设计等领域,多边形数据用于描述物体的表面形状,VTK 可以对多边形数据进行编辑、渲染等操作,为相关领域的应用提供支持 。

丰富的数据处理算法

  VTK 内置了丰富的数据处理算法,以满足不同用户在不同场景下对数据处理的需求。在数据滤波方面,提供了多种滤波算法,如高斯滤波、中值滤波等。高斯滤波可以有效地去除数据中的高斯噪声,使数据更加平滑,在医学影像处理中,常用于对 CT 图像进行预处理,提高图像的质量。中值滤波则对于去除椒盐噪声等脉冲噪声效果显著,在图像处理和信号处理中应用广泛。在数据分割方面,VTK 提供了多种分割算法,如区域生长算法、阈值分割算法等。区域生长算法可以根据数据的相似性,将具有相同或相似特征的区域合并起来,在医学影像中,可以用于提取感兴趣的器官或组织。阈值分割算法则是根据设定的阈值,将数据分为不同的类别,在材料科学中,可以用于分割不同材质的区域。数据配准也是 VTK 的重要功能之一,在多模态数据融合的场景中,如医学领域中将 CT 图像和 MRI 图像进行融合,VTK 的配准算法可以精确地对齐不同模态的数据,使医生能够综合分析不同来源的信息,提高诊断的准确性 。

多样化的可视化方式

基础可视化

  • 面绘制(表面渲染):面绘制是 VTK 中一种常用的可视化方式,它主要关注物体的表面信息。通过将数据中的表面几何信息提取出来,并应用光照模型、材质属性等,在屏幕上绘制出物体的表面。在三维模型的可视化中,面绘制可以清晰地展示模型的外形结构。对于一个机械零件的三维模型,面绘制能够准确地呈现零件的轮廓、表面细节等信息,帮助工程师进行设计评估和质量检测。在医学领域,面绘制可以用于重建人体器官的表面模型,如肝脏、心脏等器官的表面可视化,医生可以直观地观察器官的形状和大小,辅助诊断疾病 。
  • 体绘制(内部结构展示):体绘制与面绘制不同,它更加关注数据的内部信息。体绘制能够将三维数据场中的体素信息直接转换为可视化图像,不需要预先提取表面信息。在医学影像中,体绘制可以展示人体内部器官的三维结构和组织分布,对于诊断内部疾病具有重要意义。通过体绘制技术,可以清晰地看到肺部的内部结构,包括气管、支气管以及肺部组织的细节,帮助医生发现早期的肺部病变。在地质勘探中,体绘制可以用于展示地下地质结构,如地层分布、矿体位置等,为资源勘探提供有力支持 。
  • 点绘制(粒子系统):点绘制在 VTK 中用于处理由离散点组成的数据,如粒子系统。在模拟物理过程,如流体流动、分子运动等场景中,点绘制可以将每个粒子表示为一个点,并根据粒子的属性,如速度、温度等,对点进行颜色编码或大小缩放等操作,从而直观地展示粒子的分布和运动状态。在流体力学模拟中,通过点绘制可以清晰地看到流体中粒子的流动轨迹和速度分布,帮助研究人员理解流体的运动规律 。

高级可视化

  • 流场可视化(如流体运动轨迹):流场可视化是 VTK 高级可视化功能的重要体现,它主要用于展示流体的运动状态。通过流线、粒子轨迹等方式,VTK 可以直观地呈现流体的流动方向、速度分布等信息。在航空航天领域,流场可视化可以用于分析飞行器周围的气流分布,优化飞行器的外形设计,提高飞行性能。在水利工程中,流场可视化可以帮助工程师研究水流在河道、水坝等结构中的流动情况,为水利设施的设计和优化提供依据 。
  • 张量可视化(如医学中的扩散张量成像 DTI):张量可视化是 VTK 针对张量数据的可视化方法,在医学中的扩散张量成像(DTI)等领域有重要应用。DTI 数据用于描述水分子在组织中的扩散特性,通过 VTK 的张量可视化技术,可以将这些复杂的张量数据以直观的方式呈现出来,如使用椭球体来表示张量的方向和大小。医生可以通过观察张量可视化结果,了解大脑白质纤维的走向和完整性,辅助诊断神经系统疾病,如脑梗塞、脑肿瘤等 。
  • 等值面提取(如三维数据中的特定值区域):等值面提取是 VTK 从三维数据中提取具有特定值的表面的技术。在科学研究和工程应用中,常常需要关注数据中某个特定物理量的等值区域。在气象数据中,通过等值面提取可以找到温度、气压等气象要素的等值面,直观地展示气象场的分布特征。在材料科学中,等值面提取可以用于分析材料内部的应力、应变等值面,评估材料的性能和结构完整性 。

跨平台与多语言支持

支持的操作系统

  VTK 具有出色的跨平台特性,几乎可以在任何一个基于 Unix 的平台上运行,包括常见的 Linux 发行版,如 Ubuntu、CentOS 等,以及 macOS 系统。同时,VTK 也完全支持 Windows 操作系统,涵盖了 Windows 95/98/NT/2000/XP 以及后续的 Windows 版本。这种跨平台的兼容性使得不同操作系统的用户都能够方便地使用 VTK 进行可视化开发,无论是在科研机构中使用 Linux 集群进行大规模数据处理,还是在企业中使用 Windows 系统进行日常的工程设计和分析,VTK 都能提供一致的功能和性能 。

多语言绑定

  VTK 原生使用 C++ 编写,为了满足不同开发者的需求,它还提供了多种语言的绑定。其中,Python 绑定使得 Python 开发者能够轻松地使用 VTK 的强大功能。Python 语言简洁易用,拥有丰富的科学计算库,结合 VTK 的可视化能力,在数据科学、机器学习等领域有着广泛的应用。通过 Python 调用 VTK,可以快速地对数据进行可视化处理,为数据分析和模型评估提供直观的支持。Java 绑定则为 Java 开发者提供了使用 VTK 的途径,Java 的跨平台性和强大的企业级开发能力,与 VTK 的可视化功能相结合,在大型可视化应用系统的开发中具有优势。Tcl/Tk 绑定也为喜欢使用 Tcl 语言的开发者提供了选择,Tcl/Tk 在快速原型开发和脚本编程方面具有一定的优势,借助 VTK 的可视化功能,可以快速搭建可视化应用的原型 。

交互式操作

内置交互功能

  VTK 内置了丰富的交互式操作功能,方便用户与可视化结果进行交互。相机控制是其中的重要功能之一,用户可以通过鼠标和键盘操作,实现对相机视角的切换,如平移、旋转、缩放等。在观察一个复杂的三维模型时,用户可以通过相机控制功能,从不同的角度观察模型的细节,全面了解模型的结构。视角切换功能可以让用户在不同的预设视角之间快速切换,如正交视图、透视视图等,以满足不同场景下的观察需求。缩放功能则允许用户放大或缩小可视化场景,突出显示感兴趣的区域或查看整体概览。此外,VTK 还支持用户对模型进行旋转操作,通过鼠标拖动即可实现模型在三维空间中的自由旋转,从各个角度观察模型的形态 。

自定义交互逻辑

  除了内置的交互功能,VTK 还允许用户根据自己的需求自定义交互逻辑。用户可以通过编写代码,对鼠标和键盘事件进行响应,实现特定的交互操作。在一个地质数据可视化应用中,用户可以自定义鼠标右键点击事件,当用户右键点击某个区域时,弹出该区域的详细地质信息,如地层名称、岩石类型等。通过自定义交互逻辑,用户可以使可视化应用更加贴合实际需求,提高用户体验和工作效率 。

可扩展性

模块化设计

  VTK 采用模块化设计理念,整个系统由多个功能独立的模块组成。每个模块都专注于特定的功能领域,如数据处理、渲染、交互等。这种模块化设计使得 VTK 具有高度的可扩展性,用户可以根据自己的需求,方便地添加或替换特定的模块。如果用户需要使用一种新的数据处理算法,只需要开发一个新的数据处理模块,并将其集成到 VTK 系统中,而不需要对整个系统进行大规模的修改。同时,模块化设计也便于代码的维护和管理,不同模块的开发和维护可以由不同的团队或开发者进行,提高了开发效率 。

与其他库集成

  VTK 能够与其他多种库进行集成,进一步拓展其功能。与 Qt 库集成时,VTK 可以利用 Qt 强大的图形用户界面(GUI)开发能力,创建出更加美观和易用的可视化应用程序。Qt 提供了丰富的界面组件和布局管理功能,结合 VTK 的可视化功能,可以开发出专业级的可视化软件。在医学影像处理软件中,通过将 VTK 与 Qt 集成,医生可以在一个友好的界面中对医学影像进行可视化、分析和诊断。VTK 还可以与 ITK(Insight Toolkit)集成,ITK 专注于医学影像分割与配准等图像处理任务,而 VTK 擅长可视化,两者结合可以形成一个完整的医学影像处理工作流,从图像的预处理、分割到最终的可视化,为医学研究和临床应用提供全面的支持 。

 

VTK应用领域

医学影像

  在医学影像领域,VTK 发挥着至关重要的作用。医学影像数据如 CT、MRI、超声等,包含了人体内部丰富的结构和生理信息,但这些数据通常是复杂的三维数据集,需要有效的可视化工具来帮助医生进行解读和诊断 。

  • 三维重建与分析:VTK 能够将 CT、MRI 等二维切片数据进行三维重建,构建出人体器官和组织的三维模型。通过面绘制和体绘制技术,医生可以清晰地观察到器官的形态、大小和位置,以及内部组织的细节。对于脑部 MRI 数据,VTK 可以重建出大脑的三维模型,帮助医生观察脑部结构,发现肿瘤、血管病变等异常情况 。
  • 辅助疾病诊断:借助 VTK 的可视化功能,医生可以对医学影像进行多角度、多层次的观察和分析。通过交互式操作,如旋转、缩放、剖切等,医生能够更全面地了解病变部位的特征,提高疾病诊断的准确性。在诊断肺部疾病时,医生可以利用 VTK 对肺部 CT 图像进行可视化分析,观察肺部结节的形态、大小和密度变化,判断结节的良恶性 。
  • 手术规划:在手术规划方面,VTK 也具有重要应用价值。通过对患者的医学影像数据进行可视化处理,医生可以在虚拟环境中模拟手术过程,提前规划手术路径,评估手术风险。在进行脑部肿瘤切除手术前,医生可以利用 VTK 构建的大脑三维模型,规划最佳的手术入路,避免损伤重要的神经和血管组织 。

科学计算

  科学计算领域产生了大量的复杂数据,VTK 为这些数据的可视化提供了有效的解决方案,帮助科研人员更好地理解和分析数据背后的科学现象 。

  • 气象数据可视化:气象数据包含了大气温度、湿度、气压、风速等多种变量,数据量巨大且时空变化复杂。VTK 可以将这些气象数据进行可视化,通过等值面、流线、矢量场等可视化方式,展示气象要素的空间分布和时间演变。在研究台风路径时,VTK 可以通过流线和矢量场可视化台风的移动路径和风力分布,为气象预报和灾害预警提供支持 。
  • 地质数据可视化:在地质科学中,VTK 可用于可视化地层结构、地震数据、岩石属性等。通过体绘制技术,能够展示地下地质结构的三维分布,帮助地质学家分析地层的演化和矿产资源的分布规律。对于地震数据,VTK 可以将地震波的传播过程进行可视化,研究地震的成因和传播机制 。
  • 物理仿真可视化:在物理仿真中,如流体力学仿真、电磁学仿真等,VTK 能够将仿真结果进行可视化。对于流体力学仿真数据,VTK 可以通过流场可视化技术展示流体的流动状态、速度分布和压力变化,帮助研究人员优化设计,提高产品性能。在电磁学仿真中,VTK 可以可视化电磁场的分布和变化,为电子设备的设计和优化提供依据 。

工程仿真

  工程领域的仿真分析产生了大量的数据,VTK 在工程仿真数据的可视化和分析中具有广泛应用 。

  • 有限元分析结果可视化:在机械工程、土木工程等领域,有限元分析是常用的工程分析方法。VTK 可以将有限元分析得到的应力、应变、位移等结果数据进行可视化,通过彩色云图、等值线等方式直观地展示结构的受力状态和变形情况。在机械零件的强度分析中,VTK 可以将零件在不同载荷下的应力分布以彩色云图的形式展示出来,帮助工程师评估零件的强度和可靠性,优化设计方案 。
  • 流体动力学(CFD)数据可视化:在航空航天、汽车工程、能源等领域,CFD 仿真用于研究流体的流动特性。VTK 可以对 CFD 数据进行可视化,如通过流线、粒子轨迹等方式展示流体的流动路径,通过矢量场可视化展示流体的速度和压力分布。在汽车设计中,VTK 可以将汽车周围的气流分布进行可视化,帮助工程师优化汽车的外形设计,降低风阻,提高燃油经济性 。

计算机图形学

  在计算机图形学领域,VTK 为三维模型处理、虚拟现实(VR)/ 增强现实(AR)内容生成等提供了有力支持 。

  • 三维模型处理:VTK 可以对三维模型进行读取、编辑、渲染等操作。
 

基于windows上预编译vtk开发环境搭建

步骤一:下载vtk

  官网:https://vtk.org/
  在这里插入图片描述
  下载VTK:
  在这里插入图片描述

  在这里插入图片描述

  解压vtk:
  在这里插入图片描述

步骤二:CMake配置

  在这里插入图片描述

  出现了无法出现窗口启动的问题,搜索解决,是删除注册表相关的。
  在这里插入图片描述

  在这里插入图片描述

  开始配置:
  在这里插入图片描述

  有点漫长:
  在这里插入图片描述

  这里配置下install安装路径:
  在这里插入图片描述

步骤三:CMake配置支持Qt

  修改配置,需要支持Qt,这个需要单独勾选:
  在这里插入图片描述
  然后继续configure:
  在这里插入图片描述

  这样就好了。

步骤四:generate生成工程

  在这里插入图片描述

步骤五:VS2017编译

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  然后编译release:
  在这里插入图片描述

  编译算了下,i9-9900K十几分钟的样子:
  在这里插入图片描述

步骤六:安装install

  在这里插入图片描述

  在这里插入图片描述

步骤七:检查编译结果

  在这里插入图片描述

  编译出来示例,可以运行:
  在这里插入图片描述

  还有插件:
  在这里插入图片描述
  Install的:
  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  • 本文作者:WAP站长网
  • 本文链接: https://wapzz.net/post-27238.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
本站部分内容来源于网络转载,仅供学习交流使用。如涉及版权问题,请及时联系我们,我们将第一时间处理。
文章很赞!支持一下吧 还没有人为TA充电
为TA充电
还没有人为TA充电
0
  • 支付宝打赏
    支付宝扫一扫
  • 微信打赏
    微信扫一扫
感谢支持
文章很赞!支持一下吧
关于作者
2.7W+
9
1
2
WAP站长官方

Django模型迁移指南:从命令用法到最佳实践

上一篇

有限Abel群的结构(3)

下一篇
评论区
内容为空

这一切,似未曾拥有

  • 复制图片
按住ctrl可打开默认菜单