VTK修炼之道
文章平均质量分 89
沈子恒
计算机视觉 自然语言处理 推荐系统 架构设计
展开
-
VTK修炼之道79:交互与拾取_单位拾取
1.单位拾取示例代码:#include VTK_MODULE_INIT(vtkRenderingOpenGL)VTK_MODULE_INIT(vtkInteractionStyle)VTK_MODULE_INIT(vtkRenderingFreeType)#include #include #include #include #include #include原创 2017-02-10 12:07:51 · 4750 阅读 · 1 评论 -
VTK修炼之道24:图像基本操作_单颜色通道图像合成彩色
1.三张灰度图像合成彩色图我们可以提取彩色的图像的各个颜色分量,那么同样也可以将灰度图像合并成为一个彩色图像。VTK中提供vtkImageAppendComponents类来合成彩色图像,其输入需要提供三个灰度图像。下面实例:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #includ原创 2017-01-23 23:50:44 · 2644 阅读 · 1 评论 -
VTK修炼之道25:图像基本操作_图像子块提取(特征区域提取)
1.提取感兴趣区域感兴趣区域(Volum of Interest,VOI)是指图像内部的一个子区域。在VTK中vtkExtractVOI类实现由用户指定的区域范围提取图像的子图像。该Filter的输入和输出都是一个vtkImageData,因此其结果可以直接作为图像保存。其示例代码如下所示:#include VTK_MODULE_INIT(vtkRenderingOpenGL原创 2017-01-24 09:58:22 · 3257 阅读 · 0 评论 -
VTK修炼之道26:图像基本操作_三维图像切片提取
1.三维图像切片提取切片是指三维图像中的一个切面对应的图像。切面可以是过图像内部一点且平行于XY、YZ、XZ平面的平面,也可以是任意的过三维图像内部一点任意方向的平面。通过提取切片可以方便的浏览和分析图像内部组织结构,是医学图像浏览软件中的一个重要的功能。在VTK中vtkImageReslice类实现图像切片提取功能。下面是切片提取的代码:#include VTK_MODUL原创 2017-01-24 14:22:14 · 18426 阅读 · 24 评论 -
VTK修炼之道27:图像基本操作_三维图像切片交互提取(回调函数、观察者-命令模式)
1.鼠标滑动提取三维图像切片学习三维图像切面的提取后,我们可以实现一个稍微复杂的程序——通过滑动鼠标来切换三维图像切片,这也是医学图像处理软件中一个很基本的功能。实现该功能难点是怎样在VTK中控制鼠标来实时提取图像切片。我们采用观察者/命令(Observer/Command)模式机制来实现。VTK中鼠标消息是在交互类型对象(interactorstyle)中响应,因此通过为交互类型原创 2017-01-24 23:29:35 · 7752 阅读 · 12 评论 -
VTK修炼之道28:图像统计_灰度直方图计算
1.灰度图像直方图直方图统计是图像处理中的一个非常重要的操作。VTK中实现直方图统计功能的filter是vtkImageAccumulate。其将每个组分的数值范围划分为离散的间隔,然后统计每个灰度间隔上的像素数目。vtkImageAccumulate输入和输出都是vtkImageData类型,因此直方图也可以看做是一幅图像;对于输入图像的像素数据类型可以是任意的,但是最大支持3个组分原创 2017-01-25 09:46:26 · 6708 阅读 · 8 评论 -
VTK修炼之道29:图像统计_彩色直方图计算
1.彩色图像直方图彩色图像由于内部有三个通道,不能直接计算直方图,需要提取RGB三个通道数据,分别计算直方图。每个通道计算直方图的方法与灰度图像直方图计算方法一致。实例代码如下:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #include #include #in原创 2017-01-25 11:02:36 · 2613 阅读 · 2 评论 -
VTK修炼之道30:图像重采样_降采样和升采样技术
1.VTK中的图像重采样实现图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像。重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图像二维连续函数,再按新的像元间距和像元位置进行采样。其数学过程是根据重建的连续函数(曲面),用周围若干像元点的值估计或内插出新采样点的值。图像重采样在图像处理中应用非常广泛,如SIF原创 2017-01-26 18:50:19 · 5783 阅读 · 0 评论 -
VTK修炼之道31:图像二值化_阈值法
1.阈值法实现图像二值化操作二值图像和label图像是图像分割中经常用到的两种图像。二值图像的每个像素只有两种可能的取值,例如0或者255。通常0代表图像的背景,而255代码图像前景。图像二值化是最简单的图像分割模型。设置一个灰度阈值,将图像中阈值以下的像素值设置为背景,阈值以上的像素值设置为前景,即可得当一副二值图像。在VTK中可以通过vtkImageThreshold类实现原创 2017-01-26 19:55:20 · 4369 阅读 · 0 评论 -
VTK修炼之道23:图像基本操作_灰度图像映射成伪彩色图像(查表法)
1.查表法伪彩图映射图像彩色映射的原理是首先生成一个颜色查找表,然后根据图像的一个标量值向颜色查找表中查找对应的颜色,并用新颜色值替代原来的像素值。VTK中vtkImageMapToColors负责图像彩色映射,vtkLookUpTable负责生成颜色查找表。下面代码说明了怎样进行彩色映射:#include VTK_MODULE_INIT(vtkRenderingOpenGL原创 2017-01-23 22:43:35 · 3940 阅读 · 0 评论 -
VTK修炼之道22:图像基本操作_彩色图像成分提取
1.彩色图像RGB成分提取VTK中利用vtkImageExtractComponents可以方便的提取出彩色图像的各个颜色分量,该类的使用比较简单,只需要设置要提取的分量序号即可。下面代码说明了怎样提取彩色图像的某个颜色分量。#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #原创 2017-01-23 21:39:15 · 1794 阅读 · 0 评论 -
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 · 2786 阅读 · 0 评论 -
VTK修炼之道80:VTK开发基础_智能指针与引用计数
1.引用计数VTK经过多年的开发与维护,已经形成了一套稳定的框架和开发规则。因此,了解这些规则和框架是定制VTK类的基础,这其中用到了大量面向对象的设计模式,例如对象工程模式、观察者/命令模式;还有就是当下非常流行的引用计数与智能指针等高级内存管理等。内存管理在大型的工程中是非常重要的内容,如果不能有效地管理内存,将严重影响到应用程序的执行效率,甚至可能造成程序崩溃。之前学习C++原创 2017-02-10 23:45:22 · 2945 阅读 · 0 评论 -
VTK修炼之道17:图像基本操作_图像信息的访问与修改(vtkImageData)
1.利用vtkImageData实现图像信息的访问与修改vtkImageData中提供了多个函数用于访问或者获取图像的基本信息,这些函数通常使用Set或者Get加上相应的信息名的形式,例如获取图像维数的方法定义为GetDimensions()。2.实验程序及运行结果#include VTK_MODULE_INIT(vtkRenderingOpenGL);#incl原创 2017-01-21 14:52:45 · 3501 阅读 · 2 评论 -
VTK修炼之道18:图像基本操作_图像信息的访问与修改(vtkImageChangeInformation)
1.类vtkImageChengeInformation用于图像信息修改vtkImageData中提供了多个Set函数用于设置图像的基本信息。当对一个管线的输出修改图像信息后,如果管线重新Update,那么这些修改都会恢复回原来的值。而vtkChangeImageInformation可以作为管线中的一个filter来修改图像信息。利用这个filter可以修改图像的原点,像素间隔以及范原创 2017-01-21 18:17:54 · 3484 阅读 · 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 · 4532 阅读 · 0 评论 -
VTK修炼之道81:VTK开发基础_vtkObject类深入分析
1.前言相比于vtkObjectBase,我们接触更多的是vtkObject类。vtkObjectBase类主要实现了引用计数,因此vtkObject及其相关子类都继承了该特性。与此同时,vtkObject中实现了一个在VTK中是用非常广泛的观察者/命令模式,该机制可以方便地处理消息响应,例如处理鼠标消息、键盘消息、进度条消息等,VTK的Widget中大量地使用了该机制进行消息原创 2017-02-11 20:04:57 · 2714 阅读 · 1 评论 -
VTK修炼之道20:图像基本操作_图像类型转换
1.vtkImageCast图像数据类型转换在数字图像处理中会被频繁地用到。一些常用到的图像算子(例如梯度算子)在计算时出于精度的考虑,会将结果存储为float或者double类型。但是在图像显示时,一般需要图像为unsigned char类型。VTK中最常用到的是VTKImageCast类型。其使用方法如下:vtkSmartPointer imgCast =vtkSmart原创 2017-01-21 23:31:35 · 4913 阅读 · 2 评论 -
VTK修炼之道82:VTK管线机制_信息对象类VTKInformation
1.VTK管线机制VTK中通过管线机制来实现组合各种算法处理数据。每一种算法是一个Filter,多个Filter连接在一起形成VTK管线。每个Filter可以分为两个组成部分:一个是算法对象,继承自vtkAlgrithm,主要负责处理输入的数据和信息;另一个是执行对象,继承自vtkExecute(),负责通知算法对象何时运行以及传递需要处理的数据和信息。Filter类继承自vtkAlgri原创 2017-02-12 20:25:05 · 4636 阅读 · 0 评论 -
VTK修炼之道83:Pipeline管线执行模型
1.管线执行模性请求是VTK执行管线的一个基本操作,一个管线执行模型由多个请求共同完成。管线建立完毕,当显示调用一个Filter的Update()函数时,该Filter的vtkExecutive子类执行对象会产生一系列请求,并在管线中传递。例如,一个Writer对象执行Update()时,会调用this->GetExecutive()->Update()来更新管线。此时,执行对象会原创 2017-02-12 22:55:33 · 3479 阅读 · 1 评论 -
VTK修炼之道32:边缘检测_梯度算子
1.梯度算子提取图像边缘图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法,如分水岭算法,通常是分割原图的梯度图像,梯度实际上也是反应的图像边缘信息。图像边缘一般常用图像一阶导数和二阶导数来检测。梯度算子对应于图像一阶导数。图像一阶导数计算一般是通过差分运算来近似的。VTK中可以使用vtkImageGradient计算图像梯度。注意图像梯度是一个向量,具有方原创 2017-01-26 22:16:27 · 3253 阅读 · 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 · 2593 阅读 · 0 评论 -
VTK修炼之道45:图形进阶_vtkPolyData属性数据
1.从图形着色说起前一个实验显示结果中的图像是白色的,而图形颜色与vtkPolyData属性数据息息相关。由于并未指定任何颜色和属性数据,因此在显示时默认以白色显示。属性数据包括点属性和单元属性。可以为vtkPolyData的点数据和单元数据分别指定属性数据。属性数据可以是标量,如点的曲率;可以是向量,如点或者单元的法向量;也可以是张量,主要在流场中较为常见。颜色可以直接作原创 2017-02-02 19:44:33 · 9964 阅读 · 0 评论 -
VTK修炼之道46:图形基本操作进阶_三角网格体积、表面积、测地距离、包围盒
1.基本图形操作意义图形处理,比如图形平滑、多分辨率分析、特征提取等都离不开一些基本的图形操作。掌握这些基本的图形操作有助于理解和深入学习图形处理和分析方法。VTK中提供了多种图形的基本操作,其中最简单的是点的欧氏距离计算,可以使用vtkMath进行计算,也可以直接计算向量的模。一些图元类提供了许多可以方便使用的静态函数,如vtkLine提供了点与线间的距离计算;vtkTria原创 2017-02-02 23:31:32 · 9365 阅读 · 9 评论 -
VTK修炼之道47:图形基本操作进阶_法向量计算
1.点法向量和单元法向量三维平面的法向量是指垂直于该平面的三维向量。曲面在某点P处的法向量为垂直于该点切平面的向量。对于一个网格模型,其每一个点和单元都可以计算一个法向量,在三维计算机图形学中法向量一个重要应用是光照和阴影计算。对于网格模型,模型是有一定数量的面片(单元)来逼近的,面片越多,则模型越精细;反之,则越粗糙。在计算网格模型的法向量时,单元法向量计算比较简单,可以通过组成每个原创 2017-02-03 12:39:41 · 8966 阅读 · 10 评论 -
VTK修炼之道48:图形基本操作进阶_符号化操作与模型区率计算
1.符号化Glyphing再谈上一篇帖子提到一个事,就是用符号化操作显示单元的法向量。模型的法向量数据是向量数据,因此法向量不能像前面讲到的通过颜色映射来显示。但是可以通过符号化(Glyphing)技术将法向量图形化显示。Glyphing是一种基于图形的可视化技术,这些图像可以是简单的基本图形,如具有方向的椎体,也可以是更加复杂的图像。VTK中就是应用vtkGlyph3D类实现该功原创 2017-02-03 14:21:34 · 6284 阅读 · 3 评论 -
VTK修炼之道49:图形基本操作进阶_网格平滑(点云的曲面重建技术)
1.网格平滑现代扫描技术的发展使得获取点云数据不再困难,通过曲线重建技术可以获取表面网格来表示各种复杂的实体。但是点云数据中往往存在噪声,这样得到的重建网格通常都需要进行平滑处理。拉普拉斯平滑是一种常用的网格平滑算法。该方法的原理比较简单,如下图所示:将每个点用其邻域点的中心来代替。通过不断地迭代,可以得到较为光滑的网格。VTK中,VTKSmoothPolyData原创 2017-02-03 19:30:51 · 8891 阅读 · 0 评论 -
VTK修炼之道50:图形基本操作进阶_网格模型的特征边 与 封闭性检测
1.封闭性检测由于受原始数据、重建方法的限制,得到的网格模型并不是封闭的。有时为了显示或者处理某些要求,需要网格必须是封闭的。封闭性网格应该比较好理解,比如一个球形网格。1.1网格模型边的分类之前也有提到过边界边的概念:如果一条边只被一个多边形包含,那么这条边就是边界边。是否存在边界边是检测一个网格模型是否封闭的重要特征。vtkFeatureEdges是一个非常重要的类原创 2017-02-03 21:28:59 · 6267 阅读 · 1 评论 -
VTK修炼之道51:图形基本操作进阶_连通区域分析
1.连通区域分析许多图形数据中,并非只包含一个对象(连通区域)。而在处理这些图形数据时,有时需要对每一个对象单独处理或者让其单独显示。比如,利用MarchingCube方法提取三维图像中的等值面,得到的结果往往是存在多个连通的对象区域,这是就需要对图形数据做连通区域分析,提取每个连通区域并计算其属性信息,以此来得到需要的连通区域。下面一个例子来分析VTK中如何对图形数据做连通区域分原创 2017-02-03 23:05:07 · 3433 阅读 · 4 评论 -
VTK修炼之道52:图形基本操作进阶_多分辨率策略(模型抽取的三种方法)
1.多分辨率处理策略模型抽取(Decimation)和细化(Subdivision)是两个相反的操作,是三角形网格模型多分辨处理中的两个重要操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网格模型。模型抽取的作用是减少模型中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像数据的降采样。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不原创 2017-02-04 11:13:19 · 4578 阅读 · 1 评论 -
VTK修炼之道44:图形进阶_vtkPolyData数据源讨论与数据创建
1.VTKPolyData源数据总结1之前的实例中,我们利用VTKConeSource源数据创建了一个棱锥。实际上VTK内部提供可以写数据源类来快速获取简单的图形数据。下面给出了最常见的几种VTKPolyData数据源类:2.vtkPolyData数据的创建前面多采用图像或者VTK合成源数据进行讨论。在这里,我们希望深入底层,显示地定义一个点集合和一个单元集合。原创 2017-02-02 12:06:52 · 8092 阅读 · 1 评论 -
VTK修炼之道43:图形进阶_vtkPolyData数据生成与显示
1.VTK图像处理引言图像数据的应用非常广泛,最贴近日常生活的应用是3D游戏,其中每个角色的模型、场景等都是图形数据。当然,游戏仅仅是图像数据的一个应用点。图形在CAD(计算机辅助设计)、影视、医学、地质、气象数据建模等领域中均有着广泛的应用。vtkPolyData是VTK中常用的数据结构之一,可以表示小到一个点、一条线,达到一个模型、一个场景等。2.vtkPolyData数据原创 2017-02-01 23:43:52 · 13579 阅读 · 3 评论 -
VTK修炼之道42:频域处理_高通滤波(理想+巴特沃兹)
1.理想高通滤波器高通滤波与低通滤波正好相反,是频域图像的高频部分通过而抑制低频部分。在图像中图像的边缘对应高频分量,因此高通滤波的效果是图像锐化。同样最简单的高通滤波器是理想高通滤波器。通过设置一个频率阈值,将高于该阈值的频率部分通过,而低于阈值的低频部分设置为0。VTK中理想高通滤波的实例如下:#include VTK_MODULE_INIT(vtkRenderingOp原创 2017-01-29 14:36:45 · 2490 阅读 · 0 评论 -
VTK修炼之道34:边缘检测_Canny算子
1.Canny算子Canny算子是John Canny于20世纪80年代提出的一种多级边缘检测算法。John Canny研究了最优边缘的特性,即检测到的边缘要尽可能跟实际的边缘接近并尽可能的多,同时,要尽量降低噪声对边缘检测的干扰。其计算步骤如下1)对源图像进行高斯平滑以消除图像中噪声2)采用差分法近似计算图像每一个像素的梯度,并计算梯度的模值和方向3)对梯度进行"非极大抑制"原创 2017-01-28 22:30:14 · 3250 阅读 · 1 评论 -
VTK修炼之道35:边缘检测_Laplace算子
1.拉普拉斯算子拉普拉斯算子是一个二阶边缘算子,即梯度的散度。拉普拉斯算子的实现也是通过模板实现。常用的拉普拉斯模板定义如下:拉普拉斯算子计算图像的二阶导数,对于图像噪声比较敏感。拉普拉斯算子的结果为标量,表示边缘的宽度。但是它常产生双像素宽边缘,而且不能提供方向信息,因此较少直接用于边缘检测。在VTK中由vtkImageLaplacian实现。#include原创 2017-01-28 22:45:20 · 2558 阅读 · 1 评论 -
VTK修炼之道36:图像平滑_均值滤波器
1.图像平滑图像平滑常用于图像的预处理中,如计算梯度时先对图像进行平滑处理,可以减少噪声对梯度的影响。图像平滑一般是通过模板卷积运算实现。模板可以看做是一个大小为nxn的小图像,例如3x3,5x5等等,模板的每个像素都对应一个系数值。模板卷积运算的过程是首先将模板中心依次与图像每个像素重合,通过模板各个系数与图像对应像素相乘来计算模板对应像素的加权平均值,最后将运算结果赋给图像中模板中原创 2017-01-28 23:14:34 · 2118 阅读 · 0 评论 -
VTK修炼之道37:图像平滑_高斯滤波器
1.高斯滤波高斯平滑的原理类似于均值滤波。均值滤波模板的系数都是一样的,而高斯平滑则是需要根据像素与模板中心的距离来定义权重。权重的计算方法是采用高斯分布,离中心越远,权重越小。下面是一个利用Gauss滤波进行图像平滑的实例:#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include原创 2017-01-28 23:31:38 · 3152 阅读 · 0 评论 -
VTK修炼之道38:图像平滑_中值滤波器
1.中值滤波vtkImageHybridMedian2D实现了对二维图像的中值滤波。其实现原理是,采用一个5x5的模板,逐次将模板中心对应于图像的每个像素上,将模板图像覆盖的像素的中值作为当前像素的输出值。#include VTK_MODULE_INIT(vtkRenderingOpenGL);#include #include #include #include #原创 2017-01-28 23:43:12 · 2044 阅读 · 1 评论 -
VTK修炼之道39:图像平滑_各向异性滤波
1.各向异性扩散滤波高斯平滑方法在平滑噪声的同时,模糊了图像的重要边缘图像。各向异性滤波是一种基于偏微分方程的滤波技术,建立于热量的各向异性扩散理论。各向异性滤波在图像的平坦区域选择大尺度平滑,而边缘区域则选择小尺度的平滑,在抑制噪声的同时保持了图像的边缘信息。vtkImageAnisotropicDiffusion2D(vtkImageAnisotropicDiffusi原创 2017-01-29 00:05:51 · 2409 阅读 · 0 评论 -
VTK修炼之道40:频域处理_快速傅里叶变换及其反变换1
1.图像频域处理的意义在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的特点进行对转换后图像进行分析处理,然后再将处理后的图像转换到图像空间中,这称之为图像变换。在一些图像处理和分析中通过空间变换往往会取得更有效的结果。图像频域处理是指将图像从图像空间转换到频域空间进行处理的过程。最常用的频域转换是傅里叶变换。傅里叶变换的计算量较大,人们为了提高速度,原创 2017-01-29 11:44:54 · 1543 阅读 · 0 评论