微型电脑应用
MICROCOMPUTER APPLICATIONS
2000　Vol.16　No.1　P.57-58



利用OpenGL实现医学图像三维表面重建
刘才　高贞彦　彭秀艳　李学忠
摘　要：OpenGL是目前应用比较广泛并且性能非常优越的三维图形应用程序库，本文重点介绍了其在医学图像三维表面重建中的一些具体应用。
关键词：三维重建　断层图像　三维显示　OpenGL
Abstract：OpenGL is a high qualified library of 3D graph applications , which is widely used. This paper introduces some applications of it in reconst ructing the 3D surfaces of medical images.
Keywords：3-D reconstruction　sectional image　3-D display OpenGL▲
一、引言
　　1.概述
　　人体组织与器官的三维成像技术在现代临床医学中起着越来越重要的作用，运用计算机图形学和图像处理技术，将计算机断层扫描(Computerized Tomography)核磁共振成像(Magnetic Resonance Imaging)和超生(Ultrasonography)等成像设备得到的人体断层二维图像序列，在计算机中重建成三维图像数据，并在屏幕上形象逼真地显示人体器官的立体视图。通过人机交互，医生可以对重构出的器官图像进行诸如旋转、缩放等操纵，使医生能够更充分地了解病灶的性质及其周围组织的三维结构关系，从而帮助医生做出准确的诊断和制定正确的手术方案。
　　医学图像的三维表面重建主要应包含以下几个步骤：①获取目标图像序列；②对图像序列进行预处理，以获取用于表面重建图像数据；③根据所获得的图像数据重建出人体器官的三维表面图像。
　　2.OpenGL简介
　　OpenGl是在SGL、SUN、Microsoft、 DEC， IBM和 Intel等多家世界著名计算机公司的倡导下，联合推出的一种三维图形标准，它由SGL的GL标准发展而来，适用于多种操作系统(UNIX、Windows95以上版本、WindowsNT3.51以上版本及DOS等)。OpenGL独立于硬件设备、窗口系统和操 作系统，实际上是一个图形与硬件的接口，包括120多个图形函数，可以利用这些函数建立三维模型和三为实时交互。OpenGL功能强大，可移植性强，目前已经在军事、航天、医学、方针、虚拟现实等领域得到了广泛的衣用。
　　关于如何获取目标图像序列和对图像进行预处理这两个方面，已有很多文章做过详细介绍，本文不再作具体阐述，下面仅介绍一下OpenGL在三维表面重建及三维显示方面的具体应用。
二、三维表面重建
　　通过对目标图像进行滤波、图像分割和边缘检测等预处理过程，可以得到断层图像的轮廓数据，接下来的工作就是要利用这些数据来重建物体的三维表面。根据物体表面的复杂程度，可以分别采取轮廓拼接法和UNRBS曲面拟合法。
　　1.轮廓拼接法
　　对于重建比较简单的三维图像可以采用轮廓拼接法。所谓的轮廓拼接就是用多边形(一般是三角形)构造通过相邻层上对应轮廓的表面的过程。关于轮廓拼接已有很多种方法，本文简单地介绍一下基于圆环图的轮廓拼接。
　　设C1，C2为将要拼接的对应轮廓，它们以一组序点来表示，即C1：｛Pi｝mi=1,C2：｛qi｝ni=1。连接同一轮廓上的两个相邻点所得到的边称作轮廓段(Contour segment),而连接不同轮廓上的两个点所得到的边称作跨段(Span)建立一个图，它的结点代表跨段。当两个跨段具有一个共公点时，可用弧(Arc)把这两个跨段所对应的结点连接起为，这样的图形就是圆环图(Toroidal graph)。
　　OpenGl中很多图原都是由一组相关的顶点(Vertex)按照一定的方式组织起来所构成的，要完成轮廓拼接的操作，只需将相邻轮廓上的顶点用三角形面片连接起来，便可初步形成三维表面。具体操作如下：
　　设contour［l］［n］ contour［2］［n］分别为两条轮廓上的点，由下列语句实现轮廓拼接，
glBegin (GL-TRIANGLE-STRIP);
　　for (intI=0;I<n:I++)
　　｛
　　　glVertex3f(contour［1］［n］/x.
　　　contour［1］［n］.y,contour［2］［n］.z);
　　　glVertex3f(contour［2］［n］.x,
　　　contour［2］［n］.y,contour［2］［n］.z);
　　｝
glEnd()
　　其中参数GL-TRIANGLE-ETRIP意为将对应顶点序列连接成连续填充的三角形串，这恰好满足我们的要求。当然仅仅是如此连接而构成的三维表面还是比较粗糙的，还要做一些诸如以反走样之类的处理才能达到令人满意的效果。
　　2.UNRBS曲面拟合法
　　作为表面重建方法之一，非均匀有理B样条NURBS(non-uniform rational B-spline)不但可以表示标准的解析区面，还可以描述复杂的自由曲面，通过调整控制顶点和权因子，可灵活地改变曲面的形状。另外NURBS基函数具有计算稳定、快速的特点，这也是用重建三维表面的重要原因。
　　NURBS曲面的方程为：

