VTK中光线投射法实现体绘制

合集下载

基于VTK光线投射法的CT图像三维重建

基于VTK光线投射法的CT图像三维重建

jci )a dC mp se uci a —csn l r m.T eav nae addsda t e fh s refnt n e3 et n n o oi F nt ni R y at ga oi o t o n i g t h h d at s n i v a so eet e c o snt D g a n g t h u i i h
r c nsr ton w e ev ldae d c m pae e o tuci r a i t d a o n r d. T e r s l nd c t d t tt e VTK pp o c f3 viuai ai a a t o v n e c h e u ti i ae ha h a r a h o D s lz ton h sf s ,c n e i n e a g f ce c nd hih e i in y,a d t s ge o h m ho d be d p nd d on t e a plc t . n he u a ft e s ul e e e h p i ai on Key or VTK ,3D e o tuci n,CT ,r y— c sig w ds r c nsr to a a tn
Cl s m b r T 3 1 41 a s Nu e P 9 .
I 引言
可视 化工 具包 V K( i azt nT okt是 由 T Vs lai oli ui o )
了分析比 较。
2 V K绘 制 机 制 T
V K( i a zt n T ok ) 一 种 基 于 O e — T V s l a o oli 是 ui i t p n
M e n p n Zha g Hon m i LiX io e g iKa g i g n g n a fn

基于VTK的医学图像三维可视化实现

基于VTK的医学图像三维可视化实现

