一种将dicompyler的图像读取到C++图像类的方法技术

技术编号:15540829 阅读:258 留言:0更新日期:2017-06-05 10:31
本发明专利技术公开了一种将dicompyler的图像读取到C++图像类的方法,包括步骤:初始化连接器的连接参数;初始化Python解释器,加载精简后的dicompyler功能模块;获取dicompyler功能模块的图像对象,并获取图像尺寸以及图像模式;利用Python提供的C‑API间接触发数据转换函数,将图像数据转换为字符串的形式,并得到经过封装的字符串对象;利用字符串对象以及Python提供的参数解析函数,提取字符串对象的字符串数据,并将字符串数据读入到C/C++的内存数组中;将内存数组的图像数据复制到C++的图像类里面,根据获取的图像尺寸设置图像类的尺寸大小,设置颜色表,最终完成DICOM RT数据的读取。本发明专利技术可提高程序的开发效率和执行效率,缩短开发周期,具有极大的实用性,尤其适用于医学图像处理软件开发的设备。

A method of reading dicompyler images into C++ image classes

The invention discloses a method to read the dicompyler image, C++ image class comprises the following steps: connecting the parameter initialization connector; initialize the Python interpreter, dicompyler loading function module streamlined; image object dicompyler function module, and obtain the image size and image pattern; provided by Python C API indirect trigger the data transfer function, the image data is converted to a string, and after a string object encapsulation; parameter analysis function using string object and Python, extraction of character string data on the object, and an array of string data into C/C++ memory in the memory array; the image data is copied to the C++ image in the class, according to the size of the size of the image acquisition settings of image class, set the color table, the ultimate end Read the DICOM data into RT. The invention can improve the development efficiency and the execution efficiency of the program, shorten the development cycle, and has great practicability, and is especially suitable for the equipment developed by the medical image processing software.

【技术实现步骤摘要】
一种将dicompyler的图像读取到C++图像类的方法
本专利技术属于计算机应用程序开发的领域,特别涉及一种将dicompyler的图像读取到C++图像类的方法。
技术介绍
目前,dicompyler是一个基于DICOM标准的可扩展的开源放射治疗研究开发工具包,同时它也是一个跨平台的DICOMRT阅读器。dicompyler是用Python开发的,其中使用了PIL(PythonImagingLibrary,Python图像库)来存储、显示DICOMRT的医学图像。PIL提供了广泛的文件格式支持,高效的内部数据表示和相当强大的图像处理能力,再加上Python是一门语言简易、开发简单、跨平台性良好以及公用库多的编程语言,更重要的是Python的开发效率高,综合上述两个优势,dicompyler深受广大医学图像研究者的热爱。但是,由于Python是一门解释型的语言,也就是说Python开发的功能模块没有经过编译的过程,各功能模块依赖于Python解释器而运行,所以Python功能模块的执行效率不高。为了提高程序的执行效率,可以选择将Python的功能模块嵌入到C++应用程序中,而这就延伸到了如何利用C++调用dicompyler功能模块,更进一步的是利用C++调用Python的PIL功能模块。因此,需要提供一种将dicompyler的图像读取到C++图像类的方法,既提高了程序的开发效率,也保证了程序的执行效率,同时也缩短了应用程序的开发周期。
技术实现思路
本专利技术的目的在于克服现有技术的缺点与不足,提供一种将dicompyler的图像读取到C++图像类的方法,其具有方法灵活、内存管理安全的优点。为此,本专利技术采用如下方案:一种将dicompyler的图像读取到C++图像类的方法,其包括以下步骤:a、初始化连接器的连接参数;b、初始化Python解释器,并加载精简后的dicompyler功能模块;c、获取dicompyler功能模块的图像对象,并获取图像尺寸以及图像模式;d、利用Python提供的C-API间接触发数据转换函数,将图像数据转换为字符串的形式,并得到经过封装的字符串对象;e、利用上一步得到的字符串对象以及Python提供的参数解析函数,提取字符串对象的字符串数据,并将字符串数据读入到C/C++的内存数组中;f、将内存数组的图像数据复制到C++的图像类里面,根据获取的图像尺寸设置图像类的尺寸大小,必要时根据图像模式设置颜色表,最终完成DICOMRT数据的读取。优选的,所述的步骤a中,所述的连接参数就是清单依赖项(manifestdependency)的参数,包括连接器的类型、名称、版本处理器架构以及公匙的标记。优选的,所述的步骤b中,精简后的dicompyler功能模块包括dicomparser、dvhdoses和dvhcalc三个模块,而加载dicompyler功能模块的步骤如下:b1、执行初始化函数用以初始化Python解释器;b2、判断Python解释器是否成功初始化,如果初始化失败,退出程序;否则,继续下面的步骤;b3、执行模块加载函数用以加载功能模块,并得到该模块对象。优选的,所述的步骤c中,获取dicompyler功能模块的图像对象的步骤如下:c1、利用步骤b3得到的模块对象,提取其中的字典对象;c2、利用步骤c1得到的字典对象,寻找自定义类的入口,得到一个类接口对象;c3、实例化步骤c2得到的类接口对象,得到类实例对象;c4、类实例对象执行图像获取函数即可得到图像对象。优选的,所述的步骤d中,将图像数据转换为字符串的形式是通过步骤c4所得到的图像对象的tostring()函数实现的,该函数将数据封装到一个字符串对象中。tostring()函数内部实现步骤如下:d1、根据字符串对象的数据成员以及图像数据的大小,申请一段大小足够的内存块;d2、将数据复制到申请的内存块的数据区域。优选的,所述的步骤e中,将字符串数据读入到C/C++的内存数组的步骤如下;e1、声明一个指向字符类型的指针;e2、结合步骤d所得到的字符串对象以及参数解析函数,解析字符串对象,解析完毕之后,步骤e1声明的指针就指向字符串对象的数据内存;e3、申请一段大小足够的内存空间,将步骤e1声明的指针所指向的数据复制到该内存空间。优选的,所述的步骤f中,所述的C++的图像类可以选用CImage、CBitmap或者QImage,设置深度值、颜色表等相关参数,以完成DICOMRT的数据读取。本专利技术与现有技术相比,具有如下优点和有益效果:本专利技术提出了一种利用C++读取dicompyler的图像对象的图像数据的方法,实现了利用dicompyler读取的DICOMRT医学图像与C++可执行程序在图像提取以及图像处理方面的交互,充分发挥了dicompyler对DICOMRT医学图像的充分支持,使得在程序开发过程中,既提高了程序的开发效率,也保证了程序的执行效率,同时也缩短了应用程序的开发周期。具有极大的实用性,适用于各种软件,尤其是医学图像处理软件开发的设备。附图说明图1是本专利技术的实现流程图。具体实施方式下面结合附图对本专利技术作进一步详细的描述,但本专利技术的实施方式不限于此。dicompyler除了包含DICOMRT数据读取模块外,还包含了其他辅助的用户界面功能模块,为了简化开发过程,必须对整个dicompyler功能模块进行简化,而简化的方式就是利用Python支持的面向对象的编程方式,构建出自定义模块,具体步骤如下:1、保留dicompyler的三个核心模块,分别是DICOMRT解析模块dicomparser、剂量体积直方图模块dvhdoses以及剂量体积直方图计算模块dvhcalc;2、在上述三个模块的基础上自定义名为Patient.pyc的功能模块,该模块里面自定义了名为Patient的类,该类就是图像数据转化的核心类,其中定义了获取图像、图像大小、图像模式等操作。由于dicompyler功能模块使用了VS2008编译,为了能够成功加载dicompyler功能模块,必须在加载前设置清单依赖项(manifestdependency)的参数,具体参数为type='win32',name='Microsoft.VC90.CRT',version='9.0.21022.8',processorArchitecture='x86',publicKeyToken='1fc8b3b9a1e18e3b'。为了利用C++加载自定义的功能模块,必须先调用Py_Initialize()函数初始化Python解释器,然后调用Py_IsInitialized()函数判断Python解释器是否成功初始化,如果初始化失败,则直接退出程序,否则,继续下面的步骤。Python解释器成功初始化后,就要加载Patient.pyc功能模块和获取模块里面的图像对象实例,具体的步骤如下:1、以"Patient"为参数调用PyImport_ImportModule()函数加载Patient.pyc模块,该函数返回对应的模块对象;2、以步骤1得到的模块对象为参数调用PyModule_GetDict()函数,该函数返回描述模块对象内部包含的属性以及功能的字典对象;3、以步骤2本文档来自技高网...
一种将dicompyler的图像读取到C++图像类的方法