式中di,j(u,v)i=0,l…m;j=0,l…n为控制顶点，wi,j是与控制顶点dij相联系的权因子，Ni,k,i=0,l…,m和Ni,j,j=0,1,……,n分别为u向k次和v向l次的规范B样条基。他们分别由u项与v向的节点矢量
　　U=［u0，u1…um+k+l］与V=［vo,v1,…,vn+l+1］
按德布尔递推公式决定。
　　要想使拟合出的三维表面能够通过已知的轮廓多边形，还必须利用这些轮廓多边形反算出相应的控制顶点，在关反算控制顶点的具体算法，请参阅参考文献［5］。
　　求出控制顶点之后，利用OpenGL进行NURBS曲面拟合是非常容易的，因为OpenGL实用库中专门提供了用来绘制NURBS曲面的函数，函数的形式如下：vod gluNurbsSurface(GLUnurbsObj*nobj,
Glint sknot-count,
GLfloat *sknot
GLint tknot-conut
GLfloat*tknot
GLint s-stride
GLnt t-stride
GLfloat*ctlarray
GLint sorder
GLint torder
GLenum type);
其中参数catarray为指向控制点的指针。关于该函数的其它参数及用法，请读者参考有关OpenGL的书籍，在此不作多阐述。
　　综上所述，利用NURBS曲面拟合三维表面可归结为以下三个步骤：①输入目标图像的轮廓数据；②利用给出的轮廓数据求出符全拟合要求的曲面控制顶点；③调用函数gluNurbsSurface()实现曲面拟全。
三、三维显示
　　1.光照
　　光照对于三维真实感图形来说是非常重要的。事实上，如果没有光照，所绘制的三维图形就没有立体感，和二维图形基本没有区别。
　　OpenGL中的光照是真实光照的一种逼近，它把光分为四个部分，即辐射光、环境光、散射光和的反射光。在实际应用中，四部分独立计算，最后加在一起。OpenGl中既可以使用多个光源，也可以使用单独的光源，这要根据具体需要而定。OpenGl中定义光源是由函数gILight*()实现的该函数的具体形式为：
　　void gILghtfv(GLenum light
　　Glenum pname
　　GLfloat *params)
　　在定义了光源之后，需要调用函glEnabie(GL-LIGHTING)以启用光源 。
　　2.消隐
　　消隐是三维图形显示中一个重点也是一个难点，如果消隐问题解决得不好，会严重影响重建图像的质量。在以往的三维图形软件中，消隐是一件非常繁琐的工作，但在OpenGL中只需调用函数glEnable(GL-DEPTH-TEST)启动深度测试，三维图像便可以自动实现消隐。如想取消自动消隐，可调用函数glEnable(GL-DEPTH-TEST).
　　3.变换
　　在临床应用中，大多数情况都要求能够从不同的角度观察重建出的三维表面，有时甚至对需要图像进行适当的放缩，才能充分地了解病灶的性质。OpenGL图像中对图像进行旋转和放缩操作非常容易，用于旋转和放缩的函数分别为：
　　void gIRotate {f,d}(GLdouble angLe,
GLdouble　x
Gldouble　y
GLdouble　z)
和void glTranslate{f,d}(Gldouble　x
GLdoube　y
GLdouble　z)
应用过程中只需调用这两个函数并给出相应的参数即可，无需进行复杂的矩阵运算。
四、结束语
　　三维重建在医学中应用的比较广泛，用其作为医生诊断病情的辅助手段，能够极大地提高医疗诊断的准确性和科学性，OpenGL的出现，可以使人们更容易地进入三维图形世界，运用OpenGL进行医学图像的三维图形重建，可大大节省开发时间，提高软件的可靠性，本文重点介绍了OpenGL在三维表面重建中的一些具体应用，希望能够对从事三维重建工作的读者有所帮助。■
作者单位：刘才(哈尔滨工程大学自动化学院 150001)
参考文献：
［1］肖小河，舒光明，方清茂等，重要组织连续切片计算机三维重建与动态显示，生物医学工程杂志1997 14(2) 131-136
［2］廖朵朵，张华军，OpenGL三维图形程序设计，星球地图出版社，1996
［3］白燕斌，史惠康等，OpenGL三维图形库编程指南，机械工业出版社，1998年
［4］许斌，张森，厉万庆，从序列切片重构三维对象的新方法，计算机学报1994 17 (1)64
［5］施法中，计算机辅助几何设计与非均匀有理B样条，北京航空航天大学出版社1 994
收稿日期：99-09-28
