一种用于安卓平台的三维医学图像数据体绘制方法

文档序号:10613735阅读:708来源:国知局
一种用于安卓平台的三维医学图像数据体绘制方法
【专利摘要】本发明公开了一种用于安卓平台的三维医学图像数据体绘制方法,包含如下步骤:VTK开源库的跨平台移植;动态链接库的生成;输入病人病历号信息;查询并下载远程图像数据;体绘制资源初始化;渲染器调用动态链接库;骨骼与软组织的阈值求取;体绘制与触摸操作响应。
【专利说明】
一种用于安卓平台的三维医学图像数据体绘制方法
技术领域
[0001]本发明属于医学图像三维重建领域,特别是一种安卓平台上的三维医学图像数据体绘制方法。
【背景技术】
[0002]近年来,随着多元化医疗设备的普及以及人工智能兴起,医学图像在精确医疗诊断中起到越来越重要的作用,但二维图像只能呈现平面的信息,通过三维医学图像观察和分析到待诊断的器官的已成为提高医疗水平的一个迫切的需求,因此医学图像三维重建与显示成为了图像领域和人工智能的研究热点;此外,随着移动设备计算能力的提升,移动办公已成为很多场合的办公首选,同时适用于移动设备的GPU(Graphics Processing Unit,图形处理器)的出现使得平板设备具有了与个人电脑相媲美的图像处理能力,因此在安卓平台上进行三维医学图像的重建与智能体绘制成为了可能,也具有了实用价值。
[0003]对于移动设备上的三维图像体绘制,许多解决方案都是基于OpenGLES(OpenGLfor Embedded Systems是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计)来实现的,其缺点是功能实现复杂,代码编写困难、安全性能差、几乎不可复用,另外三维医学图像有着自身的特点,它对颜色标注,部位分割,切面显示,放缩显示,旋转操作有着进一步地要求,而使用OpenGL ES来实现这些功能有着巨大的困难,因此安卓平台上还没有出现一个较好的解决方案来实现医学图像的三维体绘制,我们的方案使用跨平台编译的方式将VTK(Visualizat1n Toolkit,视觉化工具函式库)医学图像三维重建和显示的基础库移植到安卓平台,界面采用JAVA语言实现,体绘制部分使用C++语言调用VTK库进行,巧妙地利用JNI的方式便利地实现了三维医学图像的体绘制,同时由于VTK基础库的完备性,使得三维图像的放缩、旋转、部分分割以及触摸操作等响应能简单快速地实现,并具有很好地可复用性,给在安卓平台上进行三维图像操作提供了一个新思路。当然我们的技术方案也有很多局限性,比如对三维医学图像的智能显示上,我们只作了颜色标注以及响应多点触摸,放缩以及旋转等操作,并未对图像切割,切面显示,去燥等进行实现,功能过于简单,可以进一步开发和实现根,同时由于体绘制过程中使用的VTK开源库是在Open GL3.0的基础上运行的,要求安卓系统的版本在4.3以上。

【发明内容】

