vtk体绘制交互问题的解决方案 分享

原文出处: http://zpp123.blog.sohu.com/64688617.html

 

体绘制的速度问题是困扰医学图像三维重建的关键环节,通过总结,得到了以下几种提高体绘制速度的方法:

 

方法一:介绍一下vtkImageResample,这个函数将会通过线性插值对输入数据的spacing以及extent进行修改,来达到对输入数据的重新采样。一般采用SetAxisMagnificationFactor的方法来进行设置如下所示: vtkImageResample: SetInput(reader->GetOutput()); SetAxisMagnificationFactor(0, 0.5); SetAxisMagnificationFactor(1, 0.5);

 

方法二:对读入的数据可以进行 subsampling(二次抽样样品),这样也可以使程序很数据读入加快。如下所示: vtkImageShrink3D shrink SetInput(reader->GetOutput()); SetShrinkFactors(3,3,3) AveragingOn SetShrinkFactors 定义了x,y,z 抽样精密度 如果都是0 那么就没有必要用这个函数了,如果subsampling得值过大,那么rendering的结果会比较差。在这个时候如果对subsamping得数据进行优化显示是一个值得讨论的问题。 优化的方法可以选在高斯平滑的函数进行,这样可以减少数据的梯度感和粗糟感,代码如下 vtkImageGaussianSmooth: SetInputConnection(reader->GetOutput()); SetDimensionality(3) SetRadiusFactors(1,1,0)

 

方法三:重新设置SampleDistance。对于使用 vtkVolumeRayCastMapper来说。使用函数SetImageSampleDistance来进行设置,但同时,因为在默认状态下,它具有为了达到交互效果而自动调节显示效果的功能,所以前提必须是RayCastMapper 的自动调节功能已经关掉,(如果仍然采用自动调节作用,则可以通过SetAutoAdjustSampleDistances (int)来进行交互设置)即AutoAdjustSampleDistancesOff();如下所示: vtkVolumeRayCastMapper: SetImageSampleDistance(2); AutoAdjustSampleDistancesOff();

 

方法四:使用vtkLODProp3D。它允许加入多个Mapper,并通过设置 time,来决定某一时刻应该显示哪一个Mapper。通常的做法是当在旋转时选择交互性好但准确率稍差的Mapper,当停止时,又会显示比较费时但绘制准确的Mapper。对于RayCastMapper来说,则不需要使用vtkLODProp3D。如下所示: vtkVolumeTextureMapper2D *lowresMapper = vtkVolumeTextureMapper2D::New(); lowresMapper->SetInput(reader->GetOutput()); vtkVolumeRayCaster *hiresMapper = vtkVolumeRayCaster::New(); hiresMapper->SetInput(reader->GetOutput()); vtkLODProp3D *volumeLOD = vtkLODProp3D::New(); volumeLOD->AddLOD(lowresMapper, volumeProperty, 0.0); volumeLOD->AddLOD(hiresMapper, volumeProperty, 0.0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值