三维图像可视化技术的设计与开发.docx

上传人:b****8 文档编号:9651012 上传时间:2023-02-05 格式:DOCX 页数:26 大小:222.44KB
下载 相关 举报
三维图像可视化技术的设计与开发.docx_第1页
第1页 / 共26页
三维图像可视化技术的设计与开发.docx_第2页
第2页 / 共26页
三维图像可视化技术的设计与开发.docx_第3页
第3页 / 共26页
三维图像可视化技术的设计与开发.docx_第4页
第4页 / 共26页
三维图像可视化技术的设计与开发.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

三维图像可视化技术的设计与开发.docx

《三维图像可视化技术的设计与开发.docx》由会员分享,可在线阅读,更多相关《三维图像可视化技术的设计与开发.docx(26页珍藏版)》请在冰豆网上搜索。

三维图像可视化技术的设计与开发.docx

三维图像可视化技术的设计与开发

三维图像可视化技术的设计与开发

第一章医学图象可视化技术的研究

1.1引言

现代各种医学成像技术如X射线断层成像(X-CT),磁共振成像(MRI),超声成像(US),单光子发射断层成像(SPECT和正电子发射断层成像(PET),为人体不同部位提供了多种不同时空分辨率的二维医学图像,形成了现代医学影像诊断学的基础,极大的推动了医学诊断和临床治疗的发展。

随着现代计算机辅助技术、虚拟现实等现代技术的发展,人们对直观的三维医学图像的需求也日益增强,医学图像三维可视化近来成为医学成像发展的热点。

1.2医学图像三维可视化技术

1.2.1 三维可视化概述

医学图像的三维可视化的方法很多,但基本步骤大体相同。

从CT/MRI或超声等成像系统获得二维断层图像,然后需要将图像格式(如DICOM)转化成计算机方便处理的格式。

通过二维滤波,减少图像的噪声影响,提高信噪比和消除图像的尾迹。

采取图像插值方法,对医学关键部位进行各向同性处理,获得体数据。

经过三维滤波后,不同组织器官需要进行分割和归类,对同一部位的不同图像进行配准和融合,以利于进一步对某感兴趣部位的操作。

根据不同的三维可视化要求和系统平台的能力,选择不同的方法进行三维体绘制,实现三维重构。

1.2.2关键技术

   下面主要讨论在二维图像的获取后,进行三维图像重构过程中的一些关键技术:

   图像分割是三维重构的基础,分割效果直接影像三维重构的精确度。

图像分割是将图像分割成有意义的子区域,由于医学图像的各区域没有清楚的边界,为了解决在医学图像分割中遇到不确定性的问题,引入模糊理论的模糊阀值、模糊边界和模糊聚类等概念。

快速准确的分离出解剖结构和定位区域位置和形状,自动或半自动的图像分割方法是非常重要的。

在实际应用中有聚类法、统计学模型、弹性模型、区域生长、神经网络等适用于医学图像分割的具体方法。

   由于可以对同一部位用不同的成像仪器多次成像,或用同一台仪器多次成像,这样产生了多模态图像。

多模态图像提供的信息经常相互覆盖和具有互补性,为了综合使用多种成像模式以提供更全面的信息,需要对各个模态的原始图像进行配准和数据融合,其整个过程称为数据整合。

整合的第一步是将多个医学图像的信息转换到一个公共的坐标框架内的研究,使多幅图像在空间域中达到几何位置的完全对应,称为三维医学图像的配准问题。

建立配准关系后,将多个图像的数据合成表示的过程,称为融合。

在医学应用中,不同模态的图像还提供了不互相覆盖的结构互补信息,比如,当CT提供的是骨信息,MRI提供的关于软组织的信息,所以可以用逻辑运算的方法来实现它们图像的合成。

   当分割归类或数据整合结束后,对体数据进行体绘制。

体绘制一般分为直接体绘制和间接体绘制,由于三维医学图像数据量很大,采用直接体绘制方法,计算量过重,特别在远程应用和交互操作中,所以一般多采用间接体绘制。

在图形工作站上可以进行直接体绘制,近来随着计算机硬件快速发展,新的算法,如三维纹理映射技术,考虑了计算机图形硬件的特定功能及体绘制过程中的各种优化方法,从而大大地提高了直接体绘制的速度。

体绘制根据所用的投影算法不同加以分类,分为以对象空间为序的算法(又称为体素投影法)和以图像空间为序的算法(又称为光线投射法),一般来说,体素投影法绘制的速度比光线投射法快。

由于三维医学图像的绘制目的在于看见内部组织的细节,真实感并不是最重要的,所以在医学应用中的绘制要突出特定诊断所需要的信息,而忽略无关信息。

另外,高度的可交互性是三维医学图像绘制的另一个要求,即要求一些常见操作,如旋转,放大,移动,具有很好的实时性,或至少是在一个可以忍受的响应时间内完成。

这意味着在医学图像绘制中,绘制时间短的可视化方法更为实用。

   未来的三位可视化技术将与虚拟现实技术相结合,不仅仅是获得体数据的工具,更主要的是能创造一个虚拟环境。

1.3 在医学诊断和临床中的应用

1.3.1 虚拟内窥镜

   虚拟内窥镜是利用CT、MRI或超声波获得二维断层结构图像,进行三维可视化处理,在计算机屏幕上生成具有内窥镜可视效果的、病人结构组织序列的三维可视化图像,结合虚拟现实技术,计算机可以显示连续的三维器官内腔结构图,并且可以沿这个虚拟的内部空腔做飞行观察,模拟传统的内窥检查过程,观察到类似于光学内窥镜观察到的影像,甚至还可以显示解剖结构的三维外观图像以及各个方位的CT和MRI切片图像。

   虚拟内窥镜结合了传统内窥镜和CT、MRI等断层成像的优点。

作为新式的非侵入式疗法,不会产生感染出血等不良后果,具有重复性使用、动态病理分析等优点,此外可以模拟检查光学内窥镜不能检查的人体部位,如脑,内耳,脊髓管、血管等。

   在虚拟耳鼻喉镜、虚拟胃肠镜、虚拟食道-支气管等方面已经处于初期临床阶段,通用电器公司GE还开发了一套虚拟内窥镜医学应用系统VEMS(VirtualEndoscopyMedicalSystem)。

图像分辨率是虚拟内窥镜应用的最大障碍,在临床应用中,虚拟内窥镜图像的分辨率比不上真正的光学内窥镜,这有待于高分辨率的医学成像系统的开发应用;由于准确配准的算法等限制也无法做到在解剖结构上很精确,在显示和实时交互方面还需要进一步研究,评价虚拟内窥镜系统的标准也在建立当中,所以虚拟内窥镜在临床上实际应用还需要在理沦上进一步完善和大规模临床试验。

1.3.2 计算机辅助手术和图像指导治疗技术

在外科手术中引入计算机辅助手术系统,可以提高手术的可靠性和精度,减少外科创伤,制定更加科学的手术计划。

例如早期在脑神经外科手术中的应用,应用CT图像引导手术导航系统,准确地定位脑肿瘤的位置和大小,并通过可视化手段让医生看到在病灶周围的血管结构和神经,再经过详细的手术计划论证,最后确定一个最佳的进刀方案,尽量减少肿瘤周围健康的脑神经和脑组织在手术中的损伤。

医生可以结合可视化的脉管,进行切除计划的增加或减少,从而在实际中调整手术计划,这种手术计划的导航在三维中是可视化的,从而

使得医生的主观决定得到更好的保证。

肝脏肿瘤手术计划中三维可视化技术的应用,它显示了肝部主要脉管系统,肿瘤,安全区域边缘,以及肿瘤切割计划。

不仅手术前进行三维重建的静态图像,而且可以实现在手术中显示手术场景计算机模型建模和手术工具、实际创伤及目标结构的空间位置、相互作用及形态改变,能够测试医生对治疗工具相对目标区的最佳定位能力,实现手术室中基于虚拟现实显示的手术导航。

   在放疗中,由CT与MR图像的融合提供的可视化图像为放疗提供指导。

利用MR图像勾勒画出肿瘤的轮廓线,它描述肿瘤的大小;利用CT图像计算出放射剂量的大小以及剂量的分布,减少患者所受的辐射量,并及时修正治疗方案。

1.3.3 远程医疗中应用

   利用网络环境,对CT、MRI、超声等图像数据进行远程传送和数据共享,进一步可以实时协同可视化操作,最终达到远程放射计划与治疗、远程手术及远程医学培训等目的。

远程医疗和远程手术的基础核心之一就是可视化的医学模型和图像,远程会诊和手术就依赖于三维可视化技术向分布式协同可视化的发展。

分布式协同可视化是指多个用户同时进行数据的可视化操作,用户之间及用户与数据之间均可进行交互作用。

由于远程手术系统的交互式操作,对三维医学图像体绘制和显示有更高的技术要求,其难点在于如何实现协同可视化。

具体实现时,考虑在并行分布式网络计算的总体构架下,采用服务器-客户端总体结构,使用VRML(virtualrealitymodelinglanguage)、JAVA,OpenGL等编程工具来实现基于Web的医学图像三维可视化。

分布式协同可视化在远程医疗领域一个例子是TelelnViVo系统,利用自由手臂上的超声传感器获得图像和位置等信息,合成三维图像,存储为符合DICOM3标准格式,通过TCP/IP通讯协议传输。

   另外医学图像三维可视化在医学计算机辅助教学中得到应用,可以模拟真实人体环境,进行模拟解剖等训练。

美国国家医学图书馆提供的虚拟可视化人体数据库VHD(VisibleHumanDatasets),不仅呈现了完整的三维可视化真实人体,还可以通过网络远程交互式操作,学习人体结构和解剖。

1.4 结束语

   上面各种技术应用的基础之一是医学图像的三维可视化。

作为新兴的医学影像诊断技术,在临床上还存在诸如精确度不高、医生观察视角不适应、实时交互性差等各种问题,应用三维可视化的诊断治疗方法如虚拟内窥镜、手术导航计划等,目前不可能代替传统的诊断治疗方法。

但是上述领域的应用显示了医学图像三维可视化技术的广阔发展前景,它已经为医学诊断和治疗提供全新、科学、方便的工具,随着计算机辅助技术和虚拟技术等现代技术的进一步推动,三维可视化技术和成像设备的完善,三维可视化技术必将在医学领域发挥其越来越重要的作用。

在下面的一章里,我将重点介绍虚拟技术相关,并用VC++6.0实现一个三维图象的编辑见面。

在读入3DS数据的时候涉及到3DS模型的三维重建处理技术,限于篇幅的关系,本文只就编辑框架的内容做相关设计,其他的技术请读者参阅相关的资料或者本文中的程序实现。

 

第二章对三维数据模型的交互控制

2.1引言

科学可视化,计算机动画和虚拟显示已经成为近年来计算机图形学的三大热门的话题,其技术核心是三维图形。

在医学领域中模拟可视化技术的应用越来越被大家重视,本文就使用到的程序编辑器做相关的介绍,以设计三维数据模型的编辑控制界面为主,涉及到的内核请读者参阅最终的程序。

OpenGL作为一种三维软件包,在交互式三维图形建模能力和变成方面有不可比拟的优越性。

OpenGL灵活方便地实现了二维和三维的高级图形技术,在性能上表现得异常优越。

它具有建模、变换,、光线处理、色彩处理、动画以及更先进的能力,如纹理映射、物体运动模糊效果、雾化效果等。

OpenGL为实现逼真的三维立体效果,建立交互的三维场景提供了优秀的软件工具。

在三维图形程序设计过程中,对于那些非常复杂的图形,如一个非常精致的动物模型和一个逼真的地形场景等,我们不可能依赖与单纯利用OpenGL的是实例库提供的基本几何体来构造,一次性的内存中使用基本的绘图语句编写显然也不能实现。

因此,我们自然会想到,利用三维建模工具建好模型以后,以一定的三维数据存储结构保存这些复杂的三维模型。

然后利用OpenGL读取模型数据,再利用OpenGL提供的功能操作和管理自己用辛勤汗水制作的精美作品。

3DS是一种非常普遍的数据格式,以3DS格式保存的三维图形文件非常丰富。

种类繁多的各种三维图形素材光盘以及内容丰富的网上图形站点,都有丰富的3DS文件库。

微机上的3DStudio软件制作起来也很方便。

因此学会读取和操作的3DS文件对于建立比较实用的三维图形应用软件非常重要。

简单介绍一下VC中OpenGL编程的步骤:

1)使用AppWizard创建应用程序框架,在文档和视结构中,视负责窗口中内容的显示,因此所有的OpenGL绘制工作应放在视图类进行;2)利用ClassWizard给视类添加如下成员函数:

