学习笔记7

本文详细介绍了VTK在图像处理中的应用,包括图像平滑、滤波技术如均值滤波、高斯平滑和中值滤波,以及各向异性滤波在保持图像边缘信息方面的优势。此外,还探讨了图像变换,特别是傅里叶变换在频域处理中的作用,如低通滤波和高通滤波。在数据结构部分,阐述了VTK中的数据对象、数据集、单元类型和属性数据,强调了规则与不规则数据结构的区别以及数据组织的重要性。
摘要由CSDN通过智能技术生成
  • Vtk

05-VTK在图像处理中的应用(8)

  1. 图像平滑常用于图像的预处理中,如计算梯度时先对图像进行平滑处理,可以减少噪声对梯度的影响 通过模板卷积运算 。模板卷积运算的过程是首先将模板中心依次与图像每个像素重合,通过模板各个系数与图像对应像素相乘来计算模板对应像素的加权平均值,最后将运算结果赋给图像中模板中心对应的像素。
  2. 均值滤波是一种经常用到的平滑方法,其对应的模板各个像素的值为1
  3. 卷积运算通过vtkImageConvolve类实现
  4. 高斯平滑则是需要根据像素与模板中心的距离来定义权重。权重的计算方法是采用高斯分布,离中心越远,权重越小。
  5. vtkImageHybridMedian2D实现了对二维图像的中值滤波 该方法能够有效的保持图像边缘,并对于椒盐噪声有较好的抑制作用 对于三维图像,则使用vtkImageHybridMedian3D类
  6. 高斯平滑方法在平滑噪声的同时,模糊了图像的重要边缘图像各向异性滤波是一种基于偏微分方程的滤波技术,建立于热量的各向异性扩散理论。各向异性滤波在图像的平坦区域选择大尺度平滑,而边缘区域则选择小尺度的平滑(原理是在梯度较小的像素处进行较大幅度扩散,而在大梯度处则只进行细微的扩散),在抑制噪声的同时保持了图像的边缘信息。vtkImageAnisotropicDiffusion2D(vtkImageAnisotropicDiffusion3D)实现图像的各向异性扩散滤