基于VTK的医学图像三维可视化实现郑小中;周振环;赵明【摘要】3D visualization of medical image on the platform of visual studio 2008 is realized by using visualization toolkit, focusing on how to use Marching Cubes algorithm and ray-casting algorithm for 3D reconstruction with all kinds of slices, such as DICOM slices and so. Interactive surface developed by MFC and summary of data preprocessing and optimization during the reconstruction are also discussed.%利用VTK可视化工具包在Visual Studio2008平台上实现了医学序列图像三维的可视化.在对三维数据的预处理和优化基础上,在MFC实现的可交互界面上,用Marching Cubes(立方体移动)算法和Ray—casting(光线投射)算法对DICOM等格式的切片进行三维重建.【期刊名称】《深圳职业技术学院学报》【年(卷),期】2011(010)005【总页数】9页(P17-25)【关键词】VTK;MFC;DICOM;立方体移动;光线投射【作者】郑小中;周振环;赵明【作者单位】五邑大学,广东江门529020;深圳职业技术学院,广东深圳518055;深圳职业技术学院,广东深圳518055;深圳职业技术学院,广东深圳518055【正文语种】中文【中图分类】TP317.4尽管计算机断层扫描(CT)及核磁共振(MR)已广泛应用于疾病诊断,但是这些医疗仪器只能提供人体内部的二维图像,医生只能凭经验由多幅二维图像对病灶的大小及形状进行估计,这给诊断带来了困难[1].此外,从宏观上来看,国内已经具备了医疗设备的生产能力,但许多医疗软件仍需高额从国外进口,致使大多数的医疗单位难以承受,对进口软件的维护成本较高,也增加了患者的负担.从微观上来看,用于图像处理的软件占据统治地位的仍旧是OpenGL和DirectX,而这 2种技术在使用上却存在着缺陷.例如OpenGL是开源的,但因其主要用于底层算法的实现,所以工作量及难度都比较大;而 DirectX又只限于Windows图像处理的开发,所以制约着图像处理开发的进步发展.本文以VTK(Visualization Toolkit)为基础,在Windows平台上,以Visual Studio 2008为开发平台,结合MFC(Microsoft Foundation Classes),对多种格式的二维切片、Marching Cubes算法和Ray-casting算法在VTK中的实现及优化进行研究,并实现了面绘制和体绘制.1 可视化工具包VTK1.1 VTK简介VTK(Visualization ToolKit)是一套用于计算机图形可视化及图像处理的开源的、面向对象的工具包,1993年由美国 GE公司研发部的 Will Schroeder和Ken Martin作为开源软件首次发布,并支持多平台(如Windows、Unix和Linux)的软件系统[2].VTK可以利用已成为工业标准的三维图形图像绘制库 OpenGL,使人们可以有效地利用各种支持OpenGL标准的显卡进行硬件加速处理,且实践证明 VTK在三维化的效果更好、速度更好.此外,VTK利用面向对象的编程模式大大简化了用OpenGL开发的代码复杂性,使编程更加简洁易读,代码的开源性也在不断地促使工具包的丰富和完善,用户可以根据自己的编程能力编写出适合自己的功能模块,其强大的功能已被医疗软件开发商和研究机构所认可.1.2 VTK的程序框架结构VTK主要由图形模型和可视化模型构成:1)图形模型主要包括的类有:vtkRenderWindow(绘制窗口)、vtkRenderer (绘制器)、vtkLight(光源)、vtkCamera(照相机)、vtkActor(角色)、vtkProperty(特征)和Transform(变换).2)可视化模型采用数据流(Dataflow)方法将各个对象连接成可视化网络结构,最终形成流水线管道(Pipeline),管道是贯穿于VTK的一个核心内容,其每个对象将负责相应的数据处理或用户输入等操作.可视化模型的最高层次是数据源,因为VTK并不善于绘制复杂的图形结构,所以其数据一般来自自带的简单数据集(Simple Source)或者外部的图像文件;将数据源传送给各种数据处理对象(如等值面的提取,表面法线的生成等滤波器或函数),对数据进行加工处理;最后以一个或多个映射器(Mapper)将数据集映射为图库中对应的图形几何,以此结束管道.映射器的输出主要用于可视化或写入等操作.数据流中各个对象的处理联系紧密,尤其是滤波器、读/写图像等操作,所以可以由该对象的 Update()方法实时触发执行,以便为下步操作提供准备.图1展示了VTK的框架结构及可视化流水线[3].1.3 VTK的图像读取器目前医学影像设备种类繁多,成像原理及图像格式不尽相同,给图像处理带来了困难.VTK不仅提供了DICOM图像文件读取的接口,还提供了其他类型图像的接口,并可以用vtkImageShiftScale将其他数据类型的图像转换为VTK可以识别的unsigned short类型或者unsigned char类型,极大地方便了图像显示和处理操作.图2展示了VTK提供的5种图像读取器的类关系图及其主要成员函数,其中vtkVolume16Reader读取的图像主要用于三维可视化操作,其他4种既可读取单个图像也可以读取多个切片图像.·SetFilePrefix()和 SetFilePattern()共同设置读取文件的目录及文件名前缀格式,vtkDICOMImageReader的 SetDirectoryName()只需指定切片的读取目录即可(如果切片文件名没有特殊的扩张格式),如果每个切片有规范的文件名格式,需要采用SetFilePattern()予以说明[2].例如:读取文件夹 BMPFiles下切片格式为BN1.BMP BN2.BMP...BN256.BMP的 BMP文件时,除了SetFilePrefix()设置为“.../BMPFiles/BN”外,还需将SetFilePattern()设置为“%s%d.BMP”.图1 VTK框架结构及可视化流程图2 读取器类结构·SetDataExtent()用于指定切片的大小(前4个参数)和读取切片的范围(后2个参数);·SetDataSpacing()用于设置X,Y,Z轴方向上像素的间距. ·SetDataImageRange()主要用于设置读取的文件范围,常用于vtkVolume16Reader.·SetDataOrigin()设置数据集的中心坐标.·SetFileNameSliceOffset()用于设置从某个切片开始读取,默认值为 1,即从第一切片读取切片序列.·SetFileNameSliceSpa cing()用于设置读取有规律的切片,如将其设置为 2时,将读取切片filename.1,filename3,filename5....默认值为 1即连续读取切片序列.·SetDataDimension()用于设置切片的尺寸.2 VTK与MFC的接口本文以 Visual Studio 2008为例,首先确保VTK同Visual Studio2008已正确配置;其次将程序中用到的类库添加到“项目→属性→配置属性→链接器→输入→附加依赖项”中(注意每个类库需要附带扩展名.lib,且类库之间以空格隔开).此外,VTK与MFC的常见接口有两种:第一种方式可以采用 vtkRenderWindow类中的 SetParentId()函数设置绘制窗口的父窗口句柄,一般为 MFC中某控件的句柄(如staticText、当前视图、对话框等),以此将VTK的绘制窗口定位并覆盖在MFC指定的控件上,如renWin→SetParentId(hwnd).但由于该操作主要实现在控制台程序中,所以不仅无法实现MFC的鼠标响应和消息的传递等交换功能,而且还限制了后续代码的扩展,所以并不提倡该方法[3].第二种方法采用MFC的数据处理(文档类实现)和显示(视图类实现)分离机制,充分利用面向对象的编程风格和MFC的消息机制及类库函数,可以实现友好的交互界面.该操作用到的头文件主要有 vtkWin32OpenGLRenderWindow.h,vtkWin32 RenderWindowInteractor.h,vtkMFCWindow.h,对应的类库为vtkMFC.lib.该功能的实现需要解决如下3个主要问题:1)绘制窗口:通过vtkMFCWindow *m_vtkMFC=new vtkMFCWindow(this)将VTK的绘制窗口指定到MFC的视图窗口(该操作在视类中进行设置,所以直接用this即可,其他窗口对象也可以),并通过代码m_vtkMFC→GetRenderWindow()→Add Renderer(m_Renderer)将绘制器添加到绘制窗口中现实对角色的绘制操作.2)交互:利用代码m_vtkMFC→GetInteractor()→SetInteractorStyle(style)设置利用鼠标交互的方式,可以实现放缩、移动、旋转等操作.3)重绘:在视图类 OnDraw()函数中添加代码m_vtkMFC→DrawDC(pD C),当对绘制窗口(视图窗口)进行交换时,实现对绘制窗口进行重绘操作[4].本程序主要是基于MFC的FormView框架结构,首先在视类头文件中声明4个函数,void readFile()、void initSlider()、void setSlider()、void Draw() 分别实现切片的读取、滑块的初始化、滑块值的设置、数据流的实现;然后在OnInitialUpdate()中对程序启动时进行初始化,即调用readFile()、initSlider()、Draw();最后在各个滑块的OnNMReleasedcapturesclar1op()消息中对Draw进行调用,实现交互绘制.参考代码如下:3 三维可视化的实现三维可视化主要包括面绘制与体绘制2种.3.1 面绘制面绘制是采用分割技术对一系列的二维图像进行轮廓识别、提取等操作的过程,最终还原出被检测物体的三维模型,并以表面的方式显示出来.图3展示了面绘制的数据流结构.图3 面绘数据流3.1.1 提取等值面(Marching Cubes)对图像进行进行提取等值面操作(分割操作),不仅需要选用合适的分割算法,还需要了解被分割对象的组织结构,如:皮肤和骨骼的密度是不同的,并且头盖骨同其他部位的骨头密度也显然不同,根据不同组织具有不同的密度(或者灰度值)进行等值面提取操作.经典的Marching Cubes算法的基本原理:首先,假定原始数据是离散的三维空间规则数据场,用于医学诊断的断层扫描仪(CT)及核磁共振仪(MRI)等产生的图像均属于这一类型;其次,为了在这一数据场中构造等值面,给出所求等值面的值;最后,找出等值面经过的体元位置,求出该体元内的等值面并计算出相关参数,以便由常用的图形软件包或图形硬件提供的面绘制功能绘制等值面.由于该方法是逐个体元依次处理的,因此被称为移动立方体法(Marching Cubes).用MC方法求等值面的步骤为:①将三维离散规则数据场分层读入内存;②扫描两层数据,逐个构造体元,每个体元中的8个角点取自相邻的两层;③将体元每个角点的函数值与给定的等值面做比较,根据比较结果,构造该体元的状态表;④根据状态表,得出将与等值面又交点的体元边界;⑤通过线性插值方法,计算出体元边界与等值面的交点;⑥利用中心差分方法,求出体元各角点处的法向,再通过线性插值方法,求出三角形各定点处的法向;⑦根据各三角面片个顶点的坐标值及法向量绘制等值面图像.VTK主要提供了两种提取等值面的类vtkContourFilter滤波器和封装了 MC (Marching Cubes)算法类vtkMarchingCubes,最终通过设置SetValue (arg1,arg2)实现对某轮廓组织的提取,其中arg1是提取的标号一般从0开始,arg2是提取等值面的值,所以可以同时实现多个等值面的提取操作,但由于不同组织的等值信息难以分类,所以我们在这里采用滑块(Slider Control)进行调节.3.1.2 数据处理根据需要可以对读取的图像进行各种预处理或者优化操作,例如在 VTK 中通过vtkPolyDataNormals在等值面上产生法向量;用vtkStripper在等值面上产生纹理或三角面片等.最终实现图4等值面的绘制操作.程序的核心代码如下:3.1.3 面绘制实验结果实验数据来源于某骨质医院和 VTK数据包.图4采用读取器vtkVolume16Reader 读取93张64*64大小的头部CT数据,将vtkContourFilter设置为皮肤灰度值为500的绘制效果;图5用vtkDICOMImageReaderd读取34张胸腔DICOM图像,图像大小为512*512,vtkMarchingCubes设置骨骼灰度值150的绘制效果;图6利用257张BMP格式的头颅图像,图像大小为256*256,用vtkBMPReader读取数据,vtkMarchingCubes设置等值为80的绘制效果;图7为利用1878张大小为 587*341的 JPG格式人体骨骼图像,用vtkJPEGReader读取标号 1001到 2878的图像,vtkContourFilter设置等值为100的绘制效果. 3.2 体绘制体绘制不同于面绘制,面绘制需要生成中间几何图元,而体绘制是直接绘制,所以内存的需求较面绘制小,但是由于每切换一个视角需要重新对所有的像素点进行颜色、透明度等计算,所以需要的时间又比面绘制的长.本系统利用光线投射算法进行体绘制,光线投射算法的基本原理如图8所示.图4 头部皮肤效果图5 胸腔骨骼效果图6 头骨效果图7 人体骨骼效果图8 光线投射算法基本原理流程图1)数据预处理:常见有2种操作,一种是类型的转换,通过vtkImageShiftScale 将不同类型的数据集转换为 VTK可以处理的数据;另一种是剔除冗余数据,例如通过vtkStripper防止无效的旧单元的存在,提高绘制速度.2)数据分类:三维数据场中的数据是三维空间中多种不同物质的测量结果或计算机数值计算的结果.例如,在人体或动物的CT扫描图像中,对应用骨骼、肌肉和皮肤等不同密度的物质,就有不同的CT值,在CT图像中表现为具有不同的灰度值.为了在最终的可视化图像中以不同颜色正确地表示出共存的多种物质的分布,就需要对数据进行分类,找出数据与不同物质之间的对应关系;为了在最终图像中以不同颜色表示单一物质的不同属性,如温度、密度等,也需要进行分类.所以分类是整个可视化算法非常重要的一步,但是分类又是非常困难的,又如,人的头部同一组织结构往往具有不同的灰度值,而同一灰度值的像素又有可能属于不同的组织结构.因此,尽管图像处理和模式识别技术对物质分类问题进行了多年研究,但仍然只能对简单的或特定的三维数据场进行自动分类.本范例,为了方便寻找坡度或不同组织,采用滑块Slider Control进行实现.3)给数据点赋颜色值:将分类后的组织信息分别予以不同的颜色,便于图像分析是非常必要的,VTK 采用 vtkColorTransferFunction 类的AddRGBPoint()函数将不同组织信息转换为不同的颜色.4)给数据点赋不透明度值:在体绘制中,需要显示三维数据场的内部结构,因而需要生成具有透明度的图像.因此对每个体元不仅要根据分类结果赋予不同的颜色值(R,G,B),而且还要赋予不透明度值α.α=1表示该体元完全不透明;α=0则表示完全透明.体元颜色值由实现, iP为第i种物质所占的百分比, ),,( iiiiii BaGaBaCi= 为第i中物质的颜色值.VTK采用分段函数vtkPiecewiseFunction类的AddPoint()函数实现不同组织透明度的设置.5)光照效应计算:VTK中采用光线函数 vtk-VolumeRayCastCompositeFunction进行投射,最终用vtkVolumeRayCastMapper进行光效应等的计算.6)图像合成:主要通过设置 vtkVolume的SetMapper()和 SetProperty()函数将上述类型进行合成.VTK中对应上述的核心代码如下:面绘制图像5和6,经滑块调节后体绘制效果见图9,10,得到较高的绘制效果. 图9 头部光线投射重建效果图10 胸腔光线投射重建效果参考文献:[1] 齐敏,位军,陈世浩.M Lehmpfuhl.基于 VTK的医学三维可视化分析系统[J].计算机仿真,2008,25(3):242-245.[2] 骆建珍,林财兴,孟令旗,等.DICOM医学图像三维可视化系统的研究[J].机电一体化,2007,13:45-48.[3] 罗火灵,许永忠,陈世仲.基于VTK和MFC的医学图像三维重建研究和实现[J].生物工程学进展,2010,31(1):23-28.。

