一种增强现实辅助手术方法及系统与流程

文档序号:16903135发布日期:2019-02-19 18:11阅读:178来源:国知局
本发明属于计算机
技术领域
:,尤其涉及一种增强现实辅助手术方法。
背景技术
::当今世界,由于空气质量下降,人们抽烟或吸二手烟,导致肺癌发病率越来越高,肺癌已经危害我国人民健康,威胁人类生命,对于肺癌早期治疗手段,就是切除被癌症所感染的肺部组织,肺由若干肺叶构成,肺叶又由若干肺段构成,如何能尽可能小的只切除被感染的肺段部分,而且保留大部分的健康肺部组织是肺癌手术治疗的重大问题。现有技术中肺段手术辅助方法大多是在pc端上显示病人的ct图像或立体结构,医生根据病人肺部血管和气管的走向可以推测出肺段的位置,从而进行肺段切除,但是在pc端上显示病人的ct图像或立体结构,在实际应用中医生查看时效果不佳,对医生的手术工作帮助有限。技术实现要素:(一)要解决的技术问题针对现有存在的技术问题,本发明提供一种增强现实辅助手术方法,能够实现在混合现实设备上进行病人肺部组织结构的展示,和传统的pc端结果展示相比更加立体和清楚。(二)技术方案为了达到上述目的,本发明采用的主要技术方案如下:一种增强现实的辅助手术方法,包括如下步骤:101、获取病人的肺部ct图像数据;102、采用区域生长和图像填充算法对获取的肺部ct图像数据进行处理,获得肺部血管数据和气管数据;103、根据获得的肺部血管数据和气管数据,进行边缘网格模型的构建;104、将构建完成的边缘网格模型导入到混合现实设备中进行展示,供医生观察。优选地,所述步骤102还包括如下子步骤:102a1、在获取的肺部ct图像中选取气管的种子点,并提前预设阀值范围,然后采用区域生长算法,获取气管图像;102a2、采用图像填充算法将获取的气管图像上的噪点提取出来;102a3、将提取到的噪点填充到气管图像上的漏洞中,获得完整的气管图像数据。优选地,所述步骤102还包括如下子步骤:102b1、在获取的肺部ct图像中的左右肺实质部分选取种子点;102b2、基于选取的种子点,采用区域生长算法将左右肺的实质部分的图像提取出来;102b3、采用图像填充算法将获取的左右肺的实质部分的数据图像中的孔洞进行反复多次填充,填充获得的区域即为血管图像数据。优选地,所述步骤103还包括如下子步骤:103a1、基于获取的气管数据,获取气管的标记向量mark;103a2、根据获取的气管标记向量mark,获得8个定点不全为1且不全为0的所有六面体;103a3、将步骤103a2中获取的六面体提取出mark(0,1)的边;103a4、将步骤103a3中提取到的边获得每个六面体内的重心点;103a5、将步骤103a2中获取的mark(0,1)的临界边,相邻有4个六面体,每个六面体都有一个重心点,则每个mark(0,1)的边都有4个临近的重心点,将这4个重心点构成两个三角面片;103a6、根据每个三角面片三条边的叉积获得三角面片的法向量;106a7、将三角面片的三个点坐标和步骤103a6中获得的法向量存入stl文件中,获得气管数据的边缘网格模型。优选地,所述步骤103还包括如下子步骤:103b1、基于获取的血管数据,获取血管的标记向量mark;103b2、根据获取的血管标记向量mark,获得8个定点不全为1且不全为0的所有六面体;103b3、将步骤103b2中获取的六面体提取出mark(0,1)的边;103b4、将步骤103b3中提取到的边获得每个六面体内的重心点;103b5、将步骤103b2中获取的mark(0,1)的临界边,相邻有4个六面体,每个六面体都有一个重心点,则每个mark(0,1)的边都有4个临近的重心点,将这4个重心点构成两个三角面片;103b6、根据每个三角面片三条边的叉积获得三角面片的法向量;106b7、将三角面片的三个点坐标和步骤103b6中获得的法向量存入stl文件中,获得血管数据的边缘网格模型。优选地,所述步骤103和步骤104之间还包括:将获得的边缘网格模型导入到unity3d开发软件当中,进行系统交互设计,获得适配混合现实设备hololens的肺部模型。优选地,所述三角面片的构造函数为genfacet函数。优选地,寻找临界边和选取边界重心的函数为findsignedge函数,在findsignedge函数中找到mark(0,1)的边,然后根据边的数据构造边界网格的点。(三)有益效果本发明提供的一种增强现实的辅助手术方法,而本方法能够实现在混合现实设备上进行病人肺部组织结构的展示,和传统的pc端结果展示相比更加立体和清楚。通过本方法将肺部气管和血管从胸部ct影像上分割出来,并在混合现实设备中展现让医生立体感知病人肺部结构,能给医生提供肺段切除手术的帮助。让医生在手术前能够更清楚的观察到病人肺部的血管和气管走向,对病人肺部结构更加了解,这样医生在手术时的成功率和准确率就会有所提升,病人就会得到更好的手术治疗,从而得到更好的恢复,使病人能够更健康。附图说明图1为本发明一种增强现实辅助手术方法的流程示意图;图2为本发明一种增强现实辅助手术方法的流程示意图;图3为本发明一种增强现实辅助手术方法的流程示意图;图4为本发明一种增强现实辅助手术方法的实施例中数据结构示意图;图5为本发明一种增强现实辅助手术方法的实施例中区域生长算法流程图;图6为本发明一种增强现实辅助手术方法的实施例中填充算法流程图;图7为本发明一种增强现实辅助手术方法的实施例中二维获取三角形的示意图;图8为本发明一种增强现实辅助手术方法的实施例中六面体构建三角形示意图;图9为本发明一种增强现实辅助手术方法的实施例中模型构建算法流程图;图10为本发明一种增强现实辅助手术方法的实施例中stl文件格式示意图;图11为本发明一种增强现实辅助手术方法的实施例中气管分割结果图;图12为本发明一种增强现实辅助手术方法的实施例中肺实质提取示意图;图13为本发明一种增强现实辅助手术方法的实施例中肺实质提取示意图;图14为本发明一种增强现实辅助手术方法的实施例中气管stl文件数据示意图;图15为本发明一种增强现实辅助手术方法的实施例中气管stl文件图像效果示意图;图16为本发明一种增强现实辅助手术方法的实施例中界面结果图;图17为本发明一种增强现实辅助手术方法的实施例中隐藏和显示结果图;图18为本发明一种增强现实辅助手术方法的实施例中模型移动交互图。具体实施方式为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。实施例一如图1所示:本实施例公开了一种增强现实的辅助手术方法,包括如下步骤:101、获取病人的肺部ct图像数据;102、采用区域生长和图像填充算法对获取的肺部ct图像数据进行处理,获得肺部血管数据和气管数据;103、根据获得的肺部血管数据和气管数据,进行边缘网格模型的构建;104、将构建完成的边缘网格模型导入到混合现实设备中进行展示,供医生观察。本实施例中所述步骤102还包括如下子步骤:102a1、在获取的肺部ct图像中选取气管的种子点,并提前预设阀值范围,然后采用区域生长算法,获取气管图像;102a2、采用图像填充算法将获取的气管图像上的噪点提取出来;102a3、将提取到的噪点填充到气管图像上的漏洞中,获得完整的气管图像数据。本实施例中所述步骤102还包括如下子步骤:102b1、在获取的肺部ct图像中的左右肺实质部分选取种子点;102b2、基于选取的种子点,采用区域生长算法将左右肺的实质部分的图像提取出来;102b3、采用图像填充算法将获取的左右肺的实质部分的数据图像中的孔洞进行反复多次填充,填充获得的区域即为血管图像数据。如图2所示:本实施例中所述步骤103还包括如下子步骤:103a1、基于获取的气管数据,获取气管的标记向量mark;103a2、根据获取的气管标记向量mark,获得8个定点不全为1且不全为0的所有六面体;103a3、将步骤103a2中获取的六面体提取出mark(0,1)的边;103a4、将步骤103a3中提取到的边获得每个六面体内的重心点;103a5、将步骤103a2中获取的mark(0,1)的临界边,相邻有4个六面体,每个六面体都有一个重心点,则每个mark(0,1)的边都有4个临近的重心点,将这4个重心点构成两个三角面片;103a6、根据每个三角面片三条边的叉积获得三角面片的法向量;106a7、将三角面片的三个点坐标和步骤103a6中获得的法向量存入stl文件中,获得气管数据的边缘网格模型。如图3所示:本实施例中所述步骤103还包括如下子步骤:103b1、基于获取的血管数据,获取血管的标记向量mark;103b2、根据获取的血管标记向量mark,获得8个定点不全为1且不全为0的所有六面体;103b3、将步骤103b2中获取的六面体提取出mark(0,1)的边;103b4、将步骤103b3中提取到的边获得每个六面体内的重心点;103b5、将步骤103b2中获取的mark(0,1)的临界边,相邻有4个六面体,每个六面体都有一个重心点,则每个mark(0,1)的边都有4个临近的重心点,将这4个重心点构成两个三角面片;103b6、根据每个三角面片三条边的叉积获得三角面片的法向量;106b7、将三角面片的三个点坐标和步骤103b6中获得的法向量存入stl文件中,获得血管数据的边缘网格模型。本实施例中所述步骤103和步骤104之间还包括:将获得的边缘网格模型导入到unity3d开发软件当中,进行系统交互设计,获得适配混合现实设备hololens的肺部模型。应说明的是:本实施例中所述三角面片的构造函数为genfacet函数。本实施例中寻找临界边和选取边界重心的函数为findsignedge函数,在findsignedge函数中找到mark(0,1)的边,然后根据边的数据构造边界网格的点。具体地,本实施例是根据病人的胸部ct图像分割出病人气管、左肺血管、右肺血管,然后将分割出的数据进行模型构建,将病人肺部组织模型导入混合现实设备hololens当中,实现混合现实辅助手术系统供医生使用。基于区域生长的气管分割算法步骤对于肺部气管的图像分割,有两步骤。在图像气管上手动选取种子点,并提前设置好阈值范围,然后采用区域生长算法,将气管分割出来。气管内部阈值是ct图像中最低的,而图像中有噪点,图像上气管内部的噪点阈值较高,只用区域生长算法,分割出的气管会有漏洞,所以接下来用填充算法,将图像中气管部分的噪点也提取出来,将气管漏洞填补上,应用填充算法对气管进行填充时,要注意填充六个方向上判断的距离范围,如果范围过大会产生过度分割的结果,将气管外围的点也提取出来。基于区域生长的肺部血管分割算法步骤人体左侧的心脏的动脉血管、静脉血管长进人体的左右肺当中,ct图像中血管和骨骼呈高亮,而肺实质暗黑色。分割难点在于如果只用区域生长对肺血管进行分割,会把整个心脏也连带分割出来,然而肺部手术只是想得到肺部血管走向,所以我们要做的就是分割出肺内部的血管而剥掉心脏部分。解决方法就是先通过分割得到左右肺,这样就剥离开了心脏,然后对肺里的血管单独处理,得到肺部血管。血管分割分为三个步骤。(1)在左右肺实质部分选取种子点,进行区域生长将左右肺的实质和气管提取出来。(2)提取后的肺实质内里面都是高密集的孔洞,这些孔洞是既是肺部血管,对左右肺分别进行填充,填充出来的就是肺部血管。(3)由于一次填充并不能把肺部所有血管都填充进来,所以要多填充几次。区域生长算法的设计与实现由于ct图像数据量大,ct图像的气管数据存储在pvolumedata中,pvolumemark数组记录了图像数据点是否被标记,directionparam26结构体中存储了26邻域方向,三维区域生长算法详细数据存储结构如图4所示。param是mipbasicalgorithm类的私有指针变量,通过param可以得到图像的数据信息。算法步骤如下:(1)开始先进行数据信息初始化,栈初始化,由于图像数据量大,如果用c++中stl开发库的stack动态扩容会造成内存资源紧张、内存资源浪费。所以在栈的实现上本文采用的是指针数组来实现栈的操作,数组长度为width*height,readpoint记录出栈标记位,readnum记录出栈当前数组层数,writepoint记录入栈标记位,writenum记录入栈数组层数。(2)将种子点标记,并入栈。(3)从栈中取出种子点,如果本层数组取完readnum自增1,readpoint归0,然后根据种子点的26邻域进行广度搜索,找到满足条件的数据点标记并入栈。(4)如果栈的本层数组满了,则另开辟一层数组,writenum自增1,writepoint归0。如果栈本层数组没满,则判断stackpoint是否为0,如果stackpoin为0,则说明栈中无数据点结束,如果stackpoint不为0则说明还有数据点跳到步骤3。其中,算法流程图如图5所示。图像填充算法设计与实现由于ct图像有噪点,用区域生长算法或者阈值分割算法时,会有很多噪点没有被分割进去,导致分割结果表现出有稀疏漏洞的情况,填充算法就是为了解决这个问题。该算法的原理是:一个未标记的点的前、后、左、右、上、下6个方向上在一定距离内有都有标记点,则此点也应该被标记。下面是三维图像填充算法步骤:(1)确定填充算法执行的范围。图像数据量巨大,如果不缩小填充算法范围,运算速度会非常慢,根据区域生长算法得到遍历的边界。(2)确定6个方向上遍历步长step(step大多数情况下为1)和6个方向上遍历距离length。注意如果length设的过大,会造成误分割,将非数据内的点也提取出来,所以要经过大量实验,确定较为合适的遍历距离长度。(3)未标记点向6个方向遍历。(4)如果6个方向length长度内都有标记点,则说明此数据点是模型内的噪点,将其标记。该算法流程图如图6所示。基于重心边界处理的曲面网格构建算法设计与实现用区域生长或填充算法对ct图像数据进行处理后,提取到肺部血管和气管数据,接下来要将提取出的数据进行边缘网格模型构建,构建成网格模型后才可以导入到混合现实设备中进行展示,供医生观察。本算法实现过程参考了marchingcubes算法。模型构建算法原理是根据图像像素提取等值面,在提取来的等值面中构造三角片面,然后将三角片面相关数据保存在stl文件中,stl文件本质就是txt文件,只是后缀名不同。本算法的核心在于找到边缘六面体的重心代替边缘六面体,然后把边缘点相连成三角形。算法原理边界处的六面体的8个点分别被标记为0或1,被标记为1的点则是靠近模型的点,若一个临界边的两个点分别被标记为0和1,则此边有意义,取此临界边中点来代表临界边的中心,对于一个六面体,我们获取此六面体所有临界边的中心点,然后对临界边的中心点取均值作为临界六面体的重心。最后把边界位置重心点链接起来形成多个三角形面片,就是我们想要的结果。首先研究二维图像边界重心点的获取方法,再将此方法推广到三维曲面网格构建。对于二维图像边界的获取如图7所示。c点被标记,d点未被标记,则cd边为临界边,cd边有两个临界正方体,每个正方体内有一个重心点,在左上角临界正方体内有两条临界边,两条临界边的中点和c点的重心为a点,这样我们会发现每条临界边的周围都有两个重心点,对于每个临界边来说,连接周围2个重心点和边上被标记的点,则组成一个三角形面片。然后我们将二维的边界获取方法推广到三维。如图8所示。二维上的临界边周围有两个临界正方体,两个临界的重心,推广到了三维图像上每个临界边周围有4个边缘六面体,4个边缘重心点。4个重心点不一定在一个平面上无法构成平面四边形,但是这4个点可以构成两个三角形,那么每个边缘六面体我们都按照此方法构造,最后三维物体表面就会被多个三角面片所覆盖。需要注意的是4个点构造两个三角形时要有一条边给两个三角形共用,而这条边为对角的两个立方体内的点构成,为了避免出现另外两个点在一侧的情况。在图10中,这条共用边可以为ce或fd,但是cf和de是不可取的。算法设计如图9所示:建模算法步骤如下:(1)数据二值化,气管部分被标记为1,非气管部分被标记为0。将分割的mark标记数组直接拿来用做数据二值化的结果。(2)从等值面边界六面体中,有8个点,mark为0或mark为1,有三种情况:第一种情况8个点都被标记为1则是体内数据,第二种情况8个点都被标记为0则是体外数据。以上两种情况不做任何处理。如果8个点有被标记成0的点也有被标记成1的点,则是我们所关心的六面体边界,要对其进行处理,根据它找到重心。首先找到mark(0,1)的边,startpoint为mark1的点,endpoint为mark0的点,edgepoint代表边界点,num为每个边界六面体edgepoint的数量,对于每一个临界六面体内都有一个重心。(3)根据上一步得到的六面体,对六面体进行处理。一个六面体有8个点,12条边,每个边上的2个点对标记值有4种情况:(0,1)、(1,0)、(0,0)、(1,1)。这4种情况的边,前两种是我们所关心并且要处理的边,因为边上的两个点一个标记为0一个标记为1则最能代表模型内部和模型外部之间的边界。(4)根据上一步得到的边界获取每个六面体的重心点。(5)第三步获取的每个0-1边,相邻的是4个六面体,每个六面体都有一个重心点,则每个0-1边都有4个临近的重心点,将这4个重心点构成两个三角面片。(6)将三角面片的数据信息存储在stl文件中。算法实现模型构建算法实现部分主要分为三个功能模块:找到边界的边和构造重心点、三角面片的构造、模型数据保存成stl文件,主要功能实现函数如表1所示。表1算法功能函数table1functionfunctionofalgorithm在findsignedge函数作用是寻找临界边和选取边界的重心,在此函数中找到mark(0,1)的边,然后根据边的数据构造边界网格的点。genfacet函数是三角面片构造函数,我们提取出所有mark(0,1)的边,则每个边周围有4个相邻六面体,4个相邻重心点,则根据这4个点构造两个三角面片。构造方法:首先4个重心点形成一个四面体,两两相连的一共六条边,选取任意对角的两个点构成两个三角面片的公共边,选对角的点构成的边作为两个三角形公共边是为了避免另外两个点在边的同一侧的情况。然后将由3个点构成两个边,将两条边做叉积得到法向量,将法向量和mark(0,1)的边做点积,如果结果小于0则说明法向量方向反了,将法向量取反,以保证法向量方向垂直三角面片且方向永远朝向体外。savemeshmodel函数将得到的三角面片数据按照stl文件格式写入文件,保存在本地。保存stl文件stl只能用来表示封闭的面或者体,stl文件有两种:一种是ascii明码格式,另一种是二进制格式。本系统采用ascii明码格式。ascii码格式的stl文件逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。(1)在stl文件中的三角面片的信息单元facet是一个带矢量方向的三角面片,stl三维模型就是由一系列这样的三角面片构成。(2)整个stl文件的首行给出了文件名。(3)在一个stl文件中,每一个facet由7行数据组成。(4)facetnormal是三角面片指向实体外部的法矢量坐标。(5)outerloop说明随后的3行数据分别是三角片面的3个顶点坐标,3个顶点沿指向实体外部的法矢量方向逆时针排列。(6)ascii格式的stl文件结构如图10所示。系统设计实现通过前面的图像分割、模型构建步骤获得了气管和血管的模型,并保存为stl格式文件,将获得的模型导入到unity3d开发软件当中,进行系统交互设计。由于混合现实设备hololens没有外部硬件输入接口,没有鼠标、手柄、键盘等硬件输入设备,所有的输入都是靠设备去识别用户的手势动作,利用设备的手势识别技术把用户手势识别的结果当做输入,当用户通过手势来控制系统的模型时,系统要给出相应的反馈,输入设置为:准备输入手势、点击手势、移动手势。4个主要的系统功能:气管和血管颜色区分、模型旋转、模型移动、模型显示和模型隐藏。最后利用微软这款hololens设备的开发工具包进行开发实现具体功能。实验结果气管分割结果与分析数据来源于江苏省某医院ct设备拍的dicom格式数据。此次测试数据每层dicom图片大小为512*512,共378层。数据真实可靠。读取此病人肺部图像,在中间的任意一层取气管的一个种子点,先进行区域生长算法分割气管,然后进行填充将噪点填充上,气管和血管分割的结果越精准,医生对病人肺部组织结构了解的就会越清楚,从而进行更精准的手术治疗。图11分别为4层数据结果图。算法评估:从图11中区域生长提取结果可以看出气管中有少许漏洞,应用填充算法将漏洞进行了填充后的结果可以发现漏洞消失。气管分割结果具体数据如表2所示。表2气管分割结果table2tracheasegmentationresult血管分割结果与分析下面根据血管分割结果展示进行分析。在图12中我们可以看到肺实质和气管在图像中像素值较低,用区域生长可以将肺实质和气管一起提取出来,在图12中显示为黄色的部分是应用区域生长算法提取出来的肺实质和气管,二维图像中间白色区域为心脏,左右两侧白色部分为肺内部的血管,图像外圈是骨。气管和肺实质被标记为黄色,对肺部进行填充得到的肺部血管被标记为红色,为了方便观察和对比,在图13中的(b)中将黄色进行隐藏,只显示红色,以便和(a)进行肺部血管对比。从结果中我们可以清楚的看到通过多次的填充将肺内部的血管几乎都提取了出来,分割的准确率很高,这样就可以将病人肺部真实结构更准确的展示给医生。缺陷在于,肺边缘和心脏相连接的血管由于面积过大,并且没有别肺包围住,所以分割有明显的瑕疵。但不影响医生对病人模型的观察。血管分割算法结果如表3所示。表3血管分割结果table3vascularsegmentationresult模型构建算法结果和评估以记事本方式打开stl文件可看到三角面片数据。如图14所示,stl文件里顺序存储了每个三角面片的数据,先是每个三角面片的法向量,然后是三角面片的三个数据点的坐标。在图15中为stl文件放入3d软件中的显示结果。系统实现结果整个系统的功能有模型移动、模型旋转、模型显示隐藏等多个功能。在系统设计中需要对功能键设计,让界面变得简洁,让医生很容易的识别和理解到它的作用,如果没有一个好的界面设计,界面会显得臃肿、难看、难以使用,加上医生对混合现实不了解,若是没有一个易用的界面。系统界面如图16所示。在图17的结果显示中,我们可以清楚的看到将点击隐藏气管功能键后,气管隐藏,同时隐藏气管功能键text变为显示气管,当用户点击显示气管后,气管显示,同时功能键text变为隐藏气管。交互的三个过程:(1)识别预备动作。(2)点击模型并且移动旋转。(3)最后手势回归到预备动作后,模型控制解除。在图18中的3个结果图分别展示了这个操作流程的3个步骤,(a)是刚识别到预备手势时,(b)是用户点击模型对模型移动旋转的过程中,(c)是用户手势回归预备手势,则解除模型控制。最后应说明的是,以上所述的各实施例仅限于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述实施例记载的技术方案进行修改,或者对其中部分或全部技术特征进行等同替换;而这些修改或替换,并不会使相应技术方案的本质脱离本发明个实施例技术方案的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1