【技术保护点】
一种将dicompyler的图像读取到C++图像类的方法,其特征在于,包括如下的步骤:a、初始化连接器的连接参数;b、初始化Python解释器,并加载精简后的dicompyler功能模块;c、获取dicompyler功能模块的图像对象,并获取图像尺寸以及图像模式;d、利用Python提供的C‑API间接触发数据转换函数,将图像数据转换为字符串的形式,并得到经过封装的字符串对象;e、利用上一步得到的字符串对象以及Python提供的参数解析函数,提取字符串对象的字符串数据,并将字符串数据读入到C/C++的内存数组中;f、将内存数组的图像数据复制到C++的图像类里面,根据获取的图像尺寸设置图像类的尺寸大小,必要时根据图像模式设置颜色表,最终完成DICOM RT数据的读取。

【技术特征摘要】
1.一种将dicompyler的图像读取到C++图像类的方法,其特征在于,包括如下的步骤:a、初始化连接器的连接参数;b、初始化Python解释器,并加载精简后的dicompyler功能模块;c、获取dicompyler功能模块的图像对象,并获取图像尺寸以及图像模式;d、利用Python提供的C-API间接触发数据转换函数,将图像数据转换为字符串的形式,并得到经过封装的字符串对象;e、利用上一步得到的字符串对象以及Python提供的参数解析函数,提取字符串对象的字符串数据,并将字符串数据读入到C/C++的内存数组中;f、将内存数组的图像数据复制到C++的图像类里面,根据获取的图像尺寸设置图像类的尺寸大小,必要时根据图像模式设置颜色表,最终完成DICOMRT数据的读取。2.根据权利要求1所述的将dicompyler的图像读取到C++图像类的方法,其特征在于,所述的步骤a中,所述的连接参数就是清单依赖项manifestdependency的参数,包括连接器的类型、名称、版本处理器架构以及公匙的标记。3.根据权利要求1所述的将dicompyler的图像读取到C++图像类的方法,其特征在于,所述的步骤b中,精简后的dicompyler功能模块包括dicomparser、dvhdoses和dvhcalc三个模块,而加载dicompyler功能模块的步骤,具体包括:b1、执行初始化函数用以初始化Python解释器;b2、判断Python解释器是否成功初始化,如果初始化失败,退出程序;否则,继续步骤b3;b3、执行模块加载函数用以加载功能模块,并得到该模块对象。4.根据权利要求3所述的将dico...

【专利技术属性】
技术研发人员:陈棋江蔡夫鸿何赛灵
申请(专利权)人:华南师范大学
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1