[0004]发明目的:本发明为了解决移动设备上无法便利地进行三维医学图像的显示和操作的问题,提出了一种用于安卓平台的三维医学图像数据体绘制方法,从而有效解决在移动设备上进行医学三维图像的智能显示的问题。
[0005]
【发明内容】
:本发明公开了一种用于安卓平台的三维医学图像数据体绘制方法,其特征在于,包含以下步骤:
[0006]步骤I,VTK库的跨平台移植:在Linux操作系统上下载并编译VTK库,并移植编译到安卓Android平台,生成VTK静态链接库;
[0007]步骤2,生成动态链接库:采用C++编写阈值提取和体绘制代码,并将所述C++代码编译成动态链接库;
[0008]步骤3,输入病人病历号数据,用户名和密码,安卓平台向存放三维医学图像数据的远程服务器请求下载人体三维图像数据,所述远程服务器中存放有病人的病例数据;
[0009]步骤4,查询并下载远程图像数据:安卓平台将步骤2中输入的病人病历号数据、用户名以及密码通过网络传输给远程服务器,远程服务器向安卓平台发送对应的人体三维图像数据;
[0010]步骤5,体绘制资源初始化并自动响应触摸操作:进行体绘制时对体绘制视图以及对应的渲染器进行初始化,为体绘制准备资源,调用相应的渲染器响应函数自动响应触摸操作;
[0011]步骤6,渲染器响应函数调用步骤2中生成的动态链接库:渲染器响应函数通过JNI(Java Native Interface,即Java本地调用接口)的方式调用动态链接库来进行进一步的阈值提取和体绘制,同时将需进行体绘制的人体三维图像路径传给动态链接库;
[0012]步骤7,求取人体三维图像中骨骼与软组织的阈值:读取步骤4中从远程服务器接收的病人的人体三维图像数据,对其骨骼与软组织的边界进行分析并求取骨骼与软组织的阈值;
[0013]步骤8,VTK库对步骤4中从远程服务器接收的人体三维图像数据进行体绘制并响应触摸操作:利用步骤7中求取的骨骼和软组织的阈值标定人体三维图像数据中的体素颜色,并监听绘图窗口的触摸事件进行体绘制并响应触摸操作。
[0014]步骤2采用C++开发语言调用VTK开源库实现对人体三维图像的阈值提取和体绘制,然后将代码编译成动态链接库链接,动态链接库通过调用步骤I中生成的静态库的方式调用VTK开源库,实施中采用配置文件来配置静态链接库的链接顺序,在进行动态链接前,通过拓扑排序的方式生成配置文件,其中的拓扑条件为C++代码中头文件的引入顺序以及VTK开源库文件的包含关系。
[0015]步骤4中采用TCP(Transmiss1n Control Protocol传输控制协议)协议来进行数据的传输,采用创建新线程的方式实现人体三维图像数据的下载。下载数据为避免堵塞UI线程而采用开辟新线程的方式进行,服务器通过两次数据传输将病人信息文件和人体图像数据传回,通过验证用户名和密码的方式保护数据的安全性以及返回的文件长度的方式来保证文件的完整性。
[0016]步骤5中体绘制视图继承自安卓平台的GLSurfaceView类,GLSurfaceView类在OPENGL ES 3.0和安卓系统之间建立联系,使得OPENGL ES3.0可以在安卓系统的主活动中工作,清染器继承自安卓平台的GLSurfaceView.Renderer 类,GLSurfaceView.Renderer 类负责GLSurfaceView的渲染和触摸操作响应,渲染器负责体绘制视图的按需渲染并响应触摸操作。
[0017]步骤6中渲染器的渲染操作以及响应触摸操作都是通过JNI(JavaNativeInterface,JAVA本地调用接口)方式调用步骤2中生成的动态链接库来实现的,同时人体三维图像数据路径也是通过JNI的环境变量传输到C++代码中,再进一步传送到OPENGL ES3.0的C++库。
[0018]步骤4所述病人的人体三维图像数据的接收过程是在新创建的下载线程中完成的,步骤7求取人体三维图像中骨骼与软组织的阈值的过程是在主活动的UI线程中完成的,两个线程保持同步。线程之间的同步可以通过加锁或者设置同步变量的方式来实现。
[0019]步骤7中求取的骨骼阈值a与软组织阈值b是O到255之间的一个值,判定值超过软组织阈值b的体素为软组织部分,标注为红色;判定值在骨骼阈值a与软组织阈值b之间的体素为骨骼部分,标注为白色;判定值低于骨骼阈值a的体素为背景,标注为黑色,采用基于梯度算子的体数据分割方法求取阈值。阈值在使用VTK开源库进行体绘制的过程中,通过设置体素的颜色以及透明度的标注来区分软组织、骨骼以及背景。
[0020]步骤8包括如下步骤:
[0021]步骤8-1,创建VTK的渲染窗口、渲染器、窗口响应器以及渲染对象;
[0022]步骤8-2,设置渲染对象体素的透明度和显示颜色;
[0023]步骤8-3,设置光线透射法来进行体绘制;
[0024]步骤8-4,将渲染对象添加到渲染器,重置场景摄像机进行体绘制并响应触摸操作。
[0025]步骤8-4中响应触摸操作的包括如下步骤:
[0026]步骤8-4-1,体绘制视图感应到触摸操作,自动响应对应的触摸事件(如向上,向下,多点触控)方法,调用体绘制视图的响应函数;
[0027]步骤8-4-2,响应函数调用体绘制视图的渲染器的对应渲染函数;
[0028]步骤8-4-3,渲染函数通过JNI的方式调用动态链接库的C++函数;
[0029]步骤8-4-4,重复步骤8-1到8-4进行体绘制渲染,直到下一次触摸操作或者关闭体绘制界面时结束。
[0030]有益效果:本发明能够实现在安卓平台上的三维医学图像体绘制,利用跨平台移植VTK开源库的方式提高安卓平台上三维医学图像体绘制功能的拓展性和代码的复用性,同时能够便利地响应对三维医学图像进行平移、旋转、缩放、切面显示、颜色标注等智能操作,给移动设备上的医学图像操作提供了新的技术思路。此外,本发明中在移植VTK开源库的过程中,采用拓扑排序的方式来生成配置文件,也给跨平台移植提供了经验和思路。因此这种安卓平台上的三维医学图像体绘制方法方法具有较高的实用价值。本发明能够快速地检索和接收远程服务器的三维医学图像数据,实现骨骼与软组织的阈值求取,并进行颜色标注,便利地使用JNI方式调用VTK实现三维医学图像的智能显示和图像操作,此外,VTK库的跨平台移植与采用拓扑排序来确定链接顺序的方式,对第三方库的跨平台移植与使用有一定的参考价值。
【附图说明】
[0031]下面结合附图和【具体实施方式】对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0032]图1为本发明流程图。
[0033]图2为触摸操作响应流程图。
[0034]图3为显示效果图,从左至右分别为原图,放大、缩小、旋转后的图片。
【具体实施方式】
[0035]如图1所示,本发明公开了一种用于安卓平台的三维医学图像数据体绘制方法,其特征在于,包含以下步骤:
[0036]步骤I,VTK库的跨平台移植:在Linux操作系统上下载并编译VTK,并移植编译到Android平台;
[0037]步骤2,动态链接库的生成:将对三维图像进行阈值提取和体绘制的C++代码编译成动态链接库;
[0038]步骤3,输入病人病历号信息:输入病人病历号信息,安卓平台向存放三维医学图像数据的远程服务器请求下载人体三维图像数据;
[0039]步骤4,查询并下载远程图像数据:将病人病历号数据、用户名以及密码通过网络传输给远程服务器,远程服务器向安卓平台发送对应的人体三维图像数据;
[0040]步骤5,体绘制资源初始化或触摸操作:第一次进行体绘制时对体绘制视图View以及对应的Renderer进行初始化,为体绘制准备资源,触摸操作则调用响应的清染器响应函数;
[0041]步骤6,渲染器调用步骤2中生成的动态链接库:渲染器通过JNI的方式调用动态链接库;
[0042]步骤7,骨骼与软组织的阈值求取:读取人体三维图像数据,对其骨骼与软组织的边界进行分析并求取骨骼与软组织的阈值;
[0043]步骤8,VTK库对步骤4中从远程服务器接收的人体三维图像数据进行体绘制并响应触摸操作:利用步骤7中求取的骨骼和软组织的阈值标定人体三维图像数据中的体素颜色,并监听绘图窗口的触摸事件进行体绘制并响应触摸操作。
[0044]步骤I中VTK开源库的跨平台移植过程是在UbuntuH.04系统中利用Make工具完成的,具体包括如下步骤:
[0045]下载并安装NDK,0penJava,Android SDK,GCC,Make,0penGL3.0,并设置相关路径和环境变量;
[0046]下载并解压VTK6.3,并创建VTKBul id,VTKInstal I文件夹,其中VTKBui Id为编译路径,VTKInstall为安装文件路径;
[0047]进入VTK6.3,使用ccmake命令,配置好ndk,android sdk,opengl路径和版本;
[0048]选择vtk-android支持,配置好相关路径;
[0049 ]使用make命令编译出对应的Andr ο i d平台上的静态链接库文件。
[0050]步骤2中动态链接库的生成是在UbutntuH.04系统中利用NDK-build跨平台工具完成的,具体步骤包括:
[0051]编写调用VTK开源库进行阈值分割和体绘制的C++代码;
[0052]采用拓扑排序算法生成Android.mk配置文件,其中拓扑条件为代码中VTK开源库文件的调用顺序以及库文件的相互包含关系,配置文件的内容为静态链接库的链接顺序,每个链接选项是使用 include$(PREBUILT_STATIC_LIBRARY)、include$(CLEAR_VARS)、L0CAL_M0DULE、L0CAL_SRC_FILES 中来声明的,其中 inc Iude$ (PREBUILT_STATI C_LIBRARY)表示静态链接库,include$(CLEAR_VARS)表示清空编译空间的临时变量,L0CAL_M0DULE表明生成的静态链接库名,LOCAL_SRC_FILES表示静态链接库所用的源文件,实施方案中生成了 VTK开源库中所有的的静态文件,LOCAL_C_INCLUDES表示引入的头文件,实施方案中是引入步骤I中生成的VTK开源库头文件,LOCAL_LDLIBS表示另外链接的第三方动态库,LOCAL_STATIC_LIBRARIES表明引入的静态链接库,实施方案中引入了上诉生成的静态链接库,include$(BULID_SHARED_LIBRARY)表明生成动态链接库,LOCAL_MODULE = VolumeRender 表明生成的动态链接库名,LOCAL_SRC_FILES表明生成动态链接库的源文件;
[0053 ] 编写Applicat1n.mk文件,其中APP_STL表明用到的C++版本,APP_CPPFLAGS表明使用的C+ +特性,APP_AB I表明编译出来的动态链接库适用的版本,实施过程设置为armeab1-v7a ; NDK_T00LHAIN_VERS10N 表明 NDK 版本,实施过程中用的 4.9版本;
[0054]运行ndk-build命令将源文件生成对应的动态链接库(.so文件);
[0055]编写对应的java程序载入动态链接库,并声明其中的函数;
[0056]通过javah命令生成对应的动态链接库头文件。
[0057]步骤3中输入的病人病历号在实施中采用字符串的形式保存,当对远程服务器提交下载申请时会检测用户名和密码是否为空,若为空,需要进行用户名和密码输入,下载结果会在SD卡上保存病人信息文件和病人医学图像数据,分别以病历号.1nfo和病历号.vtk命名。
[0058]步骤4中采用的是TCP协议来进行数据的传输,是采用创建新线程的方式来实现的,具体包括如下步骤:
[0059]将用户名、密码以及病历号传输到远程服务器,下载病人信息文件(病历号.1nfo文件);
[0060]远程服务器验证用户名、密码,若错误,返回用户名、密码错误;若正确,查询病历号对应文件是否存在,若存在,返回该文件长度,并将文件写入TCP输出流;如不存在,文件长度为O;
[0061 ]若文件长度大于O,从TCP输入流中读入文件,在SD卡上新建文件(病历号.1nfo)并存储,申请下载病人的人体三维医学图像数据;
[0062]远程服务器查询病人的人体三维医学图像数据文件长度,若不存在返回0,若存在,返回该文件长度,并将文件写入TCP输出流;
[0063]若返回文件长度大于0,从TCP输入流读入人体三维医学图像数据,在SD卡上新建文件(病历号.vtk)并存储。
[0064]步骤5中体绘制视图View在实施过程中命名为VoIumeRenderView,清染器为Renderer ,VolumeRenderView监听了向上按压,向下按压,多点触摸等操作,分别调用Renderer 的 onKeyEvent 和 onMo t i onEvent 的响应方法。
[0065]步骤6中通过JNI方式调用动态链接库是在Renderer的响应函数onKeyEvent和onMot1nEvent,绘制函数onDrawFrame以及onSurfaceChanged函数中进行的,上诉函数在V0IumeRenderLib函数中声明,它们为C++本地函数,在动态链接库中实现,动态链接库采用System.1oadLibrary()在JAVA虚拟机中导入。
[0066]步骤7中求取的骨骼a与软组织阈值b是一个O到255的一个值,值超过b的体素被认定为软组织部分,标注为红色,值在a到b的体素被认定为骨骼部分,标注为白色,值低于a的体素被认定为背景,标注为黑色,具体步骤包括:
[0067]从JNI的JNIENV变量接收要进行体绘制操作的图像数据路径;
[0068]仓丨J建vtkStructuredPointsRender,vtkRendererWindow,vtkRenderer,VtkRendererWindowInteractor 等资源;
[0069]使用vtkStructuredPointsRender将三维医学图像读入内存;
[0070]使用基于梯度算子的体数据分割方法对上诉医学图像进行计算,求得骨骼阈值a和软组织阈值b,实施中a = 88,b = 93;
[0071 ] 使用vtkPiecewiseFunct1n类对值为O,a_l,a,b_l,b,255的体素进行透明度设置;
[0072]使用vtkCo1rTransferFunct1n类对值为O,a_l,a,b_l,b,255的体素进行显示颜色设置。
[0073]步骤8在实施中的具体步骤:
[0074]设置好vtkStructuredPointsRender,vtkRendererWindow,vtkRenderer,VtkRendererWindowInteractor 的响应链,创建 vtkVolumeProperty 对象;
[0075]将步骤7中的vtkPiecewiseFunct1n 与 vtkColorTransf erFunct1n 的对象添加到vtkVoIumeProperty 的属性中;
[0076]创建vtkOpenGLVolumeRayCastMapper对象,该对象使用光线透射法来进行体绘制;
[0077]创建vtkVo Iume对象,并设置该对象的单体素属性vtkVo IumeProperty对象和体绘制属性 vtkOpenGLVo IumeRayCastMapper 对象;
[0078]将vtkVolume对象添加到清染器vtkRenderer,重置场景中的摄像机进行体绘制;
[0079]VTK使用Android系统的OpenGL资源进行最终绘制。
[0080]如附图2所示,响应触摸操作的实施步骤为:
[0081 ] 体绘制视图(实施例中为VolumeRenderView)感应到触摸操作,自动响应对应的触摸事件(如向上,向下,多点触控)方法,调用体绘制视图Vo I umeRenderV i ew的响应函数;
[0082]响应函数调用体绘制视图VolumeRenderView的清染器Renderer的对应清染函数;
[0083]Renderer渲染函数通过JNI的方式调用动态链接库的CPP函数。
[0084]实施例中体绘制效果如附图3所示(因为附图只能为灰度图,因此图3只能以这种效果展示),其中第一张图为显示效果原图,第二张图为放大效果图,第三张为缩小效果图,第四张为旋转后体绘制效果图。
[0085]本发明提供了一种用于安卓平台的三维医学图像数据体绘制方法,具体实现该技术方案的方法和途径有很多,以上所述是本发明的优选实施方式。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本发明中未明确的各组成部分均可用现有技术加以实现。
【主权项】
1.一种用于安卓平台的三维医学图像数据体绘制方法,其特征在于,包含以下步骤: 步骤I,VTK库的跨平台移植:在Linux操作系统上下载并编译VTK库,并移植编译到安卓平台,生成VTK静态链接库; 步骤2,生成动态链接库:采用C++编写阈值提取和体绘制代码,并将所述C++代码编译成动态链接库; 步骤3,安卓平台向存放三维医学图像数据的远程服务器请求下载人体三维图像数据; 步骤4,远程服务器向安卓平台发送对应的人体三维图像数据; 步骤5,体绘制资源初始化并自动响应触摸操作:进行体绘制时对体绘制视图以及对应的渲染器进行初始化,为体绘制准备资源,调用相应的渲染器响应函数自动响应触摸操作; 步骤6,渲染器响应函数调用步骤2中生成的动态链接库:渲染器响应函数通过JNI的方式调用动态链接库来进行进一步的阈值提取和体绘制,同时将需进行体绘制的人体三维图像路径传给动态链接库; 步骤7,求取人体三维图像中骨骼与软组织的阈值:读取步骤4中从远程服务器接收的病人的人体三维图像数据,对其骨骼与软组织的边界进行分析并求取骨骼与软组织的阈值; 步骤8,VTK库对步骤4中从远程服务器接收的人体三维图像数据进行体绘制并响应触摸操作:利用步骤7中求取的骨骼和软组织的阈值标定人体三维图像数据中的体素颜色,并监听绘图窗口的触摸事件进行体绘制并响应触摸操作。2.根据权利要求1所述的方法,其特征在于,步骤2中,所述动态链接库通过调用步骤I中生成的VTK静态链接库的方式调用VTK库,采用配置文件来配置静态链接库的链接顺序,在进行动态链接前,通过拓扑排序的方式生成配置文件,其中的拓扑条件为C++代码中头文件的引入顺序以及VTK开源库文件的包含关系。3.根据权利要求2所述的方法,其特征在于,步骤4中采用TCP协议来进行数据的传输,采用创建新线程的方式实现人体三维图像数据的下载。4.根据权利要求3所述的方法,其特征在于,步骤5中体绘制视图继承自安卓平台的GLSurfaceView类,GLSurfaceView类在OPENGL ES 3.0和安卓系统之间建立联系,使OPENGLES3.0在安卓系统的主活动中工作,清染器继承自安卓平台的GLSurfaceView.Renderer类,GLSurfaceView.Renderer类负责GLSurfaceView的清染和触摸操作响应,清染器负责体绘制视图的按需渲染并响应触摸操作。5.根据权利要求4所述的方法,其特征在于,步骤6中渲染器的渲染操作以及响应触摸操作都是通过JNI的方式调用步骤2中生成的动态链接库来实现的,同时人体三维图像数据路径也是通过JNI的环境变量传输到C++代码中,再进一步传送到OPENGL ES3.0的C++库。6.根据权利要求5所述的方法,其特征在于,步骤4所述病人的人体三维图像数据的接收过程是在新创建的下载线程中完成的,步骤7求取人体三维图像中骨骼与软组织的阈值的过程是在主活动的UI界面线程中完成的,两个线程保持同步。7.根据权利要求6所述的方法,其特征在于,步骤7中求取的骨骼阈值a与软组织阈值b是O到255之间的一个值,判定值超过软组织阈值b的体素为软组织部分,标注为红色;判定值在骨骼阈值a与软组织阈值b之间的体素为骨骼部分,标注为白色;判定值低于骨骼阈值a的体素为背景,标注为黑色,采用基于梯度算子的体数据分割方法求取阈值。8.根据权利要求7所述的方法,其特征在于,步骤8包括如下步骤: 步骤8-1,创建VTK的渲染窗口、渲染器、窗口响应器以及渲染对象; 步骤8-2,设置渲染对象体素的透明度和显示颜色; 步骤8-3,设置光线透射法来进行体绘制; 步骤8-4,将渲染对象添加到渲染器,重置场景摄像机进行体绘制并响应触摸操作。9.根据权利要求8所述的方法,其特征在于,步骤8-4中响应触摸操作包括如下步骤: 步骤8-4-1,体绘制视图感应到触摸操作,自动响应对应的触摸事件方法,调用体绘制视图的响应函数; 步骤8-4-2,响应函数调用体绘制视图的渲染器的对应渲染函数; 步骤8-4-3,渲染函数通过JNI的方式调用动态链接库的C++函数; 步骤8-4-4,重复步骤8-1到8-4进行体绘制渲染,直到下一次触摸操作或者关闭体绘制界面时结束。
【文档编号】G06T17/00GK105976427SQ201610274093
【公开日】2016年9月28日
【申请日】2016年4月27日
【发明人】杨育彬, 朱杰骏
【申请人】南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1