VTK图形图像学习笔记06

VTK图形处理

参考书:张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

1.1 vtkPolyData数据生成与显示

1.1.1 vtkPolyData数据源

image-20210407094758261

1.1.2 vtkPolyData数据的创建

首先需要定义一个点集合和一个单元集合,点集合定义了vtkPolyData的几何结构,单元集合定义了点的拓扑结构。每个单元由点的索引而非坐标来定义,这样能够减少数据的存储空间。**只有定义了单元数据才能显示该图形数据。**vtkPolygon表示一个多边形单元。定义vtkPolygon单元时,需要指定组成该单元的点数,若给定3,则表示一个三角形;若给定6,则表示一个六边形,以此类推。例如:

image-20210407095957267

1.1.3 vtkPolyData属性数据

1.2 基本的图形操作

对于三维网格模型来讲,测地距离是一种重要的距离度量。一个三维模型上两个点的测地距离是指沿着模型表面两者之间的最短距离。

image-20210407152949168

1.2.1 法向量计算

三维平面的法向量是指垂直于该平面的三维向量。曲面在某点P处的法向量为垂直于该点切平面的向量。**在三维计算机图形学中法向量的一个重要应用是光照和阴影计算。**在计算网络模型的法向量时,单元法向量计算比较简单,可以通过组成每个单元的任意两条边的叉乘向量并归一化表示。而对于点的法向量,则是由所有使用该点的单元法向量的平均值来表示。

VTK中计算法向量的Filter为vtkPolyDataNormals。该类针对单元为三角形或者多边形类型的vtkPolyData数据进行计算。由于法向量分为点法向量和单元法向量,可以通过函数SetComputeCell Normals()和SetComputePointNormals()来设置需要计算的法向量类型。

image-20210408084413010

在计算法向量时需要注意一个问题,即法向量的方向。**因为对于同一个平面来讲,可以有两个方向完全相反的法向量。一般是根据单元的点的顺序确定,采用右手定则来定义一个平面的法向量方向。**因此计算平面方向量的时候,法向量的方向与单元的点的顺序密切相关。必须保持单元的点顺序一致,才会得到合理的法向量。当然,函数SetConsistency()可以设置自动调整模型的单元法向量。SetAutoOrientNormals()可以设置自动调整法线的方向。

1.2.2 符号化Glyphing

Glyphing是一种基于图形的可视化技术,VTK中使用vtkGlyph3D类可以实现该功能,并且可以支持Glyph图形的缩放、着色、设置空间姿态等。使用该类时,需要接受两个输入:一个是需要显示的几何数据点集合;另一个是Glyph图形数据,为vtkPolyData数据。

image-20210408105751870

1.2.3 曲率计算

曲率几何解释:

image-20210408140542646

image-20210408144046187

1.3 网格平滑

现代扫描技术的发展使得获取点云数据不再困难,通过曲面重建技术可以获取表面网格来表示各种复杂的实体。但是点云数据中往往存在噪声,这样得到的重建网络通常都需要进行平滑处理。

拉普拉斯平滑是一种常用的网格平滑算法。该方法原理比较简单,将每个点用其邻域点的中心来代替。通过不断迭代,可以得到较为光滑的网格。

image-20210408144624305

1.4 封闭性检测

1.5 连通区域分析

1.6多分辨率处理

模型抽取和细化是两个相反的操作,是三角形网络模型多分辨率处理中的两个重要操作。使用这两个操作可以在保持模型拓扑结构的同时,得到不同分辨率的网络模型。模型抽取的作用是减少模型数据中的点数据和单元数据,便于模型的后续处理与交互渲染,这类似于图像数据的降采样。而网格细化则是利用一定的细化规则,在给定的初始网格中插入新的点,从而不断细化出新的网格单元,在极限细化情况下,该网格能够收敛于一个光滑曲面。

1.6.1 网格抽取

三个网格抽取类:vtkDecimatePro、vtkQuadricDecimation、vtkQuadricClustering

1.6.2 网格细化

image-20210408161318286

1.7 表面重建

1.7.1 三角剖分

三角剖分将一些散乱的点云数据剖分为一系列的三角形网格。最常用的三角剖分技术是Delaunay三角剖分。Delaunay三角剖分有很多优良的性质,如最大化最小角特性,即在所有可能的三角剖分中,其所生成的三角形的最小角的角度最大。所以,Delaunay三角剖分无论从哪个区域开始构建,最终生成的三角网格是唯一的。

