一种基于移动终端的医学三维模型显示和切割系统
技术领域
本发明涉及移动信息处理
技术领域
的技术领域
,尤其涉及一种基于移动终端的医学三维模型显示和切割系统。背景技术
近年来5G技术的飞速崛起和移动终端软硬件技术的高速发展,医疗和移动终端的结合成为了一种热门且重要的趋势,更好的移动终端软硬件技术让以前传统的用户只能在PC终端查看且分析的医疗数据在移动终端随时随地分析研究医疗数据成为了可能。此外,对于医学影像数据精确的三维重建技术也越发成熟,通过该技术生成的医学三维模型来进行显示可以让用户更为直观地观察患者身体结构和患病情况,对于用户更加方便的分析和诊断病患方面起到了很大的作用。同DICOM医学影像一样,大部分在PC终端上重建后的医学三维模型显示都集中于PC终端,所以为了用户可以方便的在移动终端就可以分析由患者真实的医学影像生成的医学三维模型,在移动终端同时显示多个医学三维模型并可以对模型进行切割、旋转以及自由展示模型等操作让用户集中观察某一患处和整体结构具有实际应用意义。可以极大的帮助了用户对病患医学影像数据的分析和诊断。
中国专利“CN103136785A用于移动终端的人体医学模型三维可视化系统及其实现方法”提供了一种在服务器端将医学影像生成为三维模型,然后在移动终端上显示人体医学三维模型的方法。此专利在服务器端进行三维重建后生成stl模型又转换为3ds模型进行精简后传入手机之中进行显示。移动终端使用操作系统的输入输出流把模型文件读入内存,然后将模型数据传入OpenGL ES进行三维渲染并显示,最后通过手势识别实现了三维医学模型的旋转、缩放和平移操作。
中国专利“CN103136785A用于移动终端的人体医学模型三维可视化系统及其实现方法”所述的实现方法是:首先在服务器端利用医学影像数据进行三维模型的生成,然后在移动终端上简单的显示了人体医学模型,并添加了最基本的几种图形化操作:旋转、缩放和平移。这样的话,移动终端只是一个显示的工具,用户只能通过移动终端对模型进行简单的观察,并不能在移动终端上做出更多的操作,并且只能一次加载一个模型进行查看,没有充分利用到现在移动终端硬件高速发展的优势。
但是,传统的分割模型方法是直接作用到点数据上的,直接将模型点数据进行删除然后在重新进行渲染,在移动终端上由于内存大小的限制,如果采用这样的切割方式对于显示的稍大医学模型将会产生过大的内存开销和时间开销,导致切割效率低下,甚至无法切割的情况,不能达到顺畅使用辅助用户的要求。
发明内容
(一)要解决的技术问题
鉴于现有技术的上述缺点、不足,本发明提供一种基于移动终端的医学三维模型显示和切割系统。
(二)技术方案
为了达到上述目的,本发明采用的主要技术方案包括:
第一方面,本发明实施例提供一种基于移动终端的医学三维模型显示和切割系统。
本发明实施例提出的一种基于移动终端的医学三维模型显示和切割系统,其特征在于,所述系统位于移动终端内,所述移动终端包括:渲染底层(Opengles的渲染管道)、移动终端的缓冲区,其特征在于,所述系统包括Model-View-ViewModel架构;
所述Model-View-ViewModel架构包括Model层、View层和ViewModel层;
View层用于接收用户操作的数据,并将所述用户交互操作的数据传递至ViewModel层;
ViewModel层用于在接收到View层传来的用户操作的数据后,根据所述用户操作的数据和预先存储的操作数据,对预先存储的模型文件进行处理,获取处理结果,并将处理结果保存至Model层;
其中,所述预先存储的模型文件为采用LiveData的组件对模型列表进行存储;
Model层连接数据库,永久保存模型文件中的数据;
所述View层包括:模型加载模块、包括渲染器的模型显示模块、模型管理模块。
优选的,
所述模型文件中包括三维模型的:顶点数据、法向量数据;
所述用户操作的数据包括:用户在移动终端的显示屏触发的切割方式按钮信息和用户触发的切割范围信息;
所述操作数据包括:创建渲染程序并加载着色器函数、内切割函数、外切割函数、模型渲染函数。
优选的,
所述模型加载模块,用于读取所述移动终端内的预先设定的初始模型文件获取与所述预先设定的初始模型文件对应的模型文件,并将所述模型文件存储到ViewModel层的预先设定的模型列表之中;
所述初始模型文件包括三维模型中所有的顶点数据和面索引值;
每一所述面索引值包括三维模型中三角面的三个顶点在模型文件中的位置坐标;
所述模型加载模块读取所述移动终端内的预先设定的初始模型文件获取与所述预先设定的模型文件对应的模型文件,并将所述模型文件存储到ViewModel层的预先设定的模型列表之中,具体包括:
根据所述移动终端内的预先设定的初始模型文件的面索引值确定所述顶点数据中构成三角面的顶点的坐标并依次存储在模型文件的点数据中;
判断所述预先设定的初始模型文件中是否有点的法线向量数据;
若有,则根据预先设定的点向量的索引值从所述初始模型文件中的点数据中找出点的法线向量坐标存储到所述模型文件的法线向量数据中;
若没有,则根据所述顶点数据中构成三角面的三个顶点坐标获取相应的三角面的法向量,并将所述三角面的法向量作为这三个顶点坐标的点法向量数据;
对每一个模型文件赋予一个颜色值,并将所述模型文件加入到预先设定的模型列表之中。
优选的,
模型管理模块,用于采用LiveData的方式在ViewModel中对所述预先设定的模型列表进行存储。
优选的,
包括渲染器的模型显示模块,用于读取所述ViewModel层中模型列表中的模型文件并进行预处理,进一步显示所述模型文件;具体包括:
将每个模型文件中的点数据和法向量数据加入到移动终端的渲染底层的缓冲区中;
模型显示模块中的渲染器读取预先设定的着色器程序并对每个模型文件采用所述创建渲染程序并加载着色器函数创建渲染程序和着色器进行绑定;
将模型显示模块中的渲染器构建的模型文件的总变换矩阵、颜色值、模型文件中的点数据和法向量数据传入所述着色器中进行顶点的最终显示位置的计算和光照的显示效果的计算,获取所述模型文件中每个顶点坐标对应的在二维屏幕上显示的坐标和光照的显示效果;
所述总变换矩阵为所述模型显示模块中的渲染器中的模型的缩放矩阵、平移矩阵和旋转矩阵相乘构成的;
调用预先设定的绘画函数在移动终端的渲染底层中进行三维模型的渲染并基于所述模型文件中每个顶点坐标对应的在二维屏幕上显示的坐标和光照的显示效果,将模型文件显示在移动终端的显示屏中。
优选的,所述系统还包括:
图形化操作模块,用于获取用户选择模型的X轴的自动旋转按钮,则将模型按照X轴进行自动旋转;或,
用于获取用户选择模型的Y轴的自动旋转按钮,则将模型按照Y轴进行自动旋转;或,
用于获取用户选择模型的Z轴的自动旋转按钮,则将模型按照Z轴进行自动旋转。
优选的,所述系统还包括:
模型切割模块,用于获取用户在移动终端的显示屏触发的切割方式按钮信息和用户触发的切割范围信息,根据所述内切割函数或外切割函数对所述模型文件进行切割,获取切割结果;
所述切割方式按钮信息包括内切割方式按钮信息和外切割方式按钮信息;
所述用户触发的切割范围信息包括:每一次用户的手指在移动终端的显示屏上移动的坐标信息。
优选的,
所述获取用户触发的切割方式按钮信息和用户触发的切割范围信息,对所述模型文件进行切割,获取切割结果,具体包括:
根据所述用户触发的切割范围信息获取切割范围;
所述切割范围包括:坐标信息集合中的坐标信息首尾相连而形成一个封闭的多边形区域;
所述坐标信息集合中包括:每一次用户的手指在移动终端的显示屏上移动的坐标信息;
判断顶点是否在切割范围中,获取判断结果并根据所述判断结果和所述用户触发的切割方式按钮信息,确定是否对所述顶点进行删除;具体包括:
若所述判断结果为所述顶点在切割范围中,且所述用户触发的是外切割方式按钮信息,则将所述顶点删除;
若所述判断结果为所述顶点在切割范围中,且所述用户触发的是内切割方式按钮信息,则将所述顶点保留;
若所述判断结果为所述顶点不在切割范围中,且所述用户触发的是外切割方式按钮信息,则将所述顶点保留;
若所述判断结果为所述顶点不在切割范围中,且所述用户触发的是内切割方式按钮信息,则将所述顶点删除;
所述切割结果包括保留的顶点;
所述判断顶点是否在切割范围中,具体包括:
判断与所述顶点对应的第一射线与所述切割范围是否有奇数个交点,若有,则确定模型的顶点在切割范围之内;
与所述顶点对应的第一射线为从顶点开始向右发射的一条射线。
优选的,所述模型切割模块,还用于获取在对所述模型文件进行切割过程中的每次切割后所保留的顶点的开始位置和顶点的数量;
根据每次切割后所保留的顶点的开始位置和顶点的数量,获取每次切割后所保留的顶点的区间;
根据每次切割后所保留的顶点的区间,获取在对所述模型文件进行切割过程中每次切割后所保留的顶点的区间中重合的顶点;
采用预先设定的所述模型渲染函数渲染所述每次切割后所保留的顶点中重合的顶点。
优选的,所述系统还包括:
与移动终端连接的PC端医学影像三维重建模块,用于读取预先获取的医学影像数据进行三维重建,将二维的医学影像数据重建为三维模型,并将所述三维模型存储至移动终端内的预先设定的初始模型文件中。
(三)有益效果
本发明的有益效果是:本发明的一种基于移动终端的医学三维模型显示和切割系统,由于采用Model-View-ViewModel架构,相对于现有技术而言,Model-View-ViewModel架构能够使移动终端上同时加载多个模型文件并进行各种操作,又能够对模型文件进行高效切割。
本发明的一种基于移动终端的医学三维模型显示和切割系统,由于采用Model-View-ViewModel架构让各个模块大幅度解耦并让模型文件中的数据全局共享化,节省了内存开销,保证了数据的实时性和正确性,提高了复用性。
本发明的一种基于移动终端的医学三维模型显示和切割系统中,模型切割模块,在进行对所述模型文件进行切割的过程,每次切割时系统存储的是需要渲染点的开始位置和点的数量并未删除或移动模型的顶点数据,在多个模型显示或者模型过大的情况之下,大大的节省了内存消耗和时间的消耗,提高了系统的效率和流畅性。
附图说明
图1为本发明的一种基于移动终端的医学三维模型显示和切割系统架构示意图;
图2为本发明的一种基于移动终端的医学三维模型显示和切割系统总功能架构图;
图3为本发明的一种基于移动终端的医学三维模型显示和切割系统中模型文件的解析并加载的流程图;
图4为本发明的一种基于移动终端的医学三维模型显示和切割系统中模型点坐标变换和显示整体流程图;
图5为本发明的一种基于移动终端的医学三维模型显示和切割系统中切割范围线显示的总体流程图;
图6为本发明的一种基于移动终端的医学三维模型显示和切割系统中判断点在切割范围内方法示意图;
图7为本发明的一种基于移动终端的医学三维模型显示和切割系统中切割方法示意图;
图8为本发明的一种基于移动终端的医学三维模型显示和切割系统中多次切割合并方法示意图;
图9为本发明的一种基于移动终端的医学三维模型显示和切割系统中医学影像三维重建的流程图。
具体实施方式
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
为了更好的理解上述技术方案,下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更清楚、透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
参见图1,本实施例提供一种基于移动终端的医学三维模型显示和切割系统,所述系统位于移动终端内,所述移动终端包括:渲染底层(Opengles的渲染管道)、移动终端的缓冲区(也就是移动终端的部分内存),所述系统包括Model-View-ViewModel架构;所述Model-View-ViewModel架构包括Model层、View层和ViewModel层。
View层用于接收用户交互操作的数据,并将所述用户交互操作的数据传递至ViewModel层。
ViewModel层用于在接收到View层传来的用户操作数据后,根据所述用户操作数据和预先存储的操作数据,对预先存储的模型文件进行处理,获取处理结果,并将处理结果保存至Model层。
其中,所述预先存储的模型文件为采用LiveData的组件对模型列表进行存储。
Model层连接数据库,永久保存模型文件中的数据。
所述View层包括:模型加载模块、包括渲染器的模型显示模块、模型管理模块。
在本实施例的实际应用中,所述模型文件中包括三维模型的:顶点数据、法向量数据。
所述用户操作的数据包括:用户在移动终端的显示屏触发的切割方式按钮信息和用户触发的切割范围信息。
所述操作数据包括:创建渲染程序并加载着色器函数、内切割函数、外切割函数、模型渲染函数。
在本实施例的实际应用中,所述模型加载模块,用于读取所述移动终端内的预先设定的初始模型文件获取与所述预先设定的初始模型文件对应的模型文件,并将所述模型文件存储到ViewModel层的预先设定的模型列表之中。
所述初始模型文件包括所有的三维顶点数据和面索引值。
每一所述面索引值包括组成三角面的三个顶点在模型文件中的位置坐标。
所述模型加载模块读取所述移动终端内的预先设定的初始模型文件获取与所述预先设定的模型文件对应的模型文件,并将所述模型文件存储到ViewModel层的预先设定的模型列表之中,具体包括:
根据所述移动终端内的预先设定的初始模型文件的面索引值确定所述三维顶点数据中构成三角面的顶点的坐标并依次存储在模型文件的点数据中。
判断所述预先设定的初始模型文件中是否有点的法线向量数据。
若有,则根据预先设定的点向量的索引值从所述初始模型文件中的点数据中找出点的法线向量坐标存储到所述模型文件的法线向量数据中。
若没有,则根据所述三维顶点数据中构成三角面的三个顶点坐标计算出三角面的法向量,然后将计算出的三角面的法向量作为这三个顶点坐标的点法向量数据。
对每一个模型文件赋予一个颜色值,并将所述模型文件加入到预先设定的模型列表之中。
在本实施例中移动终端提供用户选择模型文件的界面,用户点击移动终端的显示界面选择模型文件,用户可以自由选择单个的模型文件或者长按进行模型文件的多选。选择完成后,移动终端的显示界面显示用户选择的所有的模型文件路径供用户进行确实,确认无误后,用户点击显示按钮后移动终端多线程进行异步后台模型文件的解析并加载。
参见图3,本实施例中的系统加载文件的步骤为:
读取模型文件的面索引值从存储的所有顶点数据中找到构成一个三角面的点坐标按顺序存储在该模型文件的点数据中。
判断该模型文件中是否有模型的点法线向量数据,若没有则根据平均面法线向量策略赋值给构成这个面的三个点坐标作为它们的点法线向量,否则系统直接根据面的索引值从顶点数据中找出点的法线向量坐标存储到该模型的法线向量数据之中。
释放中间存储数据,对每一个模型的显示状态初始化为显示并随机赋予一个颜色值,系统将该模型加入到模型列表之中,模型的点数据和点法线向量数据解析并加载完毕。
本实施例的实际应用中,模型管理模块,用于采用LiveData的方式在ViewModel中对所述预先设定的模型列表进行存储。
本实施例中ViewModel中对模型列表进行维护和操作,在ViewModel中使用LiveData的方式对模型列表进行存储。ViewModel+LiveData的模式拥有很长的生命周期,可以贯穿整个系统的生命周期,保证了系统可能因为屏幕在横竖屏之间系统重建时模型数据的保存,也保证了我们的模型数据可以共享,在整个系统之中都可以通过这种模式来获取最新的相同的数据,节省了内存开销的同时,处理内存和业务的生命周期更加简单,更利于系统的维护和复用。
用户隐藏或展示模型的主要步骤如下:
用户通过点击模型的显示列表按钮让系统会打开模型显示列表。
系统展示模型列表中当前加载的模型序号和名称以及该模型文件当前是否显示在界面上的开关。
用户自由选择当前加载的模型文件是否显示在界面上,打开该模型文件的开关就是显示,关闭则不显示,系统记录每个加载模型文件的显示状态。
本实施例的实际应用中,包括渲染器的模型显示模块,用于读取所述ViewModel层中模型列表中的模型文件并进行预处理,进一步显示所述模型文件;具体包括:
将每个模型文件中的点数据和法向量数据加入到移动终端的渲染底层的缓冲区中。
模型显示模块中的渲染器读取预先设定的着色器程序并对每个模型文件采用所述创建渲染程序并加载着色器函数创建渲染程序和着色器进行绑定。
将模型显示模块中的渲染器构建的每个模型文件的总变换矩阵、颜色值、模型文件中的点数据和法向量数据传入所述着色器中进行顶点最终显示位置的计算和光照的显示效果的计算,获取所述模型文件中每个顶点坐标对应的在二维屏幕上显示的坐标和光照的显示效果。
所述总变换矩阵为所述模型显示模块中的渲染器中的模型的缩放矩阵、平移矩阵和旋转矩阵相乘构成的。
调用预先设定的绘画函数在移动终端的渲染底层中进行三维模型的渲染并基于所述模型文件中每个顶点坐标对应的在二维屏幕上显示的坐标和光照的显示效果,将模型文件显示在移动终端的显示屏中。
本实施例中系统在后台进行文件的解析并加载完成后,会自动生成模型列表,里面存储着每一个要显示的模型文件的点数据、法线向量数据、显示状态和颜色值。系统跳转到模型文件的显示并操作界面,通过使用OpenGL ES2.0底层三维引擎来实现模型文件的显示,主要有用来显示模型文件和响应图形化操作的模型显示窗口(GlSurfaceView)和用来渲染模型的渲染器(Renderer),通过向顶点着色器传入的模型总变换矩阵和点数据计算出顶点最终在移动终端二维界面上显示的位置,着色器会通过点的法线向量数据和传入的颜色值计算出最终在移动终端二维界面上模型显示的光照和颜色效果。
本实施例中系统对模型文件进行预处理,具体为:
读取每个模型文件中的点数据和法向量数据加入到渲染底层的缓冲区中,节省渲染的时间。
读取系统中预先设定的着色器程序并对每一个模型文件都创建一个渲染程序和着色器进行连接。
在渲染器中构建每个模型的变换矩阵来传入着色器中进行模型点最终显示位置的计算。
参见图4,本实施例中构建模型的变换矩阵并显示的主要步骤如下:
为了让三维模型在二维平面上呈现三维效果,设置了透视投影矩阵和相机设置矩阵。相机设置矩阵模拟我们眼睛所在的位置,透视投影矩阵模拟我们的视角大小和距离构成一个视锥体,视锥体内的物体投影在视锥体的近平面上显示。
构建模型文件自身的模型矩阵,主要包括:缩放矩阵、平移矩阵和旋转矩阵,用来改变模型点的坐标显示位置来实现用户的图形化操作。
将所有变换矩阵相乘构成的模型总变换矩阵、颜色值、模型点数据以及模型点法线向量数据传入着色器中进行显示位置和效果的计算。
调用预先设定的绘画函数在渲染管线中进行三维模型的渲染并将模型显示在视图窗口之中。
本实施例的实际应用中,所述系统还包括:
图形化操作模块,用于获取用户选择模型的X轴的自动旋转按钮,则将模型按照X轴进行自动旋转;或,用于获取用户选择模型的Y轴的自动旋转按钮,则将模型按照Y轴进行自动旋转;或,用于获取用户选择模型的Z轴的自动旋转按钮,则将模型按照Z轴进行自动旋转。
本实施例中所有的图形化操作都是基于模型的变换矩阵来进行的,当系统加载完三维模型数据之后会将最后的模型显示在视图窗口之中,用户可以在视图窗口之中控制模型的缩放和旋转,也可以点击模型操作界面中的按钮来对显示的模型进行自动旋转、复原位置、平移以及加载更多模型等操作。
本实施例中,图形化操作模块的主要功能及实现如下所示:
旋转:用户在视图窗口上单指滑动,根据手指移动距离计算出需要旋转的角度,之后改变模型的旋转变换矩阵从而让模型进行旋转。
缩放:用户在视图窗口上用双指进行移动,系统首先记录下初始两指距离,最后通过比较用户两指移动距离和初始距离的大小来改变模型的缩放变换矩阵来实现模型的缩放。
自动旋转按钮:用户可以自由选择绕X轴、绕Y轴以及绕Z轴自动旋转之一,系统将用系统时间作为种子点来计算出每一次渲染模型时需要旋转的角度,同时系统将渲染三维模型调整为持续渲染,每隔16ms就会重新渲染一次模型,随着时间的增加视图窗口中的模型就会呈现出自动旋转的效果。
恢复原位按钮:用户点击该按钮后,系统会将模型的缩放矩阵、平移矩阵以及旋转矩阵这三个模型变换矩阵进行初始化为单位矩阵,模型将会复原成刚加载进来时的大小和位置。
平移模型按钮:用户点击该按钮后,系统将会锁定单指滑动360度旋转功能,让用户可以在界面上单指拖动模型移动到用户想要放在的位置上,同时用户依旧可以进行双指缩放功能。系统会调取缩放矩阵中的数据,根据调取的缩放矩阵数据来对平移距离进行比例计算出模型需要移动的位置距离,改变模型的平移矩阵来让模型具有平移改变位置的效果。
加载更多模型按钮:用户点击该按钮之后,系统调用文件管理器,用户可以进行单选模型文件或者长按多选模型文件,系统多线程在后台异步进行文件的解析并加载,加载完成后系统初始化新加载模型显示状态和赋予颜色值,最后将其加入模型显示列表,并更新视图窗口。
本实施例的实际应用中,所述系统还包括:模型切割模块,用于获取用户在移动终端的显示屏触发的切割方式按钮信息和用户触发的切割范围信息,根据所述内切割函数或外切割函数对所述模型文件进行切割,获取切割结果。
所述切割方式按钮信息包括内切割方式按钮信息和外切割方式按钮信息。
本实施例中介绍两种模型切割的方式:外切割方式和内切割方式,其中,外切割方式就是用户画出需要割下的范围,切割掉范围内的模型点,相反,内切割就是保留用户画出的范围内的模型点,范围之外的点全部舍弃。
所述用户触发的切割范围信息包括:每一次用户的手指在移动终端的显示屏上移动的坐标信息。
本实施例的实际应用中,所述获取用户触发的切割方式按钮信息和用户触发的切割范围信息,对所述模型文件进行切割,获取切割结果,具体包括:
根据所述用户触发的切割范围信息获取切割范围。
所述切割范围包括:坐标信息集合中的坐标信息首尾相连而形成一个封闭的多边形区域。
所述坐标信息集合中包括:每一次用户的手指在移动终端的显示屏上移动的坐标信息。
判断顶点是否在切割范围中,获取判断结果并根据所述判断结果和所述用户触发的切割方式按钮信息,确定是否对所述顶点进行删除;具体包括:
若所述判断结果为所述顶点在切割范围中,且所述用户触发的是外切割方式按钮信息,则将所述顶点删除。
若所述判断结果为所述顶点在切割范围中,且所述用户触发的是内切割方式按钮信息,则将所述顶点保留。
若所述判断结果为所述顶点不在切割范围中,且所述用户触发的是外切割方式按钮信息,则将所述顶点保留。
若所述判断结果为所述顶点不在切割范围中,且所述用户触发的是内切割方式按钮信息,则将所述顶点删除。
所述切割结果包括保留的顶点。
本实施例中实现模型切割的第一步首先需要在二维平面上跟随用户的手指画出一个封闭区域。由于只能获取到用户在二维屏幕上的二维屏幕坐标,而OpenGL ES显示范围线需要世界三维坐标,所以首先需要对范围线进行一系列的坐标转换工作再加以显示。
参见图5,本实施例中切割范围的显示主要步骤如下:
记录下用户每一次手指移动的坐标信息并且每次都将开始坐标加入到坐标信息集合末尾保证线的坐标信息首尾相连而形成一个封闭的不规则多边形区域这个区域就是切割范围。
系统将线的二维屏幕坐标转换为二维归一化设备坐标并存储,用于后续和三维模型点投影在二维视图上的点进行范围比较。
由于模型的三维坐标点投影在二维平面上使用了透视投影矩阵和相机矩阵,所以系统会求出这两个矩阵的反转矩阵来将线的二维归一化设备坐标转换为世界三维坐标并进行存储。
将线的世界三维坐标信息存入缓冲区。
创建线的渲染程序并连接着色器。
向范围线的着色器传入总变换矩阵,调用渲染函数,渲染管线渲染范围线并将其显示到屏幕之上。
用户画出的范围处理并显示完毕之后,系统取出线的二维归一化设备坐标,并取出模型的点数据和模型的最终变换矩阵相乘求出的模型点透射在二维屏幕上的坐标进行比较,如果在切割范围之内则进行删除,否则保持不变。
所述判断顶点是否在切割范围中,具体包括:
判断与所述顶点对应的第一射线与所述切割范围是否有奇数个交点,若有,则确定模型的顶点在切割范围之内。
与所述顶点对应的第一射线为从顶点开始向右发射的一条射线。
参见图6,本实施例中判断顶点是否在切割范围内采用的方法为:从该模型的顶点开始向右边发射一条射线,如果和切割范围有偶数个交点,则说明该顶点在切割范围之外,否则有奇数个交点时,则说明该顶点在切割范围之内。
同时由于OpenGl ES需要传入的顶点数据有序且三个顶点为一个三角面,如果只删除其中一个顶点会导致整个顶点数据面关系错乱而导致模型显示错误,所以本系统采用贪心策略,只要一个三角面中有一个点在范围之内,系统就删除整个三角面,维护顶点数据的顺序正确,保证模型的正常显示,提高效率。
本实施例的实际应用中,所述模型切割模块,还用于获取在对所述模型文件进行切割过程中的每次切割后所保留的顶点的开始位置和顶点的数量。
根据每次切割后所保留的顶点的开始位置和顶点的数量,获取每次切割后所保留的顶点的区间。
根据每次切割后所保留的顶点的区间,获取在对所述模型文件进行切割过程中每次切割后所保留的顶点的区间中重合的顶点。
采用预先设定的所述模型渲染函数渲染所述每次切割后所保留的顶点中重合的顶点。
参见图7,SP表示系统存储的渲染点(所保留的顶点)的开始位置,VC表示从这个SP开始系统应该渲染的点(所保留的顶点)的数量。整个浅色为模型的所有顶点数据,系统初始化存储模型的第一个顶点和所有顶点的数量,所以一开始会完整的显示模型。切割操作之后,深色部分为需要保留的顶点的部分,系统首先将切割前的模型状态加入模型状态列表中,然后存储每一段深色部分的开始位置和顶点的数量,浅色的视为切割删除。
参见图8,本系统实现医生的多次切割操作采用的方法为点区间的合并,系统求出上一次切割时的需要渲染点的区间和求出本次切割时的需要渲染点的区间进行区间合并,保留下来的区间的交集中的顶点即为系统最后需要渲染出来的顶点,以达到模型的多次切割效果。
由图8中所示,假设本次针对模型文件进行切割过程需要两次切割,集合A代表第一次切割后需要渲染的顶点(保留下来的顶点)区间,集合B代表第二次切割后需要渲染的顶点(保留下来的顶点)区间,集合ans代表A和B求交集后需要渲染的顶点区间即最后需要渲染的最后结果。
本系统的内切割和外切割都采用上述方法进行实现,所以模型的内外混合切割也是适用的。医生每次进行切割操作的时候,系统都会先将以前的模型状态信息记录到状态列表中。
医生选择撤销切割时,系统从模型状态列表中取出上一次的状态来恢复模型。由于每次切割时系统存储的是需要渲染点的开始位置和点的数量并未删除或移动模型的顶点数据,在多个模型显示或者模型过大的情况之下,大大的节省了内存消耗和时间的消耗,提高了系统的效率和流畅性。
本实施例的实际应用中,所述系统还包括:
与移动终端连接的PC端医学影像三维重建模块,用于读取预先获取的医学影像数据进行三维重建,将二维的医学影像数据重建为三维模型,并将所述三维模型存储至移动终端内的预先设定的初始模型文件中。
参见图9,在本实施例中,通过医学影像数据生成医学三维模型的主要方法为:
读取Dicom医学影像数据,将读取的数据存储为三维离散点数据,每个点数据存储的是Dicom图像的像素值。
对医学影像中的人体组织区域进行分割:根据不同的组织选择对应的种子点,设置灰度阈值差作为生长准则,从种子点向外扩张,直到不再有像素点满足条件位置,分割满足条件的点标记为1,不满足条件的点标记为0。
在分割后的带有人体组织标记的三维离散数据场中,将每八个顶点构成一个立方体,将一条两端顶点标记不同的边记为标记边,等值面就在标记边上,最后通过线性插值确定标记边具体位置。
将一个立方体中含有标记边中的等值点求质心,此质心点即为模型的顶点。
由于一条边被四个立方体所共享,那么一条标记边对应四个质心点,将这四个质心点连接构成两个三角面,并对三维数据场中所有标记边进行对应质心点的连接,最终获得完整的三角面片构成的医学三维模型。
本实施例中的一种基于移动终端的医学三维模型显示和切割系统,由于采用Model-View-ViewModel架构,相对于现有技术而言,Model-View-ViewModel架构能够使移动终端上同时加载多个模型文件并进行各种操作,又能够对模型文件进行高效切割。
本实施例中的一种基于移动终端的医学三维模型显示和切割系统,由于采用Model-View-ViewModel架构让各个模块大幅度解耦并让模型文件中的数据全局共享化,节省了内存开销,保证了数据的实时性和正确性,提高了复用性。
本实施例中的一种基于移动终端的医学三维模型显示和切割系统中,模型切割模块,在进行对所述模型文件进行切割的过程,每次切割时系统存储的是需要渲染点的开始位置和点的数量并未删除或移动模型的顶点数据,在多个模型显示或者模型过大的情况之下,大大的节省了内存消耗和时间的消耗,提高了系统的效率和流畅性。
由于本发明上述实施例所描述的系统,为实施本发明上述实施例的方法所采用的系统,故而基于本发明上述实施例所描述的方法,本领域所属技术人员能够了解该系统的具体结构及变形,因而在此不再赘述。凡是本发明上述实施例的方法所采用的系统都属于本发明所欲保护的范围。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例,或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。
应当注意的是,在权利要求中,不应将位于括号之间的任何附图标记理解成对权利要求的限制。词语“包含”不排除存在未列在权利要求中的部件或步骤。位于部件之前的词语“一”或“一个”不排除存在多个这样的部件。本发明可以借助于包括有若干不同部件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的权利要求中,这些装置中的若干个可以是通过同一个硬件来具体体现。词语第一、第二、第三等的使用,仅是为了表述方便,而不表示任何顺序。可将这些词语理解为部件名称的一部分。
此外,需要说明的是,在本说明书的描述中,术语“一个实施例”、“一些实施例”、“实施例”、“示例”、“具体示例”或“一些示例”等的描述,是指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管已描述了本发明的优选实施例,但本领域的技术人员在得知了基本创造性概念后,则可对这些实施例作出另外的变更和修改。所以,权利要求应该解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种修改和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也应该包含这些修改和变型在内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:用于节流光线追踪流水线的设备和方法