1 基于VTK与Qt的体绘制程序
1.1 体绘制介绍
体绘制(Volume Rendering)是一种从离散三维数据场获得二维投影图像的技术。体绘制在医学成像和科学可视化当中有着广泛应用。用于体绘制的数据集也称为体数据(Volume Data)。典型的三维体数据是通过 CT、MRI等成像技术采集的一组二维切片图像。通常这些图像都是按照某种规则(如每毫米一个切面)采集并重建而成,并有着相同数量的像素。这种体数据是规则的立体晶格,每个体数据的元素(又称为体素,Voxel)由一个通过采样周围相邻区域的体素获得的采样值来表示。
体绘制技术可以根据是否提取曲面分为直接体绘制和间接体绘制(又称为面绘制)两大类。间接体绘制是先从体数据中提取等值面,然后绘制等值面组成的多边形网格;直接体绘制则是将体数据直接作为一个离散三维数据场来绘制。而直接体绘制则直接从体数据中通过颜色与不透明度映射来生成三维数据集的二维投影图像。相对于间接体绘制来说,直接体绘制具有更大的优势,也就是不需要生成中间图元,直接对体数据进行成像,显示出全部的数据信息并且不会造成数据的丢失,而且成像的效果好于面绘制的结果,对人体内部的组织信息能够呈现出体数据更精细的显示结果,具有高度的保真性。由于直接体绘制是目前体绘制技术的主流,以下提到的体绘制都是指直接体绘制。
体绘制的更多信息,可参考:
体绘制(Volume Rendering)概述之1:什么是体绘制
http://blog.csdn.net/liu_lin_xm/article/details/4850575
体绘制(Volume Rendering)概述之2:体数据详解
http://blog.csdn.net/liu_lin_xm/article/details/4850593
1.2 传递函数
为了绘制三维体数据的二维投影,需要为每个体素定义不透明度与颜色。这通常由称为传递函数(Transfer Function)的映射来实现。传递函数为每个可能的体素定义相应的不透明度与颜色值。在体绘制过程中,体数据首先要经过传递函数,将测量得到的灰度值映射为用于显示的不透明度值和颜色值,然后通过光线投射法或者其它体绘制算法绘制出一种根据体数据中所有体素的颜色与不透明度叠加而成的具有立体感的投影图像。
体绘制时,每个采样值都必须映射为不透明度与颜色。这种从体素到不透明度与颜色的映射是通过传递函数来实现的。传递函数可以是简单的线性函数、分段线性函数或者任意的表。
在VTK中,传递函数由颜色传递函数(vtkColorTransferFunction)与不透明度传递函数(vtkPiecewiseFunction)两个类来处理。