VTK 三维数据渲染进阶
文章平均质量分 89
VTK是一个高级接口,提供了强大的渲染和可视化能力。
沈子恒
计算机视觉 自然语言处理 推荐系统 架构设计
展开
-
VtkCamera使用原理及小结
观众的眼睛就好比三维渲染场景中的相机,VTK则是用vtkCamera类来表示三维渲染场景中的相机。vtkCamera负责把三维场景投影到二维平面,如屏幕、图像等。1. Vtkcamera原理从图可以看出与相机投影相关的因素主要有:相机位置:即相机所在的位置,用方法vtkCamera::SetPosition()设置。相机焦点:用方法vtkCamera::Se原创 2016-10-09 18:48:53 · 11302 阅读 · 3 评论 -
VTK修炼之道1_初识VTK
1.VTK是什么?Visualization ToolKit3D计算机图形学、图象处理及可视化工具包VTK使用C++、面向对象技术开发;基于OpenGL,封装了OpenGL中的功能,屏蔽细节、便于交互、易于使用提供多种语言接口C++ 、Java 、Tcl、 Python 等;可在Windows 98/NT, SGI, Linux, Sun, HP等系统编译原创 2016-11-03 15:27:50 · 16376 阅读 · 5 评论 -
VTK修炼之道2_VTK体系结构1
1.OverView综述The Visualization Toolkit consists of two basic subsystems: a compiled C++ class library(一个已经编译好的C++类库)and an “interpreted” wrapper layer(一个用于解释的语言层) that lets you manipulate theco原创 2016-11-03 21:28:29 · 7521 阅读 · 1 评论 -
VTK修炼之道3_VTK体系结构2
上一篇博客主要介绍了VTK的构架以及Render Engine。接触过VTK的同学都知道,VTK主要有Pipeline和Render Engine两部分构成,这里详细介绍了Pipeline部分内容。1.前言The visualization pipeline in VTK can be used to read or create data, analyze and creat原创 2016-11-03 22:31:40 · 4790 阅读 · 0 评论 -
VTK修炼之道4_Win32控制台项目
1.类的定义myVTKapp.h#include "windows.h"#include "vtkConeSource.h"#include "vtkPolyDataMapper.h"#include "vtkRenderWindow.h"#include "vtkRenderWindowInteractor.h"#include "vtkRenderer.h"static原创 2016-11-08 16:59:04 · 3308 阅读 · 1 评论 -
VTK修炼之道5_Procedural Source Object
1.编写的程序#include VTK_MODULE_INIT(vtkRenderingOpenGL);///////////////////////////////////////#include "vtkCylinderSource.h"#include "vtkPolyDataMapper.h"#include "vtkActor.h"#include "vtkPro原创 2016-11-08 22:43:46 · 2609 阅读 · 2 评论 -
VTK修炼之道6_仔细分析一个复杂程序
1.程序代码#include VTK_MODULE_INIT(vtkRenderingOpenGL);/////////////////////////////////////#include #include #include #include #include #include #include #include int main(){ //构造数据原创 2016-11-16 17:28:56 · 5258 阅读 · 0 评论 -
VTK修炼之道7_三维场景基本要素:光照
1.VTK中的光照长得什么样?剧场里有各式各样的灯光,三维渲染场景中也一样,可以有多个光照存在。光照和相机是三维渲染场景必备的因素,如果没有指定,vtkRenderer会自动地创建默认的光照和相机。VTK里用类vtkLight来表示渲染场景中的光照。与现实中的灯光类似,VTK中的vtkLight实例也可以打开、关闭,设置光照的颜色,照射位置(即焦点),光照所在的位置,强度等等。vt原创 2016-11-16 20:49:11 · 5320 阅读 · 0 评论 -
VTK修炼之道8_三维场景基本要素:相机
1.VTK中相机原理及控制属性观众的眼睛就好比三维渲染场景中的相机,VTK则是用vtkCamera类来表示三维渲染场景中的相机。vtkCamera负责把三维场景投影到二维平面,如屏幕、图像等。下图为相机投影示意图:从上图可以看出与相机投影相关的因素主要有:相机位置:即相机所在的位置,用方法vtkCamera::SetPosition()设置。相机焦点:用方法vt原创 2016-11-17 10:41:58 · 7252 阅读 · 2 评论 -
VTK修炼之道9:坐标系统及空间变换(窗口-视图分割)
1.坐标系统计算机图形学里常用的坐标系统主要有四种,分别是:Model坐标系统、World坐标系统、View坐标系统和Display坐标系统,以及两种表示坐标点的方式:以屏幕像素值为单位和归一化坐标值(各坐标轴取值都为[-1, 1])。Model坐标系统是定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。例如,我们要定义一个表示球体的Actor,一般的做法是将该球体定义在一个柱原创 2016-11-25 22:02:14 · 6830 阅读 · 3 评论 -
VTK修炼之道10:可视化管道的连接与执行
1.可视化管道综述vtkProp; vtkAbstractMapper;vtkProperty; vtkCamera; vtkLight; vtkRenderer; vtkRenderWindow;vtkRenderWindowInteractor; vtkTransform; vtkLookupTable ……我们发现,这些类都是与数据显示或者原创 2017-01-11 22:29:17 · 5226 阅读 · 3 评论 -
VTK修炼之道11:基本数据结构_数据对象&数据集
1.前言前面学习了VTK的一个重要概念——可视化管线,了解了VTK数据的流动过程。好比我们做一道菜,在做每一道菜之前,首先要掌握这道菜的做法,什么时候放盐什么时候放酱油等调料,除了需要弄清楚做每一道菜的流程,还需要了解所做的每一道菜的原料,比如有些原料是要蒸出来才比较好吃,有些则可能会用炖的方法才比较可口,只有掌握做菜的流程以及了解菜的原料的特点,最后做出来的菜才可口美味。如果说VTK原创 2017-01-12 23:14:01 · 2977 阅读 · 1 评论 -
VTK修炼之道12:基本数据结构_如何把几何结构&拓扑结构加入到数据集
1. 无拓扑结构只有几何结构,没有拓扑结构的vtkDataSet#include VTK_MODULE_INIT(vtkRenderingOpenGL); #include #include #include #include int main(){ //创建几何数据,没有拓扑数据 vtkSmartPointer points = vtkSmartPo原创 2017-01-12 23:40:20 · 4124 阅读 · 1 评论 -
VTK修炼之道13:数据读写_图像数据的读写
1.前言VTK应用程序所需的数据可以通过两种途径获取: 第一种是生成模型 ;第二种是从外部存储介质里导入相关的数据文件,(如vtkBMPReader读取 BMP图像) 。VTK 也可以将程序中处理完成的数据写入单个文件中, 或者将所渲染的场景导出。从可视化管线的角度来看,一般以数据的读取 (或由模型创建数据)开始,而以数据的写盘操作(或 Mapper)结束。前面我们已经接触到了原创 2017-01-15 12:19:53 · 6422 阅读 · 1 评论 -
VTK修炼之道14:图像处理_创建
1.引言:图像数据结构数字图像文件内容由两个部分组成:图像头信息和数据。图像头信息定义了图像的基本信息,主要包括起点位置(Origin),像素间隔(space)和维数(dimension)。通过这三个参数即可以决定图像空间位置和规模。图像可以看做是空间中的一个规则网格,网格中的每个最小单元称之为一个像素(二维)或者体素(三维),这样网格在每个方向上的像素或者体素个数即为图像在该方向的维原创 2017-01-15 19:53:02 · 4597 阅读 · 0 评论 -
VTK修炼之道15:图像处理_显示(vtkImageViewer2 & vtkImageActor)
1.vtkImageViewer2用于图像显示实例分析在VTK早期版本中,提供了vtkImageViewer类来显示图像。随着版本的发展,目前vtkImageViewer2代替了vtkImageViewer进行图像显示。vtkImageViewer2中封装了VTK图像显示的管线,包括vtkActor,vtkRender,vtkRenderWindow,vtkInteractorStyp原创 2017-01-15 23:56:39 · 16534 阅读 · 5 评论 -
VTK修炼之道16:图像处理_窗口分割和图像融合(Viewport&vtkImageBlend)
1.前言前面演示的例子都是在一个窗口中显示一个图像。但是在常见的图像处理软件中,经常会遇到在一个窗口中显示多个图像,这就会用到图像融合技术。图像融合利用图像的alpha通道和不透明度来实现。VTK中vtkImageBlend实现图像的融合。vtkImageBlend可以接收多个图像输入,输出为融合图像。输出图像的像素间隔、原点、范围(extent)以及像素组分个数与第一个图像一致。原创 2017-01-16 15:45:14 · 5051 阅读 · 1 评论 -
VTK修炼之道17:图像基本操作_图像信息的访问与修改(vtkImageData)
1.利用vtkImageData实现图像信息的访问与修改vtkImageData中提供了多个函数用于访问或者获取图像的基本信息,这些函数通常使用Set或者Get加上相应的信息名的形式,例如获取图像维数的方法定义为GetDimensions()。2.实验程序及运行结果#include VTK_MODULE_INIT(vtkRenderingOpenGL);#incl原创 2017-01-21 14:52:45 · 3487 阅读 · 2 评论 -
VTK修炼之道18:图像基本操作_图像信息的访问与修改(vtkImageChangeInformation)
1.类vtkImageChengeInformation用于图像信息修改vtkImageData中提供了多个Set函数用于设置图像的基本信息。当对一个管线的输出修改图像信息后,如果管线重新Update,那么这些修改都会恢复回原来的值。而vtkChangeImageInformation可以作为管线中的一个filter来修改图像信息。利用这个filter可以修改图像的原点,像素间隔以及范原创 2017-01-21 18:17:54 · 3455 阅读 · 1 评论 -
VTK修炼之道19:图像基本操作_图像像素值的访问与修改
1.直接访问图像像素(索引法)#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #include #include #include #include int main(){ vtkSmartPointer reader = vtkSmartPointer::New();原创 2017-01-21 21:10:33 · 4505 阅读 · 0 评论 -
VTK修炼之道20:图像基本操作_图像类型转换
1.vtkImageCast图像数据类型转换在数字图像处理中会被频繁地用到。一些常用到的图像算子(例如梯度算子)在计算时出于精度的考虑,会将结果存储为float或者double类型。但是在图像显示时,一般需要图像为unsigned char类型。VTK中最常用到的是VTKImageCast类型。其使用方法如下:vtkSmartPointer imgCast =vtkSmart原创 2017-01-21 23:31:35 · 4861 阅读 · 2 评论 -
VTK修炼之道21:图像基本操作_彩色图像生成灰度图像
1.灰度图像映射vtkImageLuminance负责将一个RGB彩色图像转换为一个单组分的灰度图像。映射公式如下:luminance = 0.3*R + 0.59*G + 0.11*B该公式中,R为输入图像的第一分量(红色),G为第二分量(绿色),B为第三分量(蓝色)。这个计算结果计算一个RGB颜色的亮度。该类的使用也比较简单,用户无须设置参数,代码如下:#inclu原创 2017-01-23 20:34:44 · 2768 阅读 · 0 评论 -
VTK修炼之道22:图像基本操作_彩色图像成分提取
1.彩色图像RGB成分提取VTK中利用vtkImageExtractComponents可以方便的提取出彩色图像的各个颜色分量,该类的使用比较简单,只需要设置要提取的分量序号即可。下面代码说明了怎样提取彩色图像的某个颜色分量。#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #原创 2017-01-23 21:39:15 · 1784 阅读 · 0 评论 -
VTK修炼之道23:图像基本操作_灰度图像映射成伪彩色图像(查表法)
1.查表法伪彩图映射图像彩色映射的原理是首先生成一个颜色查找表,然后根据图像的一个标量值向颜色查找表中查找对应的颜色,并用新颜色值替代原来的像素值。VTK中vtkImageMapToColors负责图像彩色映射,vtkLookUpTable负责生成颜色查找表。下面代码说明了怎样进行彩色映射:#include VTK_MODULE_INIT(vtkRenderingOpenGL原创 2017-01-23 22:43:35 · 3917 阅读 · 0 评论 -
VTK修炼之道24:图像基本操作_单颜色通道图像合成彩色
1.三张灰度图像合成彩色图我们可以提取彩色的图像的各个颜色分量,那么同样也可以将灰度图像合并成为一个彩色图像。VTK中提供vtkImageAppendComponents类来合成彩色图像,其输入需要提供三个灰度图像。下面实例:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #includ原创 2017-01-23 23:50:44 · 2616 阅读 · 1 评论 -
VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)
1.提取感兴趣区域感兴趣区域(Volum of Interest,VOI)是指图像内部的一个子区域。在VTK中vtkExtractVOI类实现由用户指定的区域范围提取图像的子图像。该Filter的输入和输出都是一个vtkImageData,因此其结果可以直接作为图像保存。其示例代码如下所示:#include VTK_MODULE_INIT(vtkRenderingOpenGL原创 2017-01-24 09:58:22 · 3240 阅读 · 0 评论 -
VTK修炼之道26:图像基本操作_三维图像切片提取
1.三维图像切片提取切片是指三维图像中的一个切面对应的图像。切面可以是过图像内部一点且平行于XY、YZ、XZ平面的平面,也可以是任意的过三维图像内部一点任意方向的平面。通过提取切片可以方便的浏览和分析图像内部组织结构,是医学图像浏览软件中的一个重要的功能。在VTK中vtkImageReslice类实现图像切片提取功能。下面是切片提取的代码:#include VTK_MODUL原创 2017-01-24 14:22:14 · 18336 阅读 · 24 评论 -
VTK修炼之道27:图像基本操作_三维图像切片交互提取(回调函数、观察者-命令模式)
1.鼠标滑动提取三维图像切片学习三维图像切面的提取后,我们可以实现一个稍微复杂的程序——通过滑动鼠标来切换三维图像切片,这也是医学图像处理软件中一个很基本的功能。实现该功能难点是怎样在VTK中控制鼠标来实时提取图像切片。我们采用观察者/命令(Observer/Command)模式机制来实现。VTK中鼠标消息是在交互类型对象(interactorstyle)中响应,因此通过为交互类型原创 2017-01-24 23:29:35 · 7725 阅读 · 12 评论 -
VTK修炼之道28:图像统计_灰度直方图计算
1.灰度图像直方图直方图统计是图像处理中的一个非常重要的操作。VTK中实现直方图统计功能的filter是vtkImageAccumulate。其将每个组分的数值范围划分为离散的间隔,然后统计每个灰度间隔上的像素数目。vtkImageAccumulate输入和输出都是vtkImageData类型,因此直方图也可以看做是一幅图像;对于输入图像的像素数据类型可以是任意的,但是最大支持3个组分原创 2017-01-25 09:46:26 · 6677 阅读 · 8 评论 -
VTK修炼之道29:图像统计_彩色直方图计算
1.彩色图像直方图彩色图像由于内部有三个通道,不能直接计算直方图,需要提取RGB三个通道数据,分别计算直方图。每个通道计算直方图的方法与灰度图像直方图计算方法一致。实例代码如下:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #include #include #in原创 2017-01-25 11:02:36 · 2594 阅读 · 2 评论 -
VTK修炼之道30:图像重采样_降采样和升采样技术
1.VTK中的图像重采样实现图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像。重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图像二维连续函数,再按新的像元间距和像元位置进行采样。其数学过程是根据重建的连续函数(曲面),用周围若干像元点的值估计或内插出新采样点的值。图像重采样在图像处理中应用非常广泛,如SIF原创 2017-01-26 18:50:19 · 5733 阅读 · 0 评论 -
VTK修炼之道31:图像二值化_阈值法
1.阈值法实现图像二值化操作二值图像和label图像是图像分割中经常用到的两种图像。二值图像的每个像素只有两种可能的取值,例如0或者255。通常0代表图像的背景,而255代码图像前景。图像二值化是最简单的图像分割模型。设置一个灰度阈值,将图像中阈值以下的像素值设置为背景,阈值以上的像素值设置为前景,即可得当一副二值图像。在VTK中可以通过vtkImageThreshold类实现原创 2017-01-26 19:55:20 · 4343 阅读 · 0 评论 -
VTK修炼之道32:边缘检测_梯度算子
1.梯度算子提取图像边缘图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法,如分水岭算法,通常是分割原图的梯度图像,梯度实际上也是反应的图像边缘信息。图像边缘一般常用图像一阶导数和二阶导数来检测。梯度算子对应于图像一阶导数。图像一阶导数计算一般是通过差分运算来近似的。VTK中可以使用vtkImageGradient计算图像梯度。注意图像梯度是一个向量,具有方原创 2017-01-26 22:16:27 · 3236 阅读 · 0 评论 -
VTK修炼之道33:边缘检测_Sobel算子
1.Sobel算子用于提取图像边缘Sobel算子也是一种常用的梯度算子。Sobel算子计算稍微复杂,它采用3x3的模板。计算时模板在图像上移动,并在每个位置上计算对应中心像素的梯度值。VTK中vtkSobel2D计算图像的sobel算子,使用代码如下:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #i原创 2017-01-26 23:14:50 · 2582 阅读 · 0 评论 -
VTK修炼之道34:边缘检测_Canny算子
1.Canny算子Canny算子是John Canny于20世纪80年代提出的一种多级边缘检测算法。John Canny研究了最优边缘的特性,即检测到的边缘要尽可能跟实际的边缘接近并尽可能的多,同时,要尽量降低噪声对边缘检测的干扰。其计算步骤如下1)对源图像进行高斯平滑以消除图像中噪声2)采用差分法近似计算图像每一个像素的梯度,并计算梯度的模值和方向3)对梯度进行"非极大抑制"原创 2017-01-28 22:30:14 · 3233 阅读 · 1 评论 -
VTK修炼之道35:边缘检测_Laplace算子
1.拉普拉斯算子拉普拉斯算子是一个二阶边缘算子,即梯度的散度。拉普拉斯算子的实现也是通过模板实现。常用的拉普拉斯模板定义如下:拉普拉斯算子计算图像的二阶导数,对于图像噪声比较敏感。拉普拉斯算子的结果为标量,表示边缘的宽度。但是它常产生双像素宽边缘,而且不能提供方向信息,因此较少直接用于边缘检测。在VTK中由vtkImageLaplacian实现。#include原创 2017-01-28 22:45:20 · 2540 阅读 · 1 评论 -
VTK修炼之道36:图像平滑_均值滤波器
1.图像平滑图像平滑常用于图像的预处理中,如计算梯度时先对图像进行平滑处理,可以减少噪声对梯度的影响。图像平滑一般是通过模板卷积运算实现。模板可以看做是一个大小为nxn的小图像,例如3x3,5x5等等,模板的每个像素都对应一个系数值。模板卷积运算的过程是首先将模板中心依次与图像每个像素重合,通过模板各个系数与图像对应像素相乘来计算模板对应像素的加权平均值,最后将运算结果赋给图像中模板中原创 2017-01-28 23:14:34 · 2102 阅读 · 0 评论 -
VTK修炼之道37:图像平滑_高斯滤波器
1.高斯滤波高斯平滑的原理类似于均值滤波。均值滤波模板的系数都是一样的,而高斯平滑则是需要根据像素与模板中心的距离来定义权重。权重的计算方法是采用高斯分布,离中心越远,权重越小。下面是一个利用Gauss滤波进行图像平滑的实例:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include原创 2017-01-28 23:31:38 · 3139 阅读 · 0 评论 -
VTK修炼之道38:图像平滑_中值滤波器
1.中值滤波vtkImageHybridMedian2D实现了对二维图像的中值滤波。其实现原理是,采用一个5x5的模板,逐次将模板中心对应于图像的每个像素上,将模板图像覆盖的像素的中值作为当前像素的输出值。#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #include #原创 2017-01-28 23:43:12 · 2031 阅读 · 1 评论 -
VTK修炼之道39:图像平滑_各向异性滤波
1.各向异性扩散滤波高斯平滑方法在平滑噪声的同时,模糊了图像的重要边缘图像。各向异性滤波是一种基于偏微分方程的滤波技术,建立于热量的各向异性扩散理论。各向异性滤波在图像的平坦区域选择大尺度平滑,而边缘区域则选择小尺度的平滑,在抑制噪声的同时保持了图像的边缘信息。vtkImageAnisotropicDiffusion2D(vtkImageAnisotropicDiffusi原创 2017-01-29 00:05:51 · 2400 阅读 · 0 评论