vtk常用算法类

vtk常用算法类

vtk常用算法类vtk常用算法类包含了许多用于可视化和图形处理的算法。

本文将介绍其中一些常用的算法类,包括数据滤波、几何变换、体绘制和体积渲染等。

1. 数据滤波算法类:vtk常用的数据滤波算法类包括高斯平滑、中值滤波、边缘检测和图像增强等。

这些算法通过对数据进行处理和转换,可以去除噪声、平滑图像、提取边缘等。

其中,高斯平滑算法通过卷积运算实现图像平滑,中值滤波算法通过取中值来去除噪声。

2. 几何变换算法类:vtk提供了许多几何变换算法类,包括旋转、平移、缩放和剪切等。

这些算法可以对几何对象进行变换,实现对象的位置、尺寸和形状的变化。

例如,平移算法可以将对象沿指定方向移动一定距离,旋转算法可以将对象绕指定轴旋转一定角度。

3. 体绘制算法类:vtk的体绘制算法类用于将体数据以三维形式显示。

常用的算法包括体绘制、等值面提取和体渲染等。

体绘制算法可以将体数据以体素的形式显示,等值面提取算法可以提取出体数据中特定数值的等值面,体渲染算法则可以通过光照和材质等效果来实现真实感的渲染。

4. 体积渲染算法类:体积渲染是一种将体数据进行透明渲染的技术,可以实现更加真实的三维效果。

