基于贝塞尔曲线的切口仿真虚拟方法转让专利

申请号 : CN201110130357.8

文献号 : CN102207994B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 叶秀芬希吉尔朱玲顾懿周闫锐孙天一

申请人 : 哈尔滨工程大学

摘要 :

本发明提供的是一种基于贝塞尔曲线的切口仿真虚拟方法。(1)在组织结构中画出贝塞尔曲线的封闭区域记为P域;(2)计算区域P所覆盖的所有网格点,记为E域,然后删除E域;(3)重组网格:①计算P外围点,记为S域并保存;②针对P、S进行操作,找出对应最近邻点对组T,每4个一组;③针对T,4个点一组,根据计算机图形学多边形画法进行绘图;(4)循环显示,始终保存切口起始点和终点,动态保存两中间点,根据细分度画出平滑的切口。同等计算机配置条件下,本发明运用基于贝塞尔曲线的切割手术仿真的切口虚拟方法可以减小网格密度,提高fps,使系统运行更加流畅、具有更好的平滑效果。

权利要求 :

1.一种基于贝塞尔曲线的虚拟手术切口仿真方法,其特征是:①虚拟手术开始后,当虚拟手术刀切到某个位置,将找出此位置处最近邻网格点;

②设置手持操作器移动回调函数,当手持操作器做切割移动时输出当前网格点与已切割的每个网格点,同时采用最近邻方法存储每个网格点;

③检查切割路径位移,大于4个网格点进行贝塞尔函数绘图,起点、终点为两端点,起点后一点与终点前一点为两中间点进行存储,删除多余网格点;

④设置贝塞尔曲线的细分度,绘制贝塞尔曲线,得出封闭曲线,设置为P区域,去除重复网格点,存储P区域网格点;

⑤通过最近邻方法找出P区域所经过的所有网格点,进行删除操作;

⑥通过最近邻方法找出P区域周围所有网格点记为S区域,存储S区域网格点;

⑦P区域与S区域所有网格点进行最近邻点匹配,每2对为一组,存储点对记为T;

⑧对T运用OpenGL多边形法则进行绘画;

⑨保留起始点,清空存储区,重复②-⑧操作。

说明书 :

基于贝塞尔曲线的切口仿真虚拟方法

技术领域

[0001] 本发明涉及的是一种计算机图形学仿真方法,具体地说是涉及仿真手术切口实现的新方法。

背景技术

[0002] 虚拟现实(简称VR),又称灵境技术,是以沉浸性、交互性和构想性为基本特征的计算机高级人机界面。他综合利用了计算机图形学、仿真技术、多媒体技术、人工智能技术、计算机网络技术、并行处理技术和多传感器技术,模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。使用者不仅能够通过虚拟现实系统感受到在客观物理世界中所经历的“身临其境”的逼真性,而且能够突破空间、时间以及其他客观限制,感受到真实世界中无法亲身经历的体验。
[0003] 随着计算机科学与虚拟现实技术的发展,虚拟现实应用愈加广泛,虚拟现实技术在医学领域的应用也得到了一定的推广。通过虚拟模拟器来练习外科手术是一个可以加快学习进度的训练模式。在众多的技术考虑当中,能否真实地和交互地模拟人体软组织手术切口对于虚拟手术模拟器的成功与否是一个重要的关键。
[0004] 在切口形成的过程中主要有两种方法,1)网格剔除法,该算法的基本思想是删除网格。它的优点是实现简单,避免了网格重建和减少总的网格数量,而缺点是很容易产生不规则的边界,因此使切口会不够真实。2)活跃点移动切割三角网算法,在此算法中将切割过程想象为一把刀切进三角网格。切割刀总是与一个特定的活跃节点相关联,切割过程就是让切割刀带着活跃节点移动。而活跃节点总是边界上的一个点,故它和一条边界相关联,这条边界线称为切割线。将这条切割线看作两条重合的线,在切割的过程中,将其稍微扩张就形成了一个切口。
[0005] 在本说明书中形成的切口应用贝塞尔数学曲线,贝塞尔曲线(Bézier curve)是应用于二维图形的数学曲线。曲线上定义有四个点,即起始点、终止点(也称锚点)以及两个相互分离的中间点。滑动两个中间点,贝塞尔曲线的形状会发生变化。
[0006] 贝塞尔曲线依据四个位置任意的点坐标可以绘制出一条光滑曲线段。在历史上,研究贝塞尔曲线的人最初是按照已知曲线参数方程来确定四个点的思路设计出这种矢量曲线绘制法。贝塞尔曲线的有趣之处更在于它的“皮筋效应”。也就是说,随着切割触点有规律地移动,曲线将产生皮筋伸引一样的变换,带来视觉上的类似于切割延伸过程效应。将这种效果加载到仿真切口上可以更好地实现切口效果。1962年,法国数学家Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏命名为贝塞尔曲线。
[0007] 由于用计算机来绘图时,大部分时间是操作鼠标来掌握线条的路径,与手绘的感觉和效果有很大的差别。即使是一位精明的画师能轻松绘出各种图形,拿着鼠标想随心所欲地画图也不是一件容易的事。因此,计算机始终无法完全代替手工的工作,所以到目前为止人们只能颇感无奈。使用贝塞尔曲线画图很大程度上弥补了这一缺憾。
[0008] 贝塞尔曲线可作为计算机图形图像造型的一种方法,。通过控制曲线上的四个点(起始点、终止点以及两个相互分离的中间点)来创造、编辑图形。其中起重要作用的是位于曲线中央的控制线。这条线是虚拟的,中间与贝塞尔曲线交叉,两端是控制端点。移动两端的端点时,贝塞尔曲线改变曲线的曲率(弯曲的程度);移动中间点(也就是移动虚拟的控制线)时,贝塞尔曲线在起始点和终止点锁定的情况下做均匀移动。贝塞尔曲线上的所有控制点、节点均可编辑。这种“智能化”的矢量线条为艺术家提供了一种理想的图形编辑与创造的工具。
[0009] 最基础的贝塞尔曲线:曲线由4个点定义,有2个端点和2个中间控制点。对计算机而言这些点都是一样的,但是我们有意把前后两对点分别连接,因为他们的连线与端点相切。曲线是一个参数化曲线,画的时候从曲线上平均找几点连接。可以控制曲线的精度和计算量。最通常的方法是远距离的粗分近距离细分,因此从视点看上去总是很完好的曲面,而对速度的影响总是最小。贝塞尔曲面基于一个基本方程为:
[0010] t^3+3*t^2*(1-t)+3*t*(1-t)^2+(1-t)^3=1
[0011] 此方程为最常用的计算贝塞尔曲线的方程,主要有以下几个特征:a)最低维的不需要在一个平面内的多项式(有4个控制点),而且b)两边的切线互相没有联系(对于2维的只有3个控制点)。用控制点(表示为向量)乘以每部分再加起来,t为细分频度,即细分度的倒数(0<=t<=1)P1、P2、P3、P4分别为起点,两中间点和终点,Pnew为插入点。函数方程如下:
[0012] P1*t^3+P2*3*t^2*(1-t)+P3*3*t*(1-t)^2+P4*(1-t)^3=Pnew。

