时间:2024-05-04
吴德道,刘小平
(1. 南昌大学信息工程学院,江西 南昌 330031;2. 景德镇陶瓷大学,江西 景德镇 333000;3. 卡尔顿大学系统与计算机工程系,渥太华 加拿大 K1S 5B6)
在虚拟手术仿真系统中建立自然、准确的软组织切口模型是该领域研究的重点之一[1]。主要体现在虚拟手术切口生成后切口面几何和拓扑结构发生了明显的变化,特别是网格化方法中需要重网格化,这将给模型的仿真带来很大的问题[2],[3]。而经过一段时间的发展,研究者们提出许多模拟软组织切口模型[4]。根据建模过程中是否需要对虚拟器官和组织对象进行细分和预处理,可以将软组织切口模型分为基于网格和无网格的两种建模架构[5]。虚拟手术切口模型的仿真涉及到使用网格切割技术修改多边形或三维网格。网格切割是网格编辑研究的一个重要组成部分,包括重映射、变形、合并、简化和平滑操作。目前,关于网格切割的研究大多集中在虚拟手术和医学仿真领域,其中较为常见的是三维扫描和三维网格表示。而大多数医学领域以外的软件只处理多边形网格的应用,使得该技术在网格表面操作上更加成熟。曲面网格的使用不仅提高了基于多边形的渲染引擎的可用性和性能,而且还是实时应用的关键因素。
早在1997年,Nielsen等首次提出基于网格的单元去除法[6]。为提高切口的仿真效果,Nielsen等提出改进模型,如边缘折叠法、顶点复制分裂法、曲面约束法等。这种切口模型只处理虚拟物体的表面网格,使用较少的点和面来表示物体的表面形状,但不能表达物体内部的信息。为更好地模拟和显示物体被切割后的各种内部变化,Bielser等人提出一种基于体积模型[7]的体积元细分法。之后,相继出现虚拟节点法、部分剖分法和立方体单元划分法等改进模型。所有上述模型需要将预处理网格细分[8,9],在切割过程中进行网格更新和重组,成本很多。2009年,丹尼斯等人结合对象空间色散的无网格方法和基于网格表面重建技术,并成功地应用在子宫镜检查和切削仿真。但该方法数据结构复杂,算法复杂度高,计算效率低。而目前混合模型最大的困难是如何管理好两个不同的建模系统[10]。
根据Bruyns等人[11]的研究,他们把网格切割技术分为重网格化、切割路径的定义和新原语的创建。前两种方法是在间隔点之间或在选定点之间构造一个连续平面,而它们的区别是如何设置切割路径。模板与网格基元的碰撞检测是第三种方法的要求。此外,Bruyns等还描述了渐进切割方案。为实现刀具的原始碰撞,在刀具连续移动位置之间构造一个扫描面。对原语测试曲面的扫描生成边和面的交点,其中新节点连接到新创建的边和面,然后替换原语,该方案适合多层目标的碰撞检测。而对于非渐进式切割方法,存储的信息大多是冗余的,而重网格化方案只处理边-边和边-面相交的情况。此外,切割暴露了表面网格的内部,因此该方法只适用于多层网格。
Zhang等人[12]提出一种表面网格模型的渐进式切割技术,该技术将网格元素细分,并沿选择的切割路径构造内部结构。在切割线与三角面边缘相交的地方创建两个新节点。这两个节点初始是一样的,但随着切割完成而分离。这种分离留下一个切口槽,其深度由刀具尖端的切割深度来定义。在此基础上,他们还提出一种渐进式切割算法,通过执行临时细分和动态构造切口槽来跟踪刀具在三角形中的运动。与前一种方案一样,该方法没有一个完整的网格重映射方案,并且没有网格表示的定义,这使得该方法难以重现。
Van der Stappen和Nienhuys[13]定义一种切割技术,通过限制原始元素不具有短边或大角度使得生成的新元素较少,从而产生形状良好的网格结构。切割工具的任意一次移动都会移动一个额外的活动节点。在每次移动之后,对应三角形将被重新映射到本地。通过这种方式,删除切割工具前面的节点,然后将其插入到工具之后。该方法的特点是切割前后目标网格的分辨率保持不变,但切割路径的精度不能得到提高,而这是由初始网格的分辨率决定的[14]。
Lim等人[15]提出一种基于节点捕获的渐进式切割算法。第一次碰撞接触时,最近的节点被拉到目标网格和工具之间的初始接触位置。在切割过程中,切割路径上的每个节点被分成两个方向相反、垂直于切割线的节点。最后,设置一个切割槽来创建体积切割的错觉。为解决切割路径的切割分辨率依赖于周围网格的细分问题,他们还提出一种局部细分算法[16]。这种方法允许更准确地表示切割路径,但内存成本高且性能降低。
针对上述建立切口模型方法的优缺点,提出一种实时模拟切口模型的方法。该方法直接与表面网格交互,并在程序运行时生成新的几何拓扑,为后续切口模型的高真实感渲染提供一个切口内腔结构。本文其余部分组织如下:第2节中给出建模方案中使用的模拟方法和相应算法。第3节通过实验进一步证实仿真方法的有效性。最后,在第4节对本文的研究成果进行总结,并对未来的研究提出建议。
通常当一个锋利物体穿过真实软组织表面撕裂表皮使皮下组织可见时,就在软组织表面留下一个切口。利用网格编辑技术对切割影响的网格区域进行局部修改,从而可在虚拟环境中重现这一现象。本节中,将研究与切口模拟相关的算法和技术,包括将切割线与目标网格融合并将切割线扩展成切口以及生成切割槽。
在目标网格中插入一条切割线段作为模拟切割边界,会改变原始网格的许多属性并破坏原始网格的完整性。因此,为避免这一问题,在插入新的切割线之前,需要对切割线周围的局部几何拓扑进行细分。图1描绘出切割线与目标网格的融合。对于每段切割线段,端点可以与三角形网格的节点重合,也可以是它的一条边,或者两者都在三角形网格内等。
图1 插入的切割线融合到目标网格中
按照切割线与目标网格共点情况划分为三类:第一类是不共点情况,切割线端点与网格顶点没有重合也是最常出现的情况如图2上所示。第二类是共点情况,切割线端点与网格面顶点重合,如图2下所示。第三类是比较特殊的情况,整个切割线包含在一个三角网格内,由于切割线太短,这种情况的切割没有任何实际意义,因此在程序中忽略处理。切割线段p0p1与三角网格f之间的每种位置关系需要不同的方式将其融合到f中。根据剖分线的定义和网格的属性对网格表面进行细分。新插入的端点为p0和p1的边ec被添加到边ECs的有序集中。图2给出各位置关系,其中切割线段用虚线表示,网格细分用点划线表示。具体操作是:
图2 切割线与三角网格的位置关系
第一类,如图2上,从左至右分别对应以下3种:
1)p0在网格内p1在边上,这种位置关系常发生在切割线的初始位置。三角网格f在p0处用3-split算法细分,在p1处执行2-split操作。
2)p0和p1均在边上,这种位置关系最常见。切割线段p0p1将网格f分成一个三角形和一个四边形,而为保持三角网格关系,首先在p1处分出两个三角网格(点划线),然后在p0处分割一个新的三角子网格。通过比较p0所在的边及其边引用,可以确定p0与两个三角子网格中的哪一个相关联,均采用2-split操作。
3)p0在边上p1在网格内,这种位置关系常发生在切割线的末端。将f在p1处按3-split操作进行细分,然后确定p0在哪个子网格上,在p0处继续进行2-split操作。
第二类,如图2下,从左至右分别对应以下3种:
1)p0(p1)和网格共点p1(p0)在网格内,p1(p0)处将f细分为三个子网格并被共享。3-split操作在f内部创建三个新的面和边,它们都与p1(p0)有关。其中一条新边与ec重合,并被添加到ECs上。
2)p0(p1)和网格共点p1(p0)在边上,切割线段将f细分为两个新的三角网格。使用2-split算法将f在p1(p0)处分割成两个子网格,并更新f的直接邻域。
3)p0和p1均与网格共点,即切割线段p0p1与网格共边,直接添加到ECs中。
算法1结合图3左侧详细描述了2-split操作。与图3右侧相似的组合可以推导出3-split操作。
图3 面f分别在2-split (左)和3-split操作(右)时的拓扑
算法1 2-split
输入: 面f,点p和点p所在的边es
输出:分割边ec,将f从p细分到它的对面节点n1
1)获取节点{n0,n1,n2},顶点{v1,v2,v3},面f上的边{e0,e1,e2}
2)在p点处创建节点nm,顶点vm
3)在nm和n1之间生成切割边ec
4)分别在n0和nm,nm和n2之间生成边ex0,ex1
5)分别在nm、n0和n1,nm、n1和n2之间生成面fc0,fc1
6)设置边ec的邻接面fc0,fc1
7)分别设置边ex0,ex1的邻接面fc0,fc1
8)设置面fc0的邻接边ex0,e0,ec
9)设置面fc1的邻接边ec,e1,ex1
10)分别用fc0,fc1取代边e0的邻接面f和边e1的邻接面f
11)从网格中删除面f,边es
12)返回分裂边ec
该阶段由两部分组成:切割线扩展和切割槽生成。输入为前一阶段创建的一组有序切割线线段集合,分离切割边的局部几何形状,模拟切口。此操作在目标网格中留下一个凹槽,然后融合这个位于当前网格面以下某个深度的新拓扑。图4描绘出切割线的分离几何形状及其内部结构。
图4 复制相应的顶点并生成切口边界与其内腔结构
根据产生切口的要求,切割线上的节点和顶点要相互复制,分别移动。将这些元素与边缘连接在切口周围形成一个边界(图4中的粗实线),该边界应与切割线两侧的拓扑结构融合。初始切割线上的节点、顶点和边不再引用,它们在之后被删除。根据Lim等人[16]测量的切口张开距离(IOD)与切口长度L、深度d的关系,可以得到一般公式
IOD(L,d)=(0.0111+0.0002(d-0.1/0.02))ln(L)
+0.0415+0.0015(d-0.1/0.02)
(1)
通过可调参数抛物线来调节切割线上任意点的切割位移计算IOD。这条抛物线确保IOD在中心近似为最大值,在开始和结束为零,在中间光滑。由此得到计算方程
IODpi=mIOD(L,d)
(2)
式2中,m可由抛物线方程m=ax2+bx+c确定,其中,a、b、c为可调系数,x=i/|Ec|,i=0,…,|Ec|,|Ec|为切割线边集合Ec的基数。
定义切割线边界的新几何点用于创建网格拓扑,并将切割线划分为两个相似的部分。算法2详细描述了这一过程。第一条边和最后一条边的处理方式类似,分别对位于p0和p1中的节点和顶点进行重用。切割深度d的计算公式为
d=max(0.1,min(1.0,l/5))
(3)
算法2 构建切割边界的几何拓扑
输入: 有序的切割边集Ec
While(对每一条边ec∈Ec)do
1)获取与边ec对应的端点
2)在垂直切割线方向上计算vi ± IODpi/2,得到两条边界线的新端点
3)将这4个端点赋值给拓扑结构中的节点
4)生成对应4个顶点
5)由
6)由
7)分别将
8)分别将
9)分别将e+和e-添加到集合E+和E-
10)分别将边ec的面f0和f1添加到集合F+和F-
对于给定的切割边ec,计算p0i和p1i在切割槽中的位置如下
(4)
(5)
通过算法3,创建切割槽结构并与模型表面网格融合。
算法3 模拟切口内腔的几何拓扑
输入: 切割边集Ec、E+、E-;节点集N+,NI,N-,内腔顶点集W+、WI、 W-
While(对每一条边ec ∈Ec)do
1)获取图5中所示节点和顶点
2)两点生成边:
3)3个节点和对应3个顶点生成面:
4)设置边面关联:
5)注册边面关联:
6)注册相交边面关联:
7)注册内腔面中边面关联:
图5 切口内腔的网格元素
实验环境配置为便携式计算机,CPU为Intel Core I5 5200,内存为4GB,显卡为AMD Radeon R5 M320。仿真软件采用VC++的开发,图形渲染方面使用OpenGL 图形库,材质语言为CG。实验案例是通过三维扫描重建真实肝脏的数字模型。
在肝脏三维数字模型中,整个肝脏表面由3968个三角网格面包裹。图6为三角形网格面相互衔接形成的三维网格模型,以及切口生成后目标网格上形成的拓扑结构,着色模型以及切口部分放大后内腔拓扑结构。在图6中,切割切口完全融入到目标网格中并生成具有一定深度的内腔拓扑。切口平滑自然,没有破坏目标网格的完整性。
图6 数字肝脏原始网格模型以及生成切口后的网格拓扑注:按自上而下,从左到右顺序,分别是原始网格模型、切口模型、着色后切口模型以及局部放大切口模型。
图7中可从多个角度观察切口的视觉层次和切口的真实深度拓扑。最终模拟的切口结构过渡自然,并可以根据目标场景修改切口和腔体实际对应纹理,易于实现。
图7 着色渲染后仿真肝脏模型和生成切口后多角度演示的模型
与真实肝脏软组织的切口对比如图8所示,其中左图是固定切割装置旁边是切割产生切口的肝脏软组织[17],右图是采用本文方法对虚拟肝脏切口的渲染。通过对比,可以注意到切口几何外形基本相似,所不同的是切口周围血液颜色的渲染,左图偏向切口外形实验,右图兼顾切口外形和周围表皮颜色的渲染。
图8 与真实肝脏切口的对比注:左图为真实肝脏切口,右图为仿真切口。
图9中,左上是DFFD方法[18]模拟的手术切口,右上采用的是基于FEM的DFFD方法[19],中间是本文方法,下图是本文方法切口局部放大。前两种方法没有构造切口内腔结构缺乏立体逼真感,手术切口与表皮之间缺乏过渡元素,不利于后期切口的进一步渲染。
图9 不同仿真方法在相同部位生成的切口
通常12帧/秒的帧速率是人眼实时交互所能达到的最低帧速率。在数字模拟虚拟肝脏模型的三角网格数为3968的情况下,本文模拟手术切口(600PP)的方法获得的帧速率约为230帧/秒,其它渲染过程所对应帧速率如表1所示。模拟切口在世界坐标(0.02~0.15)下的总时间为6~10ms,保证了后继操作的实时性。
表1 虚拟肝脏模型渲染过程及手术切口所对应的帧速率
本文提出一种虚拟手术切口模型的仿真方法,简化了切割线与目标网格面的对应关系,利用可调参数曲线模拟切口边界。通过减少对切割线周围网格面的修改来保证网格结构的完整性和稳定性并以虚拟肝脏为实验对象,实现了对肝脏切口的仿真。该方法不仅适合虚拟手术切口仿真,而且创建了具有立体感的内腔结构,可实现高真实感虚拟手术切口的实时渲染。本文主要贡献是详细描述了模拟网格切口所需的技术,并保持原始网格拓扑结构和参数的完整性。仿真程序能够通过基本的重网格化操作处理所有的切割线与三角形网格之间的关系,并为模拟目标网格上的切割模型提供完整的数据结构和算法。优点是对网格拓扑的干扰最小,因为只修改与切口边界有关的网格面。本文采用的是基本操作和数据,能够支持不同类型的虚拟手术切口。在判断两个空间点是否重叠时,网格精细度问题会导致拓扑网格失效。在确定网格节点和顶点时,通过使用阈值来衡量两点之间的距离是否小到可视为重叠的程度。因此,阈值需根据网格表面节点密度等因素进行调整。最后,无需执行额外的网格细化,只对与切割线相关的面进行重映射。在未来,解决方案可以聚焦在新创建切口周围的网格变形上。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!