vtk提供了多种体积渲染算法类,包括体积光线投影、图像空间光线投影和体绘制等。

这些算法通过对体数据进行光线追踪和投影,可以实现透明效果,并能够显示体数据内部的结构和细节。

除了以上常用算法类,vtk还提供了许多其他有用的算法类,如曲面重建、点云配准和图像分割等。

这些算法类可以帮助用户实现各种图形处理和可视化任务。

例如,曲面重建算法可以根据点云数据生成光滑的曲面模型,点云配准算法可以将多个点云数据对齐到同一坐标系,图像分割算法可以将图像分割成多个区域。

vtk常用算法类提供了丰富的功能和灵活的接口,可以满足各种可视化和图形处理的需求。

无论是进行数据滤波、几何变换、体绘制还是体积渲染,vtk都提供了相应的算法类来实现。

通过使用这些算法类,用户可以方便地进行图形处理和可视化,并得到满意的结果。

VTK技术在雷达图像可视化中的研究与应用

VTK技术在雷达图像可视化中的研究与应用

VTK技术在雷达图像可视化中的研究与应用摘要:利用VTK对雷达图像数据进行三维可视化研究,其中研究了表面绘制和体绘制两种绘制技术:表面绘制用移动立方体法实现,体绘制用合成光线投影算法实现。