05-VTK在图像处理中的应用(9)

  1. 在图像处理和分析中,经常会将图像从图像空间转换到其他空间中,并利用这些空间的特点进行对转换后图像进行分析处理,然后再将处理后的图像转换到图像空间中,这称之为图像变换
  2. 图像频域处理是指将图像从图像空间转换到频域空间进行处理的过程
  3. 快速傅里叶变换(Fast Fourier Transform),简称做FFT 傅里叶变换是可逆的,其逆变换为RFFT FFT在数字图像处理中有着广泛的应用,例如数字图像频域滤波去噪增强等等
  4. vtkImageFFT和vtkImageRFFT的输入为实数或者复数数据像素类型为复数的vtkImageData数据)(形如 z=a+bi(a、b均为实数)的数称为复数。其中,a 称为实部,b 称为虚部,i 称为虚数单位,输出都为复数数据对于傅里叶逆变换的图像中虚数部分值为0,实数部分图像即为重建的原始图像

5.vtkImageActor类仅支持unsigned char数据类型的图像

6.图像通过FFT变换到频域后,可以通过改变不同的频率分量来对图像进行处理。图像频域处理的步骤是,先将空域图像通过FFT变换到频域图像,设计一个滤波器对不同频率的频域分量进行处理,将处理后的频域图像通过IFFT变换回空域中得到处理后的图像。滤波器的设计需要根据具体需求来变化,主要分为两种,低通滤波器和高通滤波器

7.低通滤波是将频域图像中的高频部分滤除而通过低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的

8.最简单的低通滤波器是理想低通滤波器,基本思想是给定一个频率阈值,将高于该阈值的所有部分设置为0,而低于该频率的部分保持不变。理想是指该滤波器不能用电子元器件来实现,但是可以通过计算机来模拟 从结果看,在过滤掉图像的高频部分后,图像变得模糊,丢失了许多细节,另外还可以看到图像会存在一定的振铃效应,这也是理想低通滤波的特点。

9.在实际中经常使用的低通滤波器是巴特沃斯滤波器

 

10.因为巴特沃斯低通滤波器在高低频间的过渡平滑,因此不会出现明显的振铃效应。VTK中实现巴特沃斯低通滤波器的类是vtkImageButterworthLowPass 从结果来看,巴特沃斯低通滤波器产生的图像更为平滑,不会出现振铃现象。

11.在图像中图像的边缘对应高频分量,因此高通滤波的效果是图像锐化

12.理想高通滤波从结果看出高通滤波后图像得到锐化处理,图像中仅剩下边缘 存在振铃现象。

 

06-VTK基本数据结构(1)

  1. 可视化数据具有如下一些特点:

1离散性 由于可视化数据的离散性特点,在某些离散点上有精确的值存在,但点与点之间的值则是不可知的,要得到采样点之外的其他点的值,只有通过插值(Interpolation)的方法获取。常用的插值方法是线性插值,要得到更精确的数值可以采用非线性插值,如B样条插值方法。

2数据具有规则或不规则的结构(或者说结构化与非结构化) 规则结构的数据可以在存储及计算时占优势,不规则结构的数据虽然存储和计算时不能像规则结构的那样高效,但它在数据表达方面相对而言则更加自由,更加细致、灵活的表现数据。

3数据具有维度 可视化数据具有零维、一维、二维、三维等任意维度。如,零维的数据表现为点,一维数据表现为曲线,二维数据表现为曲面,三维数据表现为体等

2.在VTK中,数据一般以数据对象(Data Object,对应VTK里的类vtkDataObject)的形式表现 只有数据对象被组织成一种结构(Structure)后,才能被VTK提供的可视化算法处理。

3.数据对象被组织成一种结构并且被赋予相应的属性值时就形成数据集(Dataset)VTK里与数据集对应的类是vtkDataSet ,vtkDataSet由两个部分组成,即组织结构(Organizing Structure)以及与组织结构相关联的属性数据(Attribute Data)

 

拓扑结构描述了物体的构成形式几何结构描述了物体的空间位置关系

点数据(Point Data)定义数据集的几何结构,单元数据(Cell Data)定义数据集的拓扑结构,要形成完整的数据集,必须有几何和拓扑两种结构

06-VTK基本数据结构(2)

  1. 一系列有序的点按指定类型连接所定义的结构就是单元(Cell),单元是可视化系统的基础VTK支持的线性直线和非线性类型弧线的单元
  2. 单元是由单元的类型(如六面体)和构成单元的顶点列表两部分构成
  3. 通常我们用数学符号Ci来表示单元,换言之,单元就是一个有顺序的点集Ci = {p1, p2,…, pn},其中pi∈P,P就是该有序的点集。单元的类型形状决定了点集里点的顺序,或者说单元的拓扑;而定义单元的点的个数就是该单元的大小(Size)。
  4. 单元类型的线性与非线性的划分主要是以插值函数为依据的,对于线性单元,采用的是线性或者常量插值函数。另外,单元里的任意一条边都是由两个点连接定义的。
  5. VTK里单元的类型定义在vtkCellType.h文件里,线性的单元类型有:

Vertex:VTK_VERTEX,顶点

Polyvertex:VTK_POLY_VERTEX,多顶点

Line:VTK_LINE,直线

Polyline:VTK_POLY_LINE,折线

Triangle:VTK_TRIANGLE,三角形

TriangleStrip:VTK_TRIANGLE_STRIP,三角形条带

Quadrilateral:VTK_QUAD,四边形

Pixel:VTK_PIXEL,二维的基本类型

Polygon:VTK_POLYGON,多边形

Tetrahedron:VTK_TETRA,四面体

Hexahedron:VTK_HEXAHEDRON,六面体

Voxel:VTK_VOXEL,三维的基本类型,与六面体的拓扑一样,但几何上有所区别。Voxel要求相邻的两个面必须垂直,点的连接顺序如图6.6-l所示。Voxel是六面体的特殊形式。与Pixel类似,Voxel与三维图像体素(Voxel)的概念是不同的。

Wedge:VTK_WEDGE,楔形

Pyramid:VTK_PYRAMID,角椎体

PentagonalPrism:VTK_PENTAGONAL_PRISM,五棱柱

HexagonalPrism:VTK_HEXAGONAL_PRISM,六角柱

  1. 线性单元和非线性单元的不同点是在绘制和数据处理方法方面,线性单元可以很容易的转换成线性图元被图形库处理,而非线性单元不被图形库直接支持,因此非线性单元必须先转换成线性单元以后,才能被图形库所支持。
  2. 可视化系统在处理非线性单元时,一种比较流行的做法就是细化(Tessellation)非线性单元,充分利用线性单元的可视化算法。但是细化的过程必须谨慎处理,否则会导致过分细分,造成过多的线性单元。 在VTK里,二次曲线(QuadraticEdge)是一维的基本单元,由三个点定义,前两个点定义了曲线的起点和终点,第三个点位于起点与终点的中间位置(参考图6.7-a);二次三角形(QuadraticTriangle)是二维的基本单元,由六个点定义

06-VTK基本数据结构(3)

  1. 对数据集的可视化实质上是对属性数据的可视化
  2. 依据数据的性质属性数据可分为标量数据矢量数据张量数据等几大类
  3. 在VTK中用vtkPointData类和vtkCellData类表达数据集属性,它们是类vtkDataSetAttributes(vtkDataSetAttributes派生自vtkFieldData)的子类

 

构成数据集的每个点(或单元)和属性数据之间存在一对一的关系,如一个数据集由N个点(或单元)构成,那么必须有N个属性数据和这N个点(或单元)一一对应,通过点的索引号就可以对该点的属性数据进行访问

4.标量数据是数据集里的每个位置具有单值的数据,它只表示数据的大小

 

零阶的张量是标量,一阶的张量是矢量,二阶的张量是纹理坐标,三阶的张量是一个三维阵列,VTK只支持3×3的对称的张量

06-VTK基本数据结构(4)

  1. 数据集由组织结构和与之关联的属性数据构组成,组织结构包括拓扑结构几何结构。数据集的类型是由它的组织结构决定,同时数据集的类型决定了点和单元之间的相互关系
  2. 规则数据集的点和单元都是规则排列的,每个点的位置都可以依据相互之间的关系得到;不规则结构数据集没有固定的模式,不能用简单的方式描述,在存储和计算时需要更多的内存和资源,但它在数据表达方面相对而言则更加自由,能更加细致、灵活的表达。
  3. vtkImageData是由一维的线、二维的像素或三维的体素组成,vtkImageData在几何结构及拓扑结构都是规则的,因此每个点的位置可隐式地表达,只需要知道vtkImageData数据的维数、起始点的位置和相邻点之间的间隔,就可以计算出每个点的空间位置

06-VTK基本数据结构(5)

  1. 所以当存储数据的数组长度超出指定的长度时,会自动触发Resize()操作来调整数组的长度,使数组的长度变成原来的两倍,MaxId是一个整型的偏移量,用来定义最后一个插入的数据的索引。如果没有数据插入,MaxId等于-1,否则,MaxId的值介于0到Size之间,即0≤MaxId<Size。
  2. VTK引入了元组(Tuple)的概念。元组是数据数组的子数组,用于存储数据类型相同的分量数据(许多可视化数据是由多个数据分量组成的,如RGB颜色数据由红、绿、蓝三个分量组成)
  3. NumberOfComponents,表示的就是数据数组里元组的个数

arr->SetNumberOfComponents(1);//设置元组的分量个数为1

arr->SetNumberOfTuples(20);//指定数据数组的长度为20个元组

  1. 动态绑定允许我们通过操作抽象父类的方法来调用具体子类对象的实现
  2. 模板函数的使用相较于虚函数而言,虽然能在一定程度上提高程序的性能,但同时也增加了代码的复杂性。
  3. 在vtkDataObject内部有一个vtkFieldData(场数据)的实例,负责对数据的表达 从类的名字我们能够推断出,vtkFieldData存储的数据是与数据对象的属性数据相关的。以vtkPolyData为例,vtkPolyData内部存储了三种类型的数据,分别是vtkPointData、vtkCellData和vtkFieldData。vtkPointData是与每一个点相关联的数据,如某点上的温度值;vtkCellData是与每一个单元相关联的数据,如某个三角形单元的面积;除点和单元数据以外的数据,应该使用vtkFieldData,如数据的质心(Centerof mass)。
  4. Dataset (数据集)与DataArray (数据数组)这两个概念的区别。简单地理解为,数据集是VTK可视化管线所处理的对象;而数据数组是用于表达数值数据的内存组织形式
  • 论文

Lee94

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值