重载PreCreateWindow函数;响应WM_CREATE消息的OnCreate函数;响应WM_SIZE消息的OnSize函数;响应WM_ERASEBKGND消息的OnEraseBKgnd函数;响应WM_DESTROY消息的OnDestroy函数;重载OnInitialUpdate函数。

其他的设计步骤读者参阅以下网站的介绍:

2.23DS模型的读取

2.2.13DS模型文件格式

3DS模型文件有许多块组成,每个块首先描述其后的信息类别,即该块是如何组成的,块的信息类别是用ID来标识的,块还包含了下一个块的相对位置信息。

因此即使你不了解下一个块的含义,你也可以很容易地跳过它,因为其中指出了下一个块相对于该块起始位置的偏移字节数。

与许多文件格式一样,3DS模型二进制文件中的数据也是按低位在前,高位在后的方式组织的,例如,两个十六进制字节:

4A5C组成的整型数,表明是高位字节,是低位字节。

对于长整型数如:

4A5C3B8F表明5C4A是低位字,而8F3B是高位字。

块的具体定义为:

块的前两项信息分别为:

块的ID和块的长度(也即是下一个相对于该块的字节偏移量),块的ID是一个整型数,而块的长度是一个长整型数。

每个块实际上是一个层次结构,不同类型(ID)的块,其层次结构也不相同.3DS的模型文件中有一个基本块,其ID是4D4D,每一个3DS模型文件的开头都是由这样的构成。