实验高效快捷地显示了雷达二维图像,实现了雷达回波数据的空间整体三维重建显示和x,y,z三维任意切面的雷达回波强度显示,并且可以任意方向切割、旋转、放大与平移三维图像。

VTK应用于雷达图像三维可视化更为直观和全面的展现了空间回波的分布状况。

关键词:VTK;可视化;体绘制;雷达图像;光线投影算法中图分类号:TP391.4文献标识码:B文章编号:1004-373X(2010)06-122-03Study and Application in Visualization of Radar Image Based on VTKHOU Huan,HAN Lei,LIN Zhongyu(College of Information Science & Engineering,Ocean University of China,Qingdao,266100,China)Abstract:To study the radar image data′s three dimensional visualization,there are two types of rendering techniques:surface rendering and volume rendering.Surfacerendering uses marching cubes algorithm,volume rendering uses composited ray-casting algorithm.It efficiently and easily displays the two-dimensional radar image,realizes three dimensional reconstruction of radar reflectivity,achieves arbitrary x,y,z three-dimensional cross-section of the radar echo intensity display,also it can arbitrary- orienting clip,rotate,zoom and translate the three dimensional image.Applying VTK in the three dimensional visualization of radar image comprehensively displays spatial distribution of the radar echo.Keywords:VTK;visualization;volume rendering;radar image;ray-casting algorithm冰雹等强对流天气是我国的主要灾害性天气之一,给人们的生产、生活带来极大的不便与危害。

