VTK修炼学习
VTK修炼学习
江南又旧雨
踏踏实实,简简单单,实实在在,做好当前,做好每一天!低头走路,莫问前程。
展开
-
VTK_Learning_VTK开发理论汇总
一、VTK开发基础_智能指针与引用计数https://blog.csdn.net/shenziheng1/article/details/54974101二、VTK开发基础_vtkObject类深入分析https://blog.csdn.net/shenziheng1/article/details/54983626三、VTK管线机制_信息对象类VTKInformati...原创 2020-03-13 11:37:37 · 233 阅读 · 0 评论 -
VTK_Learning_交互与拾取_单位拾取
1.单位拾取示例代码:#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL)VTK_MODULE_INIT(vtkInteractionStyle)VTK_MODULE_INIT(vtkRenderingFreeType) #include <vtkSmartPointer.h>#inc...原创 2020-03-13 11:06:05 · 714 阅读 · 1 评论 -
VTK_Learning_交互与拾取_点拾取
1.拾取选择拾取是人机交互过程的一个重要功能。一个最经典的例子就是,在玩3D游戏时,场景中可能会存在多个角色,有时需要用鼠标来选择所要控制的角色,这就要用到拾取功能。另外,在某些三维图形的编辑软件中,经常需要编辑其中的一个点、一个面片或者一个局部区域,这也需要通过拾取功能来完成。VTK中定义了多个拾取功能的类,具体的继承关系如下:VTK中所有的拾取类都继承自vtkAbstrac...原创 2020-03-13 11:03:10 · 504 阅读 · 0 评论 -
VTK_Learning_交互部件_分割/配准类Widget与其他Widget
1.分割/配准交互部件图像分割与配准是数字图像处理技术两大主要的应用领域,特别是在医学图像处理中。著名的医学图像分割与配准工具包ITK(Insight Segmentation & Registration Toolkit)的重要应用领域就是图像分割与配准。ITK实现了许多经典的分割、配准算法,但不提供可视化功能,因此,在应用中一般都会和VTK一起用。由VTK负责分割、配准等数据处...原创 2020-03-13 10:35:17 · 319 阅读 · 0 评论 -
VTK_Learning_交互部件_标注类Widget的应用
1.标注类Widget在可视化程序中,经常会对某个对象做一些标注说明,比如,在医学图像诊断中,常常会手动标注出被诊断为肿瘤的区域或者其他病变区域,并用文字进行标注。VTK中,与标注相关的Widget如下表所示:vtkTextWidget:在渲染场景中生成一串标识文本,可以随意调整该文本在渲染场景中的位置,缩放其大小等。 vtkScalarBarWidget:根据输入的数据在渲...原创 2020-03-13 10:30:36 · 666 阅读 · 1 评论 -
VTK_Learning_交互部件_测量类Widget的应用
1.与测量类相关的主要Widget与测量类相关的主要Widget如下:vtkDistanceWidget:用于在二维平面上测量两点之间的距离。 vtkAngleWidget:用于在平面的角度测量。 vtkBiDimensionalWidget:用于测量二维平面上任意两个正交方向的轴长。2.创建用于测量距离的Widget应用实例先复习一下创建Widget的一般步骤:...原创 2020-03-11 13:26:02 · 456 阅读 · 0 评论 -
VTK_Learning_交互部件_Widget的创建
1.创建Widget交互的步骤虽然每个Widget都提供了不同的功能以及不同的API,但是,Widget的创建以及使用基本都是类似的。创建Widget的一般步骤如下:1.实例化Widget;2.指定渲染窗口交互器。Widget可以通过它来监听用户事件。3.必要时使用观察者/命令模式创建回调函数。与widget交互时,它会调用一些通用的VTK事件(94个事件列表),如StartInte...原创 2020-03-11 11:30:19 · 286 阅读 · 0 评论 -
VTK_Learning_交互部件_Widget应用综述
1.交互器样式遇到的难题交互器样式(如vtkInteractorStyleImage)主要是根据不同的键盘、鼠标等消息来控制相机(vtkCamera)/Actor等相关参数,从而达到了交互的目的!然而,在渲染场景中,这些交互器样式是没有表达实体的。也就是说,在交互之前,我们(用户)必须知道那些键盘消息或者鼠标消息是与哪些事件绑定的,在整个交互过程中,用户“看不到”交互器样式长什么样子,比如...原创 2020-03-11 11:11:27 · 366 阅读 · 0 评论 -
VTK_Learning_交互与Widget_观察者/命令模式
1.前言一个强大的可视化系统不仅需要强大的数据处理能力,也需要方便易用的交互功能。图形处理软件ParaView(hhttp://www.paraview.org)、德国癌症研究中心研发的MITK(http://www.mitk.org)等开源软件系统都提供了强大的交互功能,作为ParaView、MITK等软件构件基础的VTK同样也提供了各种各样的交互功能。VTK的交互除了可以监听来自鼠标、...原创 2020-03-11 10:06:49 · 241 阅读 · 0 评论 -
VTK_Learning_体绘制讨论_光照&阴影、VTKLODProp3D
1.光照与阴影通过VTKVolumeProperty可以设置体绘制阴影效果(Shading)。阴影效果主要受环境光系数、散射光系数、反射光系数和高光强度四个参数影响。vtkVolumeProperty::SetAmbient()设置环境光系数 vtkVolumeProperty::SetDiffuse()设置散射光系数 vtkVolumeProperty::SetSpecular()设...原创 2020-03-08 12:02:11 · 806 阅读 · 0 评论 -
VTK_Learning_体绘制讨论_颜色传输函数
1.颜色传输函数颜色传输函数与不透明度传输函数的使用类似,二者的不同之处在于颜色传输函数是将一个标量值映射为颜色值。这个颜色值可以是RGB值,也可以是HSV值。VTK颜色传输函数采用VTKColorTransferFunction类实现,其函数为:int AddRGBPoint(double x,double r,double g, double b);int AddHSVPoin...原创 2020-03-08 11:50:19 · 1007 阅读 · 1 评论 -
VTK_Learning_体绘制讨论_梯度不透明度传输函数
1.梯度不透明度函数梯度不透明度函数是将梯度模值映射为一个不透明度乘子,从而增强过渡区域的显示效果。该函数也是使用vtkPiecewiseFunction类。例如,在不同材料的临界区域,如空气到软组织,或者软组织到骨头的临界区,梯度值会比较大,而材料的内部梯度值则会相对比较小。vtkVolumeProperty中通过如下函数设置和获取梯度不透明度函数:void SetGradien...原创 2020-03-08 11:42:09 · 649 阅读 · 0 评论 -
VTK_Learning_体绘制裁剪_Cripping技术
1.基于Clipping的体绘制裁剪技术Clipping技术支持VTKImageData和VTKUntructuredGrid数据类型。该功能由vtkAbstractMapper3D类提供,对于那些使用基于OpenGL的硬件裁剪技术的Mapper类,如vtkPolyDataMapper、vtkVolumeTextureMapper2D、VTKProjectedTetrahedraMapper等...原创 2020-03-08 10:58:44 · 563 阅读 · 0 评论 -
VTK_Learning_体绘制裁剪_Cropping技术
1.裁剪对于一些体积比较大,结构比较复杂的体数据进行体绘制的渲染效果难以展示其内部细节,需要用到裁剪技术来渲染部分数据。vtkVolumeMapper类中提供了两种裁剪技术,分别为Cropping和Clipping。Cropping技术只支持VTKImageData数据的裁剪。该方法在每个坐标轴上定义两个裁剪面,共有6个裁剪面(xmin,xmax,ymin,ymax,zmin,zmax)。...原创 2020-03-08 10:47:58 · 568 阅读 · 0 评论 -
VTK_Learning_纹理映射体绘制_三维纹理映射
1.三维纹理映射目前市面上的能多先科都是支持三维纹理映射的。利用三维纹理映射,将体数据映射至一组与视图平面平行的多边形,避免了二维纹理映射方法中因为纹理图像的切换造成的瑕疵。VTK中三维纹理映射体绘制方法由vtkVolumeTexture3D类实现,使用方法与二维纹理映射体绘制方法一致。(实时渲染效果真的是非常好)代码如下:#include <vtkAutoInit.h&g...原创 2020-03-08 10:15:34 · 537 阅读 · 1 评论 -
VTK_Learning_纹理映射体绘制_二维纹理映射
1.纹理映射体绘制基于软件实现的光线投影体绘制算法计算量非常大,不利于进行实时渲染。因此,目前体绘制经常使用图形硬件利用纹理映射来加速。其主要原理是将三维体数据作为纹理装载入硬件缓存中,利用硬件来实现插值以及图像合成操作,以提高绘制效率。基于图形硬件三维纹理功能的体绘制技术,主要是利用硬件的三线性过滤插值能力,通过渲染多个与视线垂直的面片来重建整个三维结构。每个面片利用三维纹理来决定颜色...原创 2020-03-08 10:09:25 · 356 阅读 · 1 评论 -
VTK_Learning_体绘制_固定点光线投影体绘制与GPU加速光线投影体绘制
1.固定点光线投影算法vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者。该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能够支持任意类型带的医院或者独立多元数据。例如,当输入为二元独立数据时,第一源数据用于颜色映射,而第二元作为不透明度映射。该类使用了空间跳跃技术来加速体绘制渲染过程,而在...原创 2020-03-08 10:00:53 · 473 阅读 · 1 评论 -
VTK_Learning_体绘制_光线投影+最大密度投影+等值面法
1.固定点光线投影算法vtkFixedPointVolumeRayCastMapper是一个较好的vtkVolumeRayCastMapper的替代者。该类能够实现基于Alpha合成的体绘制方法和最大密度投影体绘制方法,能够支持任意类型带的医院或者独立多元数据。例如,当输入为二元独立数据时,第一源数据用于颜色映射,而第二元作为不透明度映射。该类使用了空间跳跃技术来加速体绘制渲染过程,而在内部...原创 2020-03-08 09:49:09 · 1048 阅读 · 0 评论 -
VTK_Learning_体绘制_体绘制管线&图形渲染管线
1.几何渲染与体绘制1.1 几何渲染前面练习的渲染技术都是几何渲染技术。所谓的几何渲染技术,就是通过绘制几何图元(顶点、线段、面片等)来渲染数据,例如:绘制图像需要在空间中建立一个四边形图元,然后以纹理映射的方式将该图像贴图到该图元上进行渲染;而三维模型的绘制通常会分解为一系列的多边形面片进行绘制。这种通过生成中间几何图元来进行渲染的方法称为几何渲染。几何渲染的速度比较快,但是不能显示体...原创 2020-03-06 12:54:57 · 397 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_面绘制纹理映射
1.纹理映射纹理映射是将纹理空间中的纹理像素映射到屏幕空间中的像素的过程。纹理生成过程实质上是将所定义的纹理映射为某种三维物体表面的属性,并参与后续的光照计算。在三维图形中,纹理映射运用的十分广泛,尤其是描述具有真实感的物体。实现纹理映射主要是建立纹理空间与模型空间、模型空间与屏幕空间之间的映射关系,如上图所示。其中纹理空间可以定义为u-v空间,每个坐标轴的范围为(0,1)。对于一个纹...原创 2020-03-06 12:30:25 · 391 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_表面重建技术(三维点云曲面重建)
1.点云重建虽然Delaunay三角剖分算法可以实现网格曲面重建,但是其应用主要在二维剖分,在三维空间网格生成中遇到了问题。因为在三维点云曲面重建中,Delaunay条件不在满足,不仅基于最大最小角判断的对角线交换准则不在成立,而且基于外接圆判据的Delaunay三角化也不能保证网格质量。VTKSurfaceReconstructionFilter则实现了一种隐式曲面重建方法,即将曲面看做一个...原创 2020-03-06 11:20:07 · 1501 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_表面重建技术(等值面提取)
1.等值面提取等值面(线)提取是一种常用的可视化技术,常应用于医学、地质、气象等领域。例如,在医学图像处理中,由于CT、MRI等图像分辨率越来越高,虽然体绘制技术可以清晰地对数据内部结构进行可视化,但是其计算量和效率却制约了其使用。此时可通过等值面提取技术,仅提取感兴趣的一个或者几个组织轮廓,并生成网格模型以供后续的处理和研究。根据数据类型的不同,VTK中提供了多个等值面提取类,其类图如图所...原创 2020-03-06 11:09:59 · 1154 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_表面重建技术(三角剖分)
1.表面重建通过三维扫描仪所获取的实际物体的空间点云数据仅仅表示物体的几何形状,而无法表达其内部的拓扑结构。拓扑结构对于实际图形处理以及可视化具有更重要的意义。因此,这就需要利用表面重建技术奖点云数据转换成面模型,通常为三角网格模型。除此之外,基于图像数据的面绘制技术也是一种应用非常广泛的表面重建技术。2.VTK中实现三角剖分技术三角剖分技术是一种应用非常广泛的面重建技术。三角剖分将...原创 2020-03-06 10:58:13 · 752 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_多分辨率策略(模型抽取的三种方法)
1.多分辨率处理策略模型抽取(Decimation)和细化(Subdivision)是两个相反的操作,是三角形网格模型多分辨处理中的两个重要操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网格模型。模型抽取的作用是减少模型中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像数据的降采样。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不断细化...原创 2020-03-06 10:25:29 · 458 阅读 · 1 评论 -
VTK_Learning_图形基本操作进阶_连通区域分析
1.连通区域分析许多图形数据中,并非只包含一个对象(连通区域)。而在处理这些图形数据时,有时需要对每一个对象单独处理或者让其单独显示。比如,利用MarchingCube方法提取三维图像中的等值面,得到的结果往往是存在多个连通的对象区域,这是就需要对图形数据做连通区域分析,提取每个连通区域并计算其属性信息,以此来得到需要的连通区域。下面一个例子来分析VTK中如何对图形数据做连通区域分析:...原创 2020-03-06 10:06:02 · 407 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_网格模型的特征边 与 封闭性检测
1.封闭性检测由于受原始数据、重建方法的限制,得到的网格模型并不是封闭的。有时为了显示或者处理某些要求,需要网格必须是封闭的。封闭性网格应该比较好理解,比如一个球形网格。1.1网格模型边的分类之前也有提到过边界边的概念:如果一条边只被一个多边形包含,那么这条边就是边界边。是否存在边界边是检测一个网格模型是否封闭的重要特征。vtkFeatureEdges是一个非常重要的类,该类能够...原创 2020-03-06 09:50:54 · 720 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_网格平滑
1.网格平滑现代扫描技术的发展使得获取点云数据不再困难,通过曲线重建技术可以获取表面网格来表示各种复杂的实体。但是点云数据中往往存在噪声,这样得到的重建网格通常都需要进行平滑处理。拉普拉斯平滑是一种常用的网格平滑算法。该方法的原理比较简单,如下图所示:将每个点用其邻域点的中心来代替。通过不断地迭代,可以得到较为光滑的网格。VTK中,VTKSmoothPolyDataF...原创 2020-03-06 09:23:11 · 608 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_模型区率计算
1.曲率计算曲率时曲面弯曲程度的一种度量,是几何体的一种重要的局部特征。如下图所示:要计算曲面上给定点M的曲率,考虑经过M的法线的一个平面与曲面相交,得到一条二维曲面,称之为曲面在M点的一条法截线。经过M点法向量的曲面可以任意旋转,即可得到任意多条法截面,如上图所示。每一条法截线都会对应一个曲率,取具有最大曲率和最小曲率的两条法截线为主法截线,例如上图中的C1,C2;其对应的曲率分别记...原创 2020-03-05 23:14:49 · 571 阅读 · 0 评论 -
VTK_Learning_图形基本操作进阶_法向量计算
1.点法向量和单元法向量三维平面的法向量是指垂直于该平面的三维向量。曲面在某点P处的法向量为垂直于该点切平面的向量。对于一个网格模型,其每一个点和单元都可以计算一个法向量,在三维计算机图形学中法向量一个重要应用是光照和阴影计算。对于网格模型,模型是有一定数量的面片(单元)来逼近的,面片越多,则模型越精细;反之,则越粗糙。在计算网格模型的法向量时,单元法向量计算比较简单,可以通过组成每个单元的...原创 2020-03-05 22:36:37 · 1213 阅读 · 0 评论 -
VTK_Learning_三角网格体积、表面积、测地距离、包围盒
1.基本图形操作意义图形处理,比如图形平滑、多分辨率分析、特征提取等都离不开一些基本的图形操作。掌握这些基本的图形操作有助于理解和深入学习图形处理和分析方法。VTK中提供了多种图形的基本操作,其中最简单的是点的欧氏距离计算,可以使用vtkMath进行计算,也可以直接计算向量的模。一些图元类提供了许多可以方便使用的静态函数,如vtkLine提供了点与线间的距离计算;vtkTriangle提供...原创 2020-03-02 22:00:03 · 1524 阅读 · 0 评论 -
VTK_Learning_图形进阶_vtkPolyData数据生成与显示,再次理解vtkPolyData
1.VTK图像处理引言图像数据的应用非常广泛,最贴近日常生活的应用是3D游戏,其中每个角色的模型、场景等都是图形数据。当然,游戏仅仅是图像数据的一个应用点。图形在CAD(计算机辅助设计)、影视、医学、地质、气象数据建模等领域中均有着广泛的应用。vtkPolyData是VTK中常用的数据结构之一,可以表示小到一个点、一条线,达到一个模型、一个场景等。2.vtkPolyData数据生...原创 2020-03-02 21:19:44 · 722 阅读 · 0 评论 -
VTK_Learning_频域处理_高通滤波(理想+巴特沃兹)
1.理想高通滤波器高通滤波与低通滤波正好相反,是频域图像的高频部分通过而抑制低频部分。在图像中图像的边缘对应高频分量,因此高通滤波的效果是图像锐化。同样最简单的高通滤波器是理想高通滤波器。通过设置一个频率阈值,将高于该阈值的频率部分通过,而低于阈值的低频部分设置为0。VTK中理想高通滤波的实例如下:#include <vtkAutoInit.h>VTK_MODULE_...原创 2020-03-02 16:38:36 · 473 阅读 · 0 评论 -
VTK_Learning_频域处理_低通滤波(理想+巴特沃兹)
1.低通滤波器低通滤波是将频域图像中的高频部分滤除而通过低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的。2.理想低通滤波器最简单的低通滤波器是理想低通滤波器,基本思想是给定一个频率阈值,将高于该阈值的所有部分设置为0,而低于该频率的部分保持不变。理想是指该滤波器不能用电子元器件来实现,但是可以通过计算机...原创 2020-03-02 16:31:32 · 323 阅读 · 0 评论 -
VTK_Learning_频域处理_快速傅里叶变换及其反变换
1.图像频域处理的意义在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的特点进行对转换后图像进行分析处理,然后再将处理后的图像转换到图像空间中,这称之为图像变换。在一些图像处理和分析中通过空间变换往往会取得更有效的结果。图像频域处理是指将图像从图像空间转换到频域空间进行处理的过程。最常用的频域转换是傅里叶变换。傅里叶变换的计算量较大,人们为了提高速度,提出了快速...原创 2020-03-02 15:25:07 · 371 阅读 · 0 评论 -
VTK_Learning_图像平滑_均值滤波器_高斯滤波器__中值滤波器_各向异性滤波
1.均值滤波均值滤波是一种经常用到的平滑方法,其对应的模板各个像素的值为1。在VTK中没有直接实现均值滤波的类,但是我们可以通过图像卷积运算来实现。卷积运算通过vtkImageConvolve类实现。通过vtkImageConvolve类,只需要设置相应的卷积模板,便可以实现多种空域图像滤波。下面代码说明了怎样使用vtkImageConvolve类来实现图像的均值滤波:#in...原创 2020-02-21 17:09:14 · 387 阅读 · 0 评论 -
VTK_Learning_边缘检测_梯度算子__Sobel算子_Canny算子_Laplace算子
0.概述边缘检测主要有:梯度算子,Sobel算子,Canny算子,Laplace算子。1.梯度算子提取图像边缘图像中不连续的灰度值会产生边缘,图像的边缘检测是基于边界的图像分割方法,如分水岭算法,通常是分割原图的梯度图像,梯度实际上也是反应的图像边缘信息。图像边缘一般常用图像一阶导数和二阶导数来检测。梯度算子对应于图像一阶导数。图像一阶导数计算一般是通过差分运算来近似的。VTK中可...原创 2020-02-21 16:44:05 · 515 阅读 · 0 评论 -
VTK_Learning_图像二值化_阈值法
1.阈值法实现图像二值化操作二值图像和label图像是图像分割中经常用到的两种图像。二值图像的每个像素只有两种可能的取值,例如0或者255。通常0代表图像的背景,而255代码图像前景。图像二值化是最简单的图像分割模型。设置一个灰度阈值,将图像中阈值以下的像素值设置为背景,阈值以上的像素值设置为前景,即可得当一副二值图像。在VTK中可以通过vtkImageThreshold类实现图像二值化...原创 2020-02-21 16:02:12 · 311 阅读 · 0 评论 -
VTK_Learning_图像重采样_降采样和升采样技术
1.VTK中的图像重采样实现图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元间距重新采样,以构成几何变换后的新图像。重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图像二维连续函数,再按新的像元间距和像元位置进行采样。其数学过程是根据重建的连续函数(曲面),用周围若干像元点的值估计或内插出新采样点的值。图像重采样在图像处理中应用非常广泛,如SIFT...原创 2020-02-21 15:56:00 · 403 阅读 · 0 评论 -
VTK_Learning_图像统计_灰度直方图计算_彩色直方图计算
1.灰度图像直方图直方图统计是图像处理中的一个非常重要的操作。VTK中实现直方图统计功能的filter是vtkImageAccumulate。其将每个组分的数值范围划分为离散的间隔,然后统计每个灰度间隔上的像素数目。vtkImageAccumulate输入和输出都是vtkImageData类型,因此直方图也可以看做是一幅图像;对于输入图像的像素数据类型可以是任意的,但是最大支持3个组分像素类...原创 2020-02-21 15:40:32 · 650 阅读 · 0 评论 -
VTK_Learning__单颜色通道图像合成彩色
1.三张灰度图像合成彩色图我们可以提取彩色的图像的各个颜色分量,那么同样也可以将灰度图像合并成为一个彩色图像。VTK中提供vtkImageAppendComponents类来合成彩色图像,其输入需要提供三个灰度图像。下面实例:#include <vtkAutoInit.h>VTK_MODULE_INIT(vtkRenderingOpenGL); #include...原创 2020-02-21 15:14:53 · 261 阅读 · 0 评论