三维绘制包括面绘制和体绘制。体绘制可以提供最接近人眼视觉的绘制效果。体绘制的方法包括:
- RayCasting
- Splatting
- Shear Warp
- Texture based volume rendering
其中RayCasting是最常用的方法之一。包括四个步骤:Ray casting, Sampling, Shading and Composition。具体的描述如下:
在RayCasting算法中,主要涉及到的是transfer function的概念。Transfer Function通常被用来对不同密度或者不同位置的体素单元加上颜色和透明度属性。Transfer Function的实例如下:
在VTK中,实现volume Rendering的程序示例如下:
#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkVolume16Reader.h>
#include <vtkVolume.h>
#include <vtkVolumeRayCastMapper.h>
#include <vtkGPUVolumeRayCastMapper.h>
#include <vtkVolumeRayCastCompositeFunction.h>
#include <vtkVolumeProperty.h>
#include <vtkColorTransferFunction.h>
#include <vtkPiecewiseFunction.h>
#include <vtkCamera.h>
#include <vtkDICOMImageReader.h>
#include <vtkImageShiftScale.h>
int main (int argc, char *argv[])
{
vtkSmartPointer< vtkDICOMImageReader > reader = vtkSmartPointer< vtkDICOMImageReader >::New();
reader->SetDirectoryName("E:\\Coding\\ReadDICOMSeries\\data\\DicomSeries");
reader->SetDataScalarTypeToUnsignedShort();
reader->SetDataSpacing(1, 1, 1);
reader->SetDataByt