vtk渲染原理

vtk渲染原理

vtk渲染原理
VTK(Visualization Toolkit)的渲染原理主要基于体绘制(Volume Rendering)技术。

体绘制是一种能够处理大规模数据集的方法,其原理是通过颜色和不透明度等属性来表示数据场中的不同值,然后对整个数据场进行渲染,从而生成三维图像。

在VTK中,体绘制的过程通常包括以下步骤:
1. 数据预处理:对原始数据进行必要的预处理,如滤波、插值、分割等,以便更好地表示数据的特征。

2. 分类映射:根据数据的不同特征,将其分为不同的类别,并为每个类别分配不同的颜色和不透明度值。

这一步是通过定义一个颜色映射表来实现的。

3. 光线投射:根据视点和数据场的位置关系,计算出光线与数据场的交点,并将交点处的颜色和不透明度值进行混合,生成最终的图像。

这一步是通过光线投射算法实现的。

4. 纹理映射:在体绘制中,纹理映射通常用于增加图像的细节和真实感。

通过将纹理图像映射到数据场的表面上,可以在渲染过程中实现更加逼真的效果。

总的来说,VTK的渲染原理是通过体绘制技术将大规模数据场转换为三维图像的过程。

通过不同的算法和技巧,VTK能够生成高质量、高分辨
率的图像,广泛应用于科学计算、医学影像等领域。

VTK体绘制

VTK体绘制

●渲染技术⏹几何渲染技术:通过绘制几何图元(顶点、线段、面片等)来渲染数据。

绘制图像时先在空间中建立一个四边形图元,然后以纹理映射的方式将图像贴图到该图元上进行渲染;绘制三维模型时通常会分解一系列的多边形面片进行绘制。

速度快,但是不能显示体数据内部的细节。

例如渲染人的三维CT体数据时,通过几何渲染只能在切片图像之间进行切换,而不能对体数据内部细节进行立体观察。

⏹体绘制:三维重建,直接利用体数据来生成二维图像的绘制技术。

与面绘制不同,体绘制不需要提取体数据内部的等值面,它是对三维体数据进行采样和合成的过程。

能通过设置不透明度值来显示体数据内部的不同成分和细节。

两种方法的不同点主要在Mapper和Actor/Volume处。

●vtkVolumeMapper:所有体绘制Mapper类的虚基类,提供接口函数,并由其子类实现具体功能。

⏹vtkVolumeRayCastMapper:光线投射法,基于图像序列的最常用的体绘制方法。

◆基本原理:从投影图像平面的每个像素沿着视线方向发射一条穿过体数据的射线,然后在射线上按照一定的步长进行等距采样,对每个采样点采用插值技术来计算其体素值,根据颜色传递函数和不透明度传递函数来获取相应的颜色值和不透明度,最后利用光线吸收模型将颜色值进行累加直至管线穿过体数据。

◆投影光线上的采样点步长:决定了体绘制的精度和速度,步长越小,采样点就越多,提高体绘制效果的同时计算量也会增加。

SetSampleDistance(float)。

调整采样步长主要考虑的因素有样本间距、标量数据以及标量数据映射的颜色和不同明度变化率。