基本块内的快称为主块。

主块包括3D编辑器块和关键块,其中3D编辑器包括材质列表块,两配置块,视口定义块,物体定义块等,这其中的块有可以逐级包含一些块,总之3DS模型文件是由块组成的一种层次结构。

在关于3DS文件格式可参考相关资料,由篇幅关系,在此不一一详述。

2.2.2读取3DS文件到自定义的图形数据结构

熟悉3DS模型文件结构以后,在程序中,为读取模型,我们需要建立对应的模型数据结构。

我们定义了9个全局结构,分别用来定义模型的面、顶点、纹理映射、面材质列表、颜色块、纹理、面材质、形体对象、场景对象的结构。

面结构包含顶点序号p0,p1,p2以及有关顶点顺序的面信息flags,其代码如下:

typedefstruct{

unsignedshortp0,p1,p2;

shortflags;

}H3dsFace;

顶点结构包含顶点的三维信息x,y,z,其代码如下:

typedefstruct{

floatx;

floaty;

floatz;

}H3dsVert;

纹理映射结构包含为顶点定义的俩个浮点型纹理映射坐标u,v,其代码如下:

typedefstruct{

floatu;

floatv;

}H3dsMap;

材质列表结构包含材质名称,与该材质相关的面的数目,相关的面列表的序号,其代码如下:

typedefstruct{

charname[MAXNAMESIZE];

unsignedshortNumFaces;

short*faces;

}H3dsMatlist;

颜色结构包含了3个浮点数分别表示颜色的红,绿,蓝分量,其代码如下:

typedefstruct{

floatred;

floatgreen;

floatblue;

}H3dsRGBColor;

纹理结构包含纹理名称以及一个相关的选项,其代码如下:

typedefstruct{

chartexturenname[MAXNAMESIZE];

shortoptions;

}H3dsTexture;

材质对象包含材质名称,环境光,漫反射光,镜面光,材质,透明度等,其代码如下:

typedefstruct{

charname

H3dsRGBColorambient;

H3dsRGBColordifusse;

H3dsRGBColorspecular;

Shortmat_type;

intdoublesided;

H3dsTexturetexture;

intoffset;

floatalpha;

}H3dsMat;

形体对象是整个3DS模型的核心部分,包括形体的名称,形体中顶点的个数,面个数,顶点列表,面列表,平移矩阵等一些重要的信息,其代码如下:

typedefstruct{

charname[MAXNAMESIZE];

unsignedshortNumFaces;

list

unsignedshortNumVerts;

unsignedshortNumMaps;

dinatesinmaplist;

intmatrix;

unsignedshortNumBindings;

H3dsFace*faceslist;

H3dsVert*verlist;

H3dsMap*maplist;

floatTraMatrix[3*];

translationmatrix

H3dsMatlist*bindings;

intoffset;

list

}H3dsMeshObj;

场景对象是我们需要获得的3DS模型数据的最终进入的结构,其中包括3DS模型数据所有形体对象的个数,形体,对象列表,材质树木,材质列表,代码如下:

typedefstruct{

unsignedshortmeshobjs;

inmeshobjeslist

H3dsMeshObj*meshobjlist;

unsignedshortNumMateriarls;

inthescence

H3dsMat*Material;

}H3dsScence;

具体操作的时候,我们定义了读入当前形体对象的顶点列表ReadVertList(H3dsMeshObj*meshobj),读入当前面函数列表ReadFace(H3dsMeshObj*meshobj),读入纹理映射坐标函数

