VTK面绘制说明

面绘制有两种,
1、基于断层轮廓线
先在不同切片上提取出感兴趣区域的轮廓线,然后,根据相邻切片的轮廓线构造出三角面片集。
这种方法弊端很明显:轮廓线之间的插值,轮廓线之间的对齐,同一个切片上的不同轮廓线。
2、基于体素(移动立方体 Marching Cube)
经典算法,其内涵在于“等值面提取”。
将已经读入内存中的、一系列按顺序罗列起来的二维切片,看作一个三维数据场。
从三维数据场中符合被设定阈值要求的点提取出来,然后将点依据法向量连接成三角面片集。

vtkSmoothPolyDataFilter 实现的是Laplacian 平滑,
示例中只指定迭代次数和放松因子,迭代次数越多,平滑的越厉害,同时细节损失越严重。
放松因子是Laplacian算法的一个参数,在所有的迭代算法中,这个参数控制迭代过程的稳定性。
一般情况下小的放松系数和大的迭代次数会使迭代算法的收敛过程更稳定。

另外,可以使用其他变量控制平滑过程,BoundarySmoothing控制是否对边界点平滑。
FeatureEdgeSmoothing控制是否对特征边上的点平滑,需用SetFeatureAngle指定特征角阈值,
如一条边被两个相邻多边形公用,若这两个多边形的法向量的夹角(特征角)大于定义的阈值,则称该边为特征边。
vtkPolyDataNormals 用于计算polydata的法向量,计算法向量之后会使可视化之后的数据更加平滑,
SetFeatureAngle用于设置特征角,两个相邻多边形的角度大于该角,
则称多边形的共用边是尖锐的,默认是30度,锐边分裂(splitting)开启,多边形顺序(consistency)一致性开启。

其他说明:
RelaxationFactor–过程的稳定性对此参数敏感. 默认0.0
通常,小松弛因子和大量迭代比较大的弛豫因子和较少的迭代次数更稳定
Convergence–为迭代过程指定收敛标准,较小的数字导致更平滑的迭代.默认0.01
FeatureEdgeSmoothing–沿着锋利的内部边缘平滑。默认0
FeatureAngle–指定锐边识别的特征角度。默认45
EdgeAngle–指定边缘角度以控制沿边缘(内部或边界)的平滑。默认15
BoundarySmoothing–网格边界上的顶点平滑。默认1
GenerateErrorScalars–标量距离值的生成。默认0
GenerateErrorVectors–生成错误向量。默认0

PassBand–设置窗口sinc滤波器的通带值。默认0.1
NormalizeCoordinates–打开/关闭坐标标准化。 默认0
可以平移和缩放位置,使得它们在平滑计算之前适合[-1,1]。
默认为关闭。 通过开启归一化可以提高解的数值稳定性。
如果启用了标准化,则在平滑完成后,坐标将重新缩放到原始坐标系。
NonManifoldSmoothing–平滑非流形顶点。默认0

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用VTK在Python中进行三维重建面绘制,你需要完成以下步骤: 1. 安装VTK库:你需要先安装VTK库,这可以通过使用pip安装来完成。 2. 导入必要的库:在Python代码中,你需要导入VTK库和其他必要的库,例如numpy和matplotlib。 3. 创建图形窗口:使用vtkRenderWindow类创建一个图形窗口。 4. 创建渲染器:使用vtkRenderer类创建一个渲染器。 5. 创建演员:使用vtkActor类创建一个演员,并将其添加到渲染器中。 6. 创建数据源:使用vtkPolyData类创建一个数据源,并将其添加到演员中。 7. 创建映射器:使用vtkPolyDataMapper类创建一个映射器,并将其添加到演员中。 8. 设置外观:使用vtkProperty类设置演员的外观属性,例如颜色和透明度。 9. 显示图形:使用vtkRenderWindowInteractor类创建一个图形显示器,并启动它以显示三维重建面绘制。 这里是一个示例代码: ```python import vtk import numpy as np import matplotlib.pyplot as plt # 创建图形窗口 window = vtk.vtkRenderWindow() # 创建渲染器 renderer = vtk.vtkRenderer() window.AddRenderer(renderer) # 创建演员 actor = vtk.vtkActor() renderer.AddActor(actor) # 创建数据源 points = np.random.rand(100, 3) polyData = vtk.vtkPolyData() pointsVTK = vtk.vtkPoints() for point in points: pointsVTK.InsertNextPoint(point) polyData.SetPoints(pointsVTK) # 创建映射器 mapper = vtk.vtkPolyDataMapper() mapper.SetInputData(polyData) actor.SetMapper(mapper) # 设置外观 property = vtk.vtkProperty() property.SetColor(1, 0, 0) actor.SetProperty(property) # 显示图形 interactor = vtk.vtkRenderWindowInteractor() window.SetInteractor(interactor) window.Render() interactor.Start() ``` 这个示例代码会在窗口中显示一个由随机生成的点构成的红色三维重建面绘制。你可以根据自己的需要修改点的数量和外观属性,以创建不同的三维重建面绘制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力减肥的小胖子5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值