发明内容

[0013] 本发明的目的在于提供一种可以减小网格密度,提高每秒钟帧速率,使系统运行更加流畅、具有更好的平滑效果的基于贝塞尔曲线的切口仿真虚拟方法。
[0014] 本发明的目的是这样实现的:
[0015] (1)在组织结构中画出贝塞尔曲线的封闭区域记为P域;
[0016] (2)计算区域P所覆盖的所有网格点,记为E域,然后删除E域;
[0017] (3)重组网格:①计算P外围点,记为S域并保存;②针对P、S进行操作,找出对应最近邻点对组T,每4个一组;③针对T,4个点一组,根据计算机图形学多边形画法进行绘图;
[0018] (4)循环显示,始终保存切口起始点和终点,动态保存两中间点,根据细分度画出平滑的切口。
[0019] 在重组网格步骤中,在形成贝塞尔曲线的封闭结构中,取起点后一个值与终点前一个值并乘以对应系数a1,a2。在仿真特性比较高系统中,该系数可取决于生物组织的力觉特性,也可取自定义常数。一般左侧贝塞尔曲线常数0.5<a1<1.0,右侧贝塞尔曲线常数1.0<a2<1.5。一般地,为保证曲线的对称性a1+a2=2.0。
[0020] 本发明与现有技术相比的优点在于:同等计算机配置条件下,运用基于贝塞尔曲线(Bézier curve)的切割手术仿真的切口虚拟方法可以减小网格密度,提高fps(每秒钟帧速率),使系统运行更加流畅、具有更好的平滑效果。

附图说明

[0021] 图1是本发明方法的基本流程图;
[0022] 图2a-图2b是本发明切口形成过程;
[0023] 图3是寻找边界点并删除多余点后的效果;
[0024] 图4是加入纹理后的切口效果;
[0025] 图5是P、S、E区域示意图;
[0026] 图6是P、S区域所形成的点对T示意图。

具体实施方式

[0027] 下面结合附图举例对本发明做更详细的描述:
[0028] 如图1所示,本发明的具体步骤如下:
[0029] 初始化数据,用OpenGL进行绘图。
[0030] ①虚拟手术开始后,当虚拟手术刀切到某个位置,将找出此处最近邻点。
[0031] ②设置手持操作器移动回调函数,当手持操作器做切割移动时输出当前位置,与已切割的每个位置点,同时采用最近邻方法,存储每个点。
[0032] ③检查切割路径位移,大于4个点进行贝塞尔函数绘图,起点、终点为两端点,起点后一点与终点前一点为两中间点进行存储,删除多余点。
[0033] ④设置贝塞尔曲线的细分度(切口越长细分度越高),绘制贝塞尔曲线,得出封闭曲线,设置为P区域,去除重复点,存储P区域点。
[0034] ⑤通过最近邻方法找出P区域所经过的所有网格点,进行删除操作。
[0035] ⑥通过最近邻方法找出P周围所有点记为S,存储S区域点。
[0036] ⑦对P区域与S区域所有点进行最近邻点匹配,每2对为一组,存储点对记为T。
[0037] ⑧对T运用OpenGL多边形法则进行绘画。
[0038] ⑨保留起始点,清空存储区。重复②-⑧操作。