ReadmapList(H3dsMeshObj*meshobj),读入形体数据结构ReadTriMeshBlocks(intposition,char*name);读入物体块函数ReadObjBlock(intposition)等,根据3DS模型文件有块组成,每个块都有ID标识,且块还包含下一个块的相对信息的特点,定义好获取模型的数据结构和操作函数以后,我们可以方便地实现模型的读取,即使某些块我们不知道具体的含义,亦可方便地跳过它。

在READ3DSclasses类里定义了以上数据结构,结构参考下图:

2.33DS模型的绘制

以上我们针对3DS模型文件的特点,定义了相关的数据结构,模型数据就可以方便地进入这些数据结构,但是在VC++6.0中要利用OpenGL将模型数据真实地绘制出来却是一件难事,为此我们在获取模型数据以后,并不是急于将它绘制出来,而是将它们转换到另外一个易于读取的数据结构中。

在转换的过程中,我们将顶点的法向量,纹理坐标与顶点联结在一起,将材质名称,各个分量光强度,面数目,面顶点的序号,纹理名称等与物体对象连接在一起。

我们定义的用OpenGL绘制的数据结构如下:

//颜色结构

typedefstruct{

GLfloatred;

GLfloatgreen;

GLfloatblue;

GLfloatalpha;

}OUTGL_RGB;

//顶点结构(顶点纹理,法向量,顶点坐标)

typedefstruct{

GLfloatu,v;

GLfloatnx,ny,nz;

GLfloatx,y,z;

}OUTGL_VERTEX:

//三角形的法向量结构

typedefstruct{

GLfloatp0,p1,p2;

GLfloatn0,n1,n2;

}OUTGL_TRIANGLE;

//三角形面结构

typedefstruct{

GLunitp0,p1,p2;

GLfloatn0,n1,n2;

}OUTGL_SURFACE:

//三角形列表接点

typedefOUTGL_TRIANGLENODE{

OUTGL_SURFACE*triangle;

Tices.Links

structOUTGL_TRIANGLENODE*next;

};

typedefstructOUTGL_TRIANGLENODETRIANGLENODE;

typedefstruct{

charname[50];

OUTGL_RGBambient;

OUTGL_RGBdiffuse;

OUTGL_RGBspecular;

intdoublesided;

GLunitNumTriangles;

OUTGL_SURFACE*TriangleIndexList;

OUTGL_TRIANGLE*CrunchedTriangleIndexList;

chartexturenname[50];

GLunittextureID;

GLunitNumStrips;

GLunit*StripStart;

GLunit*StripLength;

GLunitNumStipPoints;

GLunit*StripPoint;

}

typedefstruct{

GLunitNumVertex;

OUTGL_VERTEX*VertexLists;

GLunitNumPolygon;

GLunitstrip;

POLYGONLIST*PolygonList;

}M3DSObject;

最终模型由下面的函数绘制出来:

voidDraw3DSObject(M3DSObject*object)

{

unsignedintI,j/*,k*/;

intcurrent;

if(!

oblect->strip){

gllnterleavedArrays(GL_T2F_N3F_V3F,0,object->VertexLists);

for(unsignedintm=0;mNumPoygon;m++){

glMaterialfv(GL_FRONT,GL_AMBIENT,(GLfloat*)&object->Polygonlists[m],ambient);

glMaterialfv(GL_FRONT,GL_DIFFUSE,(GLfloat*)&object->Polygonlists[m],diffuse);

glMaterialfv(GL_FRONT,GL_SPECULAR,(GLfloat*)&object->Polygonlists[m],specular);

glDrawElements(GL_TRIANGLES,object->PolyonList[m].NumTriangles*3,GL_UNSIGNED_INT,object->PolygonLists[m].CrunchedTriangleIndexList);

}

}

else

{

gllnterleavedArrays(GL_T2F_N3F_V3F,0,object->VertexLists);

for(inti=0;iNumPoygon;i++){

glMaterialfv(GL_FRONT,GL_AMBIENT,(GLfloat*)&object->Polygonlists[m],ambient);

glMaterialfv(GL_FRONT,GL_DIFFUSE,(GLfloat*)&object->Polygonlists[m],diffuse);

glMaterialfv(GL_FRONT,GL_SPECULAR,(GLfloat*)&object->Polygonlists[m],specular);

current=0;

for(intj=0;jPoygonList[i].NumStrips;j++){

glDrawElements(GL_TRIANGLE_STRIP,object->PolyonList[i].NumStripLength,GL_UNSIGNED_INT,&object->PolygonLists[i].StripPoint[current]);

current+=object->PloygonLists[

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1