Study-VTK
详细介绍了如何从零基础开始学习VTK,实际工作中如何使用VTK
阿兵-AI医疗
这个作者很懒,什么都没留下…
展开
-
VTK图形处理之剪裁
剪裁 剪裁的操作基本上和剪切一样,需要使用一把“刀”(隐函数)并设置剪裁值。输入的数据集被分成了两部分:裁下的部分和裁掉的部分。默认只产生裁下的部分这个输出。示例演示CMakeLists.txt文件代码如下:CMAKE_MINIMUM_REQUIRED(VERSION 2.8)PROJECT(ClipExample)FIND_PACKAGE(VTK REQUIRED)INCLUDE(${VT原创 2017-09-24 17:40:14 · 3144 阅读 · 1 评论 -
VTK图形处理之颜色映射
颜色映射 颜色映射的操作对象是数据集中的标量属性。它是一种常用的 标量算法。它会根据数据集中各个部分不同的标量值,对各个部分上不同的颜色。与此相关的另一种上色方法是控制演员的颜色属性,但这样整个图形只有单一的颜色,这显然没有颜色映射方法灵活。 创建多边形数据集程序运行 结果显示的彩色立方体就用到了颜色映射。由于对 立方体的6个顶点设置了不同的标量值(点id),所以这6个点的颜色不同。至于立方原创 2017-09-24 16:20:36 · 7418 阅读 · 0 评论 -
VTK图形处理之剪切
剪切 与抽取轮廓类似,剪切(Cut)也是指获取数据集中的部分数据。不过剪切是从一个完全不同的角度来处理的。剪切可以控制数据获取的区域,而抽取轮廓做不到这一点。 剪切操作需要一把”刀“——隐函数,并且要指剪切的位置——剪切值。给定了这两个参数后,就确定了切面——隐函数对应的函数曲面。剪切的处理过程是首先将数据集中的点坐标带入隐函数中进行计算,然后将算出的函数值等于剪切值的部分(包括属性数据)取原创 2017-09-24 17:11:54 · 4705 阅读 · 2 评论 -
VTK之引用计数详解
内存管理 内存管理在大型的工程中是非常重要的内容,如果不能有效地管理内存,比如申请的内存没有及时释放,将严重影像到应用程序的执行效率,甚至可能带来不可预知的崩溃。C++语言中并没有提供高级的内存管理与垃圾回收机制,通常都是手工管理。这对于简单的程序而言可轻松完成,但在许多复杂情况下就会疲于应付。例如当一个内存对象(可以看作一个指针)被多个对象引用,删除任何一个对象,都可能 影像到其他对象,因此V原创 2017-07-16 21:57:28 · 958 阅读 · 0 评论 -
VTK之智能指针详解
智能指针则用来解决这个问题。使用智能指针,用户不必考虑何时进行内存释放,而是由智能指针进行控制。智能指针 VTK中的智能指针类为vtkSmartPointer,是一个模板类,继承自vtkSmartPointerSmart类。vtkSmartPointer类中定义一个vtkObjectBase类型的指针对象Object,用于存储智能指针中实际生成的对象。vtkSmartPointer<vtkLig原创 2017-07-16 22:04:30 · 5042 阅读 · 0 评论 -
VTK之类的实现
vtkObject类分析 vtkObjectBase主要实现引用计数,因此vtkObject及其子类也都继承了该特性。vtkObject中实现了在VTK中非常广泛使用的观察者/命令机制,能够方便地处理消息响应,例如处理鼠标消息、键盘消息、进度消息等,VTK中Widget中大量使用了该机制进行消息处理。vtkObject中定义了一个vtkSubjectHelper对象来管理观察者。vtkSubjec原创 2017-07-16 23:02:57 · 4883 阅读 · 3 评论 -
VTK之自定义Filter类
一个Filter类定义了RequestData()函数,当Filter调用Update()后,即可响应RequestData()函数。VTK管线机制 VTK中通过管线机制来实现组合各种算法处理数据。每一种算法是一个Filter,多个Filter连接子啊一起形成了VTK管线。每个Filter可以分为两个组成部分:一个是算法部分,继承自vtkAlgorithm,主要负责处理输入的数据和信息;另一个是原创 2017-07-23 12:47:30 · 3569 阅读 · 0 评论 -
VTK之基于Qt的VTK应用程序
友好的用户图形界面是应用程序必须的因素之一,对于VTK应用程序也是如此。VTK附带的程序示例大多数是基于控制台的,但是VTK也可以与很多流行的GUI开发工具整合。本文介绍如何把VTK(7.1.0)和GUI开发工具Qt(5.x)进行整合。VTK之基于Qt的VTK应用程序 Qt是跨平台的GUI开发工具,VTK也提供了大量的类支持Qt。VTK工程是用CMake进行管理的,而Qt自身有qma...原创 2017-07-16 18:23:39 · 18038 阅读 · 33 评论 -
VTK图像处理之访问图像像素值
图像像素值的访问与修改是最常用的一种操作。VTK提供了两种访问图像像素值的访问。一、直接访问 第一种方法是直接发访问vtkImageData的数据数组。vtkImageData提供了GetScalarPointer()函数获取数据数组指针,该函数有三种形式:virtual void* GetScalarPointer(int coordinates[3]);virtual...原创 2017-07-16 21:37:32 · 6707 阅读 · 3 评论 -
如何学习VTK
因工作需要,开始从零开始学习VTK。现在分享一下学习心得,仅针对刚刚开始学习VTK的人,避免像我一样走一些弯路。第一步:了解VTK 可以看水灵的视频(应该水灵上研究生的时候录制),跟着视频学习,保证又快又轻松。看完视频,能够自己建立工程,编写代码,对VTK有初步了解。在此感谢水灵,自行搜索Study_VTK_Together,输入:xfr7。第二步:熟悉VTK ...原创 2019-11-19 09:16:43 · 6897 阅读 · 33 评论 -
VTK交互之Widget
交互部件 VTK的交互除了提供各种交互样式,还提供了功能更为强大的,可以“看得见”的交互部件,即Widget。VTK的Widget类主要包括vtk3DWidget和vtkAbstractWidget两个父类,它们都派生自vtkInteractorObserver。其中vtk3DWidget主要在三维渲染场景中生成一个可以用于控制数据的可视化实体,比如点、曲线、平面、球体等;后者是VTK里实现“交互原创 2017-05-29 14:37:12 · 3843 阅读 · 1 评论 -
VTK交互之交互样式
VTK交互样式 类vtkRenderWindowInteractor即渲染窗口交互器,提供了一种平台独立的响应鼠标/按键/时钟事件的交互机制,可将平台相关的鼠标/按键/时钟等信息路由至vtkInteractorObserver或其子类。 vtkRenderWindowInteractor作为一个基类,其具体的功能是由平台相关的子类(如vtkWin32RenderWindowIn原创 2019-10-15 22:29:37 · 3609 阅读 · 0 评论 -
VTK交互之拾取
选择拾取 选择拾取是人机交互过程的一个重要功能。VTK中定义了多个拾取功能的类,所有拾取类都继承自vtkAbstractPicker类,继承关系如下:1. vtkAbstractPicker 该类是一个抽象基类,为它的具体的子类定义了最基本的API,最基本的功能是返回拾取位置的x-y-z 世界坐标系统的坐标值(pick自身是在屏幕坐标中进行定义的) 。 类定义了一个纯虚函数Pick(),原创 2017-05-29 15:22:37 · 12204 阅读 · 3 评论 -
VTK概述
本文介绍什么是VTK和VTK的学习资源。#1、VTK是什么 可视化工具包(Visualization Toolkit, VTK)是一个开源、跨平台、可自由获取、支持并行处理的图形应用函数库。 VTK包含一个C++类库,众多的编程语言接口,包括Tcl/Tk、Java、Python,在三维函数库OpnGL的基础上采用面向对象的设计方法发展起来的,将可视化开发过程中会经常遇到的细节屏原创 2017-04-02 15:03:14 · 9056 阅读 · 1 评论 -
VTK基本数据结构之数据对象和数据集
针对可视化领域的特点,VTK定义了种类丰富的数据结构。我们必须了解基本数据结构。 1、数据对象和数据集 在VTK中,数据一般以数据对象(Data Object, 类vtkDataObject)的形式表现,这是VTK里可视化数据最常用的表达形式。数据对象是数据的集合,数据对象表现的数据是可以被可视化管线处理的数据,只有当数据对象被组织成一种结构后,才能被VTK提供的可视化算法所处理。VTK原创 2017-05-21 22:35:38 · 3848 阅读 · 0 评论 -
VTK基本数据结构之数据的存储和表达
vtkDataArray VTK中的内存分配采用连续内存,可以快速地创建、删除和遍历,称之为数据数组(Data Array),用类vtkDataArray来实现。数组数据的访问是基于索引的,与C++一样,从零开始计数。以vtkFloatArray类来说明如何在VTK中实现连续内存的数据数组。 如下图,变量Array是一个指向浮点型数组的指针,数组的长度由变量Size指定,由于数组的长度是动态原创 2017-05-21 22:56:27 · 3552 阅读 · 0 评论 -
VTK算法
VTK算法的本质原创 2016-09-06 23:05:29 · 2138 阅读 · 15 评论 -
VTK的编译安装(VS2013)
本文介绍用CMake和VS2013来编译安装VTK。1、准备工作安装VS2013下载CMake3.8.0(www.cmake.com)下载VTK相关包(www.vtk.org)vtk-7.1.0.zip (源码包,包含了VTK所有的核心源代码以及相关的示例程序。)vtkdata-7.1.0.zip(数据包,包含了VTK自带的示例或测试程序运行时需要用到的数据。)2、建立文件夹建立根文件夹,原创 2017-04-02 15:28:24 · 5090 阅读 · 3 评论 -
VTK交互之vtkCommand
观察者/命令模式 VTK的交互除了可以监听来自鼠标、键盘等外部设备的消息,还可以在渲染场景中生成功能各异的交互部件(Widget),用于控制可化过程的参数,达到用户渲染要求。 在VTK中要实现与数据的交互,可以基于观察者/命令模式。可以通过两种方法来实现该模式:一种是通过定义回调函数;另外一种是通过从vtkCommand类派生子类。二者的实现过程基本类似,都是通过AddObserver监听原创 2017-05-05 22:16:09 · 8226 阅读 · 0 评论 -
VTK编译的一些报错
1、error MSB6006:”cmd.exe” exited with code 1.错误描述如下图所示:在VS2013 Output 发现报错原因:28> CMake Error at F:/vtk7.0/VTKsrc/CMake/ExternalData.cmake:1005 (message): 28> Object MD5=b7d4fa1943ca47ef537e6847886原创 2017-04-02 15:50:13 · 5059 阅读 · 6 评论 -
CMake创建VTK程序
如何在VS2013中创建VTK程序a、直接创建 利用CMake中CMAKE_INSTALL_PREFIX选项所指定的目录里的文件(头文件、库文件等)直接用VS2013创建。需要进行下面设置 Project->***Properties…->C/C++->General->Additional Include Directories Project->***Prope原创 2017-04-02 19:51:49 · 5009 阅读 · 0 评论 -
VTK基本概念之主要对象
本文以一个显示柱体的vtk程序介绍vtk编程中的主要对象。显示柱体的VTK程序CMakeLists.txt文件代码如下:CMAKE_MINIMUM_REQUIRED(VERSION 2.8)PROJECT(RenderCylinder)FIND_PACKAGE(VTK REQUIRED)INCLUDE(${VTK_USE_FILE})ADD_EXECUTABLE(RenderCylinde原创 2017-04-02 22:14:20 · 1799 阅读 · 1 评论 -
VTK纹理映射之vtkTransformTextureCoods
本文介绍vtkTransformTextureCoods类。纹理坐标系 在《VTK纹理映射》文中,我们其实用的都是2D纹理,使用一张图片。它的坐标系是(s,t),即前面提到的u-v。也可以有3D纹理,它被认为是多个2D Texture。,坐标系s-t-r。vtkTransformTextureCoods vtkTransformTextureCoods类用来变换纹理坐标的,包括缩放、旋转和平移原创 2017-04-03 14:28:20 · 4369 阅读 · 10 评论 -
VTK纹理映射
本文介绍VTK中纹理映射。纹理映射 纹理映射是创建逼真效果的强大的图形工具,其原理是渲染时把二维的图像“贴”到物体的表面啥昂,根据二维图像渲染出丰富多彩的效果,所有也叫纹理贴图。纹理映射需要三个要素:带贴图的表面、纹理映射以及纹理坐标。其中纹理映射在VTK中就是vtkImageData的数据集,而纹理坐标则用于控制纹理图在表面的位置,作为被贴对象数据的属性。vtkSmartPointer<vtk原创 2017-04-03 14:43:02 · 4973 阅读 · 3 评论 -
VTK数据的读写
本文介绍VTK中数据模型的读写。模型数据获取 VTK应用程序所需的数据可以通过两种途径获取:第一种是生成模型,然后处理这些模型数据(如由类vtkCylinderSource生成的多边形数据);第二种是读取相关的数据文件,然后处理这些读入的数据(如vtkBMPReader读取的BMP图像)。Reader与Writer类 VTK针对不同的数据类型,提供了不同的读写类。1、数据读写VTK的Reade原创 2017-04-03 15:31:30 · 5030 阅读 · 1 评论 -
VTK医疗方面的基本概念
本文介绍使用VTK医疗方面的一些基本概念。1、窗宽窗位 窗宽是图像显示的灰度范围。一般显示器的灰度范围为256级,而医学图像的灰度范围则远远大于该范围,因此通过显示器显示时不能显示所有灰度级,需要使用窗宽来定义欲显示的灰度范围。当灰度值高于该范围的最大值时,均以白影显示;当低于该范围时,均以黑色显示。 窗位是窗宽的中心位置。同样的窗宽,会根据窗位的位置变化来显示不同的组织结构。原创 2017-04-03 16:32:43 · 1350 阅读 · 0 评论 -
VTK图像处理之图像数据结构
本文介绍VTK图像数据结构。VTK图像数据结构 数字图像文件内容由两个部分组成:图像头信息和数据。图像头信息定义了图像的基本信息,主要包括原点位置(Origin)、像素间隔(Space)和维数(Dimension)。通过这三个参数即可以确定图像空间位置和大小。图像可以看作空间中的一个规则的网格,网格中的每个最小单元称为像素(二维)或体素(三维),网格在每个方向上的像素或体素个数即为图像在该方向的原创 2017-04-03 20:22:21 · 1951 阅读 · 0 评论 -
VTK图像处理之vtkImageMapToColors
图像彩色映射 图像彩色映射的原理是:先生成一个颜色查询表,然后根据图像像素的一个标量值在颜色查询表中查找对应的颜色,并用新颜色值替代原来的像素值。VTK中以vtkImageMapToColors实现图像彩色映射,以vtkLookUpTable生成颜色查找表。CMakeLists.txt文件代码如下:CMAKE_MINIMUM_REQUIRED(VERSION 2.8)PROJECT(Gray2C原创 2017-04-03 21:31:18 · 4526 阅读 · 0 评论 -
VTk显示样式设置
显示样式 在vtk中,显示样式是通过vtkProperty来控制的。这里介绍三种基本的属性设置方式:点方式,网格方式和面方式。其设置方法为actor->GetProperty()->SetRepresentationToPoints()actor->GetProperty()->SetRepresentationToWireframe()actor->GetProperty()->SetRe原创 2017-04-04 11:15:16 · 3672 阅读 · 1 评论 -
VTK图形处理之vtkTriangleFilter
本文介绍vtkTriangleFilter。 vtkTriangleFilter可以实现多边形网格数据向三角形网格数据的转换。为了方便直观看出转换前后的变化,我们用网格方式显示数据模型。示例说明CMakeLists.txt文件代码如下:CMAKE_MINIMUM_REQUIRED(VERSION 2.6)PROJECT( vtkTriangleFilter ) FIND_PACKAGE(原创 2017-04-04 11:27:02 · 6072 阅读 · 0 评论 -
图形处理之封闭性检测
本文介绍VTK中封闭性检测。基本概念 介绍封闭性检测之前,介绍一些基本概念。如果一个网格模型中,一条边只被一个单元包含,那么这条边就是边界边,而边界上的点则为边界点。如果一个模型中含有边界边,则说明该模型不是封闭的,否则是封闭的。vtkFeatureEdgesvtkFeatureEdges是一个非常重要的类,该类能够提取多边形网格模型中四种类型的边。 1. 边界边。 2. 非流形边。被原创 2017-04-04 15:11:02 · 2716 阅读 · 0 评论 -
体绘制之体绘制管线
体绘制体绘制,又称作三维重建,是一种直接利用体数据来生成二维图像的绘制技术。与面绘制不同,体绘制技术不需要提取体数据内部的等值面,它是一个对三维体数据进行采样和合成的过程。示例说明CMakeLists.txt文件代码如下:CMAKE_MINIMUM_REQUIRED(VERSION 2.6)PROJECT(VolumeRendering)FIND_PACKAGE(VTK REQUIRED)IN原创 2017-04-04 16:28:02 · 2356 阅读 · 2 评论 -
图形处理之抽取轮廓
等值面(线) 等值面(线)提取是一种常用的可视化技术。在医学图像处理中,由于CT、MRI等图像分辨率越来越高,虽然体绘制技术可以清晰得对数据内部结构进行可视化,但是其计算量和效率却制约了其使用。此时可以通过等值面提取技术,仅提取感兴趣的一个或多个组织轮廓,并生成网格模型以供后续的处理和显示。 vtk中的等值面提取算法多基于Marching Cubes算法来实现。vtkContourFilte原创 2017-04-04 17:11:41 · 7200 阅读 · 4 评论 -
VTK图像处理之vtkImageReslice
三维图像切面提取切片(Slice)或切面是三维图像比较常用的概念,尤其在医学图像中。通过提取切面可以方便地浏览和分析图像内部组织结构。VTK中vtkImageReSlice类可以实现图像切面的提取。在实际开发中,四视图中冠状视面、矢状面和横断面(显示过图像内部一点且平行于XY、YZ、XZ平面的平面),需要用到此类。示例说明CMakeLists.txt文件代码如下:CMAKE_MINIMUM_REQU原创 2017-04-04 20:00:25 · 13508 阅读 · 12 评论 -
VTK报错Error: no override found for
报错描述:用VS2013直接建立一个Qt和VTK的工程,程序 和配置都没有问题,但是编译后一运行就出如下图的报错。Error: no override found for “xxx”,xxx表示可能是vtk的任意一个类。解决方法:在包含主函数的文件里,加入#include "vtkAutoInit.h"VTK_MODULE_INIT(vtkRenderingOpenGL2);分析:如果你用CM原创 2017-04-04 20:33:04 · 1538 阅读 · 1 评论 -
VTK基本概念之VTK智能指针
1、概念 如果很多对象有相同的值,在程序里没有必要将这个值存储多次。更好的办法是让所有的对象共享这个值。这么做不但节省内存,而且可以是程序运行得更快,因为不需要构造和析构这个值得副本。引用计数就是这样的一个技巧,它允许多个有相同值的对象共享这个值。 引用计数是个简单的垃圾回收体系,只要其他对象引用某对象(记为对象O),对象O就会增加一个引用计数,当最后引用对象O的对象移除,O对象就会自动析构原创 2017-04-08 20:05:51 · 1496 阅读 · 0 评论 -
VTK基本概念之灯光
灯光 vtkLight可以分为位置灯光(Position Light)和方向灯光(Direction Light)。位置灯光是光源位置在渲染场景中的某个位置,可以指定灯光的衰减值、锥角等;方向灯光即光源在无穷远,可以认为光线是平行的,比如自然界中的太阳光。光源的位置和焦点的连线定义为光线的方向,默认的vtkLight为方向灯光。 Render里可以有多个灯光,用renderer->AddLi原创 2017-04-08 20:29:30 · 1463 阅读 · 0 评论 -
VTK基本概念之坐标系统
坐标系统 在实际开发中,必须理解不同坐标系统之间的关系。计算机图形学里常用的四种坐标系:Model坐标系、Word坐标系、View坐标系和Display坐标系统,转换关系如下图所示。 VTK支持多种不同类型的坐标系统。类vtkCoordinate可以在不同的坐标系统进行变换,VTK支持的坐标系统如下:不同坐标系介绍Model坐标系统 Model坐标系统是定义模型时所用采用的坐标系统,通原创 2017-04-08 20:48:42 · 9694 阅读 · 0 评论 -
VTK基本概念之光照
光照 物体的光照属性主要包括环境光系数、漫反射光系数、镜反射光系数和镜面指数四个,分别用方法SetAmbient(),SetDiffuse(),SetSpecular()和SetSpecularPower()进行设置。 - 环境光系数表示各种光线照射到物体材质上,经过很多次发射后最终在环境中的光线强度。 - 漫反射光系数表示光线照射到物体材质上,经过漫反射后形成的光线强度。 -原创 2017-04-22 23:09:58 · 4581 阅读 · 0 评论 -
图形处理之纹理映射自定义Filter
自定义纹理映射Filter 利用VTK之自定义Filter类(https://blog.csdn.net/webzhuce/article/details/75905519)来写一个自己定义的纹理映射Filter。仿照vtkTextureMapToCylinder类,将 s设为0,t根据点投影到设置的vector上的位置求得,即(projectstion - minprojecttion) ...原创 2019-09-02 10:08:44 · 399 阅读 · 0 评论