◆图像采样间距/投影光线间隔:默认采样间距为1,每个像素对应一条投影光线;设置为0.5,每个像素对应4条投射光线;设置为2,每4个像素对应一条投影光线。

SetImageSampleDistance(float)先用SetAutoAdjustSampleDistance(0);关闭自动调整采样,默认情况下该函数的功能是开启的,以保证在图像旋转等交互时,能够自动调整采样距离以保证实时性。

VTK体绘制_光线投影+最大密度投影+等值面法

VTK体绘制_光线投影+最大密度投影+等值面法

VTK体绘制_光线投影+最⼤密度投影+等值⾯法1.vtkVolumeMappervtkVolumeMapper是所有体绘制Mapper类的虚基类,提供接⼝函数,并由其⼦类实现具体功能。

该类的继承关系如下图所⽰:应该掌握⼀些常⽤的体绘制类。

2.光线投射:vtkVolumeRayCastMapper光线投射法是最常⽤的体绘制⽅法。

它是⼀种基于图像序列的直接体绘制⽅法。

光线投影法的基本原理是从投影图像平⾯(通常为平⾯)的每个像素沿着视线⽅向发射⼀条穿过体数据的射线,然后在射线上按照⼀定的步长进⾏等距采样,对每个采样点采⽤插值技术来计算其体素值,根据颜⾊传输函数和不透明度传输函数来获取相应的颜⾊值和不透明度,最后利⽤光线吸收模型将颜⾊值进⾏累加直⾄管线穿过体数据。

这样,就可以得到当前平⾯像素的渲染颜⾊,最终⽣成显⽰图像。

光线投影法的优点是能够⽐较精确地模拟原始体数据,但计算量较⼤,实时体绘制对计算机硬件的要求⽐较⾼。

在VTK中,VTKVolumeRayCastMapper类可⽤于实现光线投影体算法,并⽣成渲染图元数据传递给vtkVolume对象进⾏渲染。

vtkVolumeRayCastMapper采⽤软件⽅法来实现光线投影算法,精度⾼但是计算量⽐较⼤,因此渲染速度相对⽐较慢。

该类内部实现了两个⾮常重要的函数:vtkVolumeRayCastMapper::SetInput(vtkImageData*):该函数⽤于设置输⼊图像数据;vtkVolumeRayCastMapper::SetVolumeRayCastFunction(vtkVolumeRayCastFunction*):该类⽤于设置光线投射函数。

vtkVolumeRayCastMapper中计算每条光线在通过体数据后的颜⾊是通过定义的vtkVolumeRayCastFunction对象来实现的。

因此,必须为vtkVolumeRayCastMapper指定⼀个vtkVolumeRayCastFunction象,vtkVolumeRayCastFunction是⼀个虚基类,他包含三个⼦类。

基于VTK的体绘制三维重建方法

基于VTK的体绘制三维重建方法
场可视化 。
1 可视 化工具 V K T [ ]
可视 化工 具 V K是 由 Wiim J S h e e, en t Mat , la . oe sn三人 于 19 在 T la . c m drK n e M. rn Wii E L rne h i lm 9 3年
文献 的基础 上 , 利用 面 向对象 的建 模技 术 , 计 和实 现开 放 的 三维 可视 化工 具 箱 。Ⅵ ' 造 在 c++语 设 K构 言之上 , 括 三维计算 机 图形 学 、 包 图像处 理 和可视化 三大部 分功 能 。它包 括两 个 子 系统 : 一个 是 c++ 类 库 ; 一个是支 持 Jv 、c、yhn语 言 操作 编译 过 的 c+ +类 库 的封 装 层 。V K是 可 视化 编程 的应 用 另 aaTlPto T 库 , 可以作 为其它 不 同的 图像库 的接 口。 它 V K能够 支持 和处 理多 种表示 格 式 的数 据 。如 : 则 的或 无 规则 的点 阵 ( o t e ) 图像 (m g ) T 规 pi t 、 n ss iae 、
维普资讯
第2 4卷第 6期
V0 . 4. o 6 12 N .