VTK的vtkDelaunay2D类实现了二维三角剖分。该类的输入数据为一个vtkPointSet或其子类表示的三维空间点集,其输出为一个三角网格vtkPolyData数据。虽然输入的是三维数据,但是算法仅使用XY平面数据进行平面三角剖分,而忽略Z方向数据。也可以为vtkDelaunay2D设置一个投影变换从而在新的投影平面上进行三角剖分。需要注意,在不加任何限制的条件下,该类生成的平面三角网格为一个凸包。

vtkDelaunay2D还支持加入边界限制。对于边界多边形限制数据的内部或者外部,与多边形点的顺序有关。这里采用右手坐标系,从Z轴向下看去,如果多边形的点顺序为逆时针,则仅对多边形内部数据进行剖分;而如果为顺时方向,则对多边形外部数据进行剖分,此时该边界多边形可以看作一个孔洞。

image-20210413110009378

另外,VTK的vtkDelaunay3D类可实现三维三角剖分。该类的使用方法与vtkDelaunay2D基本一致,不同的是,三维三角剖分得到的结果并不是三角网格,而是四面体网格。因此,其输出数据的类型为vtkUnstructuredGrid,在未加入边界条件下的三维三角剖分通常也为一个凸包。

1.7.2 等值面提取

等值面提取技术可以提取感兴趣的一个或几个组织轮廓,并生成网格模型以供后续的处理和显示。

根据数据类型的不同,VTK中提供了多个等值面提取类:

image-20210413110641802

VTK中的等值面提取算法多基于Marching Cubes算法来实现。Marching Cubes是经典的移动立方体等值面提取算法。该方法是由W.E.Lorenson和H.E.Cline在1987年提出的。由于这一方法原理简单,易于实现,目前已经得到了较为广泛的应用,成为三维数据等值面生成的经典算法。等值面提取类根据数据类型的不同而有所侧重。vtkImageMarchingCubes主要处理三维图像数据;vtkMarchingCubes主要是针对规则体数据生成等值面;vtkMarchingSquares则是针对二维规则网格数据生成等值线。

vtkDiscreteMarchingCubes继承自vtkMarchingCubes,主要针对Label图像。比如利用图像分割算法对医学图像进行分割后得到含有不同Label值的数据,每个Label对应一个组织。如果想要得到其中一个或几个组织的轮廓模型,可以使用该类。

vtkMarchingContourFilter可以接受任意类型的数据,其内部根据数据不同生成不同的算法对象实现等值面/线提取,具有较高的效率。

vtkContourFilter则是一个更加通用的等值面提取类,其可以接受任意的数据类型生成等值线或者等值面。

<关于Marching Cubes原理的详细解释。可以参考Lorensen, W. E. and Cline, H. E., “Marching Cubes: A High Resolution 3D Surface Construction Algorithm,” Computer Graphics, vol. 21, no. 3, pp. 163-169, July 1987.>

运行6.7_PolyDataMarchingCubes.cpp报错:(未解决)

image-20210413222548367

1.7.3 点云重建

vtkSurfaceReconstructionFilter实现了一种隐式曲面重建的方法,即将曲面看作一个符号距离函数的等值面,曲面内外的距离值的符号相反,而零等值面即为所求的曲面。该方法需要对点云数据进行网格划分,然后估算每个点的切平面和方向,并以每个点与最近的切平面距离来近似表面距离。这样即可得到一个符号距离的体数据,使用vtkContourFilter来提取零等值面即可得到相应的网格。

image-20210414155055083

1.8 点云配准

在外科手术导航技术中,图像标记点数据与人体表面标记点数据的配准是一个关键步骤,对于手术定位的精度有着重要的影响。这通常需要使用基于标记点的配准技术(也属于点云配准的一种)。因此,点云配准即是对一组源点云数据应用一个空间变换,使得变换后的数据与目标点云数据能够一一映射,使两组数据之间的平均距离误差最小。

vtkLandmarkTransform实现了标记点配准算法,使得两个点集在配准后的平均距离最小。通过SetSourceLandmarks()和SetTargetLandmarks()函数分别设置源标记点集和目标标记点集。注意,源标记点集和目标标记点集序号要对应,如1号源点要映射到1号目标点。

image-20210414220301124

其中黄色的三个点为源标记点,红色点为目标标记点,蓝色的点为配准后的点集。从结果来看,配准后的点集与目标标记点集是非常接近的。

点云数据配准最经典的方法是迭代最近点算法(Iterative Closest Points,ICP)。ICP算法是一个迭代的过程,每次迭代中对于源数据点P找到目标点集Q中的最近点,然后基于最小二乘原理求解当前的变换T。通过不断迭代直至收敛,即完成了点集的配准。

image-20210414224430177

其中绿色点为源点集,红色点为目标点集,蓝色点为配准后的点集。

1.9 纹理映射

image-20210414225235320

image-20210414230402730

image-20210415101655507

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值