3D纹理映射概述
基于Ray Casting算法在系统中的源代码实现,可知该算法实现过程中的计算量是相当大,并不利于实现实时渲染,尤其是当用户对可视化的三维模型进行旋转或缩放等交互性操作时。为改进优化这一相关问题,现阶段的体绘制算法三维重建中会借用计算机图像处理的硬件设备来实现重建绘制过程中的加速,即利用纹理映射来加速。该原理是将系统通过读取DICOM序列图像获得三维体数据,将三维体数据作为纹理进行装载到计算机图像处理的硬件缓存中,之后在利用计算机图像处理的硬件条件来实现图像合成操作,从而在此基础上来提高系统实现重建绘制的效率。通过这种方法得到的三维结构模型的渲染效果从本质上讲与Ray Casting算法实现的渲染效果相同。
在进行3D纹理映射算法的实现时需要特别注意的一点,受计算机图像硬件纹理空间限制,当系统通过读取DICOM序列图像获得的三维体数据传递至 vtkVolumeTextureMapper3D类中,系统会进行重采样,来确保当前处理的图像大小能够满足纹理空间的限制条件。目前市面上,能够实现基于VTK类库的3D纹理映射算法的计算机需要配备两种类型显卡:NVIDIA或者ATI。
基于VTK的3D纹理映射实现
3D纹理映射体绘制算法实现不同与Ray Casting体绘制算法中通过vtkFixedPointVolumeRayCastMapper类,是基于vtkVolumeTextureMapper3D类。
3D纹理映射体绘制算法基于vtkVolumeTextureMapper3D类实现,创建该类的智能指针,获取系统读取的DICOM序列图像三维体数据并进行处理。下一步与Ray Casting体绘制算法中体属性数据设置基本相同,基于vtkVolumeProperty类创建智能指针,定义体属性数据对象,通过类中静态函数ShadeOn()打开光照/阴影测试,通过静态函数SetScalarOpacity()、SetGradientOpacity()和SetColor()来依次添加灰度不透明度、梯度不透明度和颜色;基于vtkPiecewiseFunction类创建两个不同智能指针,用来设置灰度不透明度和梯度不透明度,通过多参数测试选取可视化效果最佳的参数实现对三维模型的渲染;基于vtkColorTransferFunction类设置颜色函数,同样通过多参数测试选取可视化效果最佳的参数实现对三维模型的渲染。最后使用vtkVolume类绑定颜色传输函数、灰度不透明度和梯度不透明设置函数完成数据渲染。具体设置可参考另一篇文章:三维重建VTK体绘制,Ray Casting和最大密度投影