攀枝花学院学报
J u a fP n h h a U ie st o r l o a z i u n v ri n y
20 0 7年 1 2月
De 2 7 c. OO
计 算机及 通信研 究 ・
基 于 V K的体绘 制 三 维 重 建 方 法 T
陈 欣 波
( 攀枝花学院 电气信息工程学 院 , l l l  ̄J 攀枝花 6 70 ) 10 0


Vsa zt nT o i是一个面 向对象的可视化类 库 , i l ao ol t ui i k 它为从 事可视化 应用程 序开 发的广大科研 工作
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VTK中光线投射法实现体绘制【转】
VTK中光线投射法实现体绘制
1、体绘制函数
VTK 为使用者提供了三种用于光线投射法的函数分别是:
等值面绘制函数(vtkVolumeRayCastIsosurfaceFunction);
最大密度投影函数(vtkVolumeRayCastMIPFunction);
合成体绘制函数(vtkVolumeRayCastCompositeFunction)
其中最常用的是合成体绘制函数,最大密度投影函数在显示血管影像方面有比较好的作用。

但是如图所看到的,MIP函数没有空间立体感,也就是不能提供深度的信息。

2、不透明度映射函数
不透明度映射函数是设置光线方向上的灰度值及其不透明度映射。

vtkPiecewiseFunction *opacityTransferFunction = vtkPiecewiseFunction::New(); opacityTransferFunction->AddPoint(10, 0.0);//灰度值及不透明度值opacityTransferFunction->AddPoint(50,0.1);
opacityTransferFunction->AddPoint(200 ,0.1);
opacityTransferFunction->AddPoint(2900,0.1);
opacityTransferFunction->AddPoint(2950,0.8);
opacityTransferFunction->AddPoint(3050,1);//不透明度值为1则为完全不透明opacityTransferFunction->ClampingOff();
3、颜色映射函数
颜色映射函数是设置灰度值与RGB颜色的映射。

vtkColorTransferFunction *colorTransferFunction = vtkColorTransferFunction::New();
colorTransferFunction->AddRGBPoint(0.0, 0.91, 0.65, 0.66); //灰度值及RGB颜色值
colorTransferFunction->AddRGBPoint(30.0, 0.91, 0.65, 0.66); colorTransferFunction->AddRGBPoint(128.0, 0.91, 0.65, 0.66); colorTransferFunction->AddRGBPoint(1200.0, 0.43, 0.43, 0.43); colorTransferFunction->AddRGBPoint(1800.0, 0.43, 0.43, 0.43); colorTransferFunction->AddRGBPoint(2950, .9, 0.0, 0.0); colorTransferFunction->AddRGBPoint(3050, .9, 0.0, 0.0); colorTransferFunction->ClampingOff();
4、梯度变换函数
梯度变换函数设置灰度值变换的大小与不透明度之间的映射。

vtkPiecewiseFunction *gradient=vtkPiecewiseFunction::New();
gradient->AddPoint(50,.2);//灰度值变化梯度与不透明度的关系
gradient->AddPoint(1500,.7);
gradient->AddPoint(2000,.1);
5、体数据属性设置
vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New(); volumeProperty->SetColor(colorTransferFunction);//载入颜色映射函数volumeProperty->SetScalarOpacity(opacityTransferFunction);//载入不透明度映

volumeProperty->SetGradientOpacity(gradient);//载入梯度映射volumeProperty->ShadeOn();
volumeProperty->SetInterpolationTypeToLinear();//采用线性插值
6、光线投射函数设置及体绘制映射
本程序采用合成体绘制函数:
vtkVolumeRayCastCompositeFunction*compositeFunction= vtkVolumeRayCastCompositeFunction::New();
vtkVolumeRayCastMapper *volumeMapper = vtkVolumeRayCastMapper::New();
volumeMapper->SetVolumeRayCastFunction(compositeFunction);//载入体绘制
方法
volumeMapper->SetInput(append->GetOutput());//载入图像数据volumeMapper->SetSampleDistance(.5);
vtkVolume *volume = vtkVolume::New();
volume->SetMapper(volumeMapper);//设置映射
volume->SetProperty(volumeProperty);//设置属性。

相关文档
最新文档