董建民 刘建新

摘 要:针对计算机辅助诊断中医学影像纹理计算相对复杂、商业分析软件功能相对固定和成本较高等问题,以目前主流的Python语言为开发工具,将其对应的PyRadiomics模块、SimpleITK模块与Pydicom模块相结合,给出了符合Dicom 3.0格式的医疗影像数据纹理分析软件设计流程,开发了纹理计算过程和数据可视化原型系统。系统集成为影像医师诊断提供了一种低成本、交互友好的纹理特征数据获取与分析手段,为医学影像中的人工智能、深度学习应用打下了基础。

关键词:PyRadiomics;医疗影像;纹理获取

DOI:10. 11907/rjdk. 201074 开放科学(资源服务)标识码(OSID):

中图分类号:TP317.4 文献标识码:A 文章编号:1672-7800(2020)007-0223-04

Integration of Medical Image Texture Acquisition Prototype System

Based on PyRadiomics

DONG Jian-min,LIU Jian-xin

(School of Information Engineering,Xizang Minzu University, Xianyang 712082,China)

Abstract:In order to solve the problems of relatively complex texture calculation, relatively fixed function and high cost of commercial analysis software in computer-aided diagnosis through  medical image,after the design flow of texture analysis of medical image data been given, a prototype system of texture calculation is integrated by Python with its corresponding pyradiomics module, simpleITK module and pydicom module. The system could process all DICOM (digital imaging and communications in medicine) 3.0 format files of medicine images and texture calculation and visualization model are developed and a low-cost, interactive and friendly method of texture feature data display and analysis for imaging doctors diagnosis is provided. It lays a solid foundation for the fields of artificial intelligence and deep learning based on medical image.

Key Words:PyRadiomics;medical imaging;texture acquisition

0 引言

随着医疗设备数字化的不断深入,从数据管理技术上看,以影像归档和通信系统(Picture Archiving and Communication Systems,PACS)为依托,将计算机断层(Computed Tomography,CT)、核磁共振(Magnetic Resonance Imaging,MRI)、超声(Ultrasound,US)成像等各种医疗影像设备形成以Dicom(Digital Imaging and Communications in Medicine) 3.0为标准的医疗影像数据标准,目前已经基本实现了统一的数据交换和管理模式[1]。从已有医疗影像采集设备看,图像质量从空间上越来越精细,采集所需时间越来越短,图像重建速度也越来越快,并且整个过程对被检查对象几乎没有任何损害,这为医疗影像应用从传统个案诊断走向海量数据分析打下了坚实的物质基础,正逐渐为当前医疗人工智能分析、特征深度学习等研究提供应用前提和可能[2-3]。从临床诊断角度看,医疗影像纹理分析是影响诊断结论的重要方面,根据已有的纹理信息诊断应用可知,对医疗影像中感兴趣区域(Region of Interest,ROI )的纹理分析包括如下方面:一阶距、形状特征、以灰度共生矩阵为基础的度量、以灰度游程矩阵为基础的度量,以及灰度区域大小矩阵等,共包含100多个特征数值[4-9],获取这些数值对于影像分析意义重大。Python语言程序由于具有开源的特点以及程序设计入门相对容易等优点,目前已被广泛应用于各特定的图像处理领域[10-16]。PyRadiomics[17]是一个开源的Python[18]软件包,用于从医学成像中提取放射组学特征。其模块已经集成了目前所有的影像纹理分析算法,可便捷地为临床影像诊断医师提供各种纹理数据。同时,鉴于目前医疗均采用Dicom3.0标准,因此需要对此类格式的影像数据,利用特定专业的开源模块,对数据文件进行解码和數据获取。

然而,从临床医疗影像纹理分析应用看,已有的纹理分析理论涉及较为复杂的数值计算与统计学理论,不利于影像诊断医师集中精力进行诊断判定,同时也不利于大量医疗影像数据的自动处理和分析。目前,商业医疗影像分析软件由于涉及诸多专利和数据授权等问题,其高昂的商业成本不仅限制了其进一步推广和应用,而且阻碍了非医科等其他工程技术人员与一线医疗影像诊断医师的合作。这样,要实现医疗影像数据纹理分析的大范围应用,首先必须避免医疗影像诊断师陷入复杂纹理分析的数学理论和数值计算,其次采用一切手段降低数据处理难度和成本,最终形成功能相对齐全、界面友好、交互简单的纹理数据获取、显示与数据导出系统。本文正是针对上述要求,将运行于Windows 7系统上的Python3.6作为开发工具,以符合Dicom3.0标准的医疗影像数据作为数据输入,利用与之对应的SimpleITK模块快速处理数据,通过Pydicom模块解码Dicom文件数据,用于人工或者系统自动标定影像数据的ROI,然后将前两者数据处理结果作为数据分析基础,结合PyRadiomics强大的纹理数据获取功能,得到对应的纹理数据后,利用可视化方式加以显示。同时,为促进纹理数据的进一步应用,本文也设计了纹理数据的导出功能,从而为纹理数据的科学研究与分析奠定基础。

1 系统开发流程

在系统开发之前,首先需要正确安装开发工具Python 语言解释器以及对应版本的PyRadiomics、Pydicom、SimpleITK、Numpy等主要模块,并经过测试确保各模块可正常使用。参照如图1所示流程设计各模块功能。

2 纹理计算功能实现

2.1 数据准备

由于Pyradiomics模块在构架时,其接收的影像分析数据和标记数据输入为nrrd格式,而这种格式的数据需要对已有的Dicom3.0数据进行提取和标记后生成,因此首先需要设计并生成待处理数据,这由Python对应的SimpleITK完成。需要注意的是,符合Dicom3.0标准的医疗影像数据,在利用探测到的信号重建图像时,采用不同的序列实例,而这些实例采用不同的重建参数而得到的纹理数据必然不同。因此在开发软件时,必须利用Dicom文件的头信息分别依次解析,按照不同实例序列依次处理。因此,数据準备模块分为待分析影像的nrrd格式数据生成和标记数据生成,标记数据最简单的方式就是利用掩模将图像的ROI标识为1、其它标识为0。待分析数据关键代码如下:设file_path为待分析的符合Dicom3.0的数据路径,sitk为simpleITK模块的简写,DicomNrrdData是初始为空的列表,代码结束后保存不同序列nrrd格式的待分析数据。

series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(file_path)#获取不同的序列标识

for ss in series_IDs:

series_file_names= sitk.ImageSeriesReader.GetGDCMSeriesFileNames(file_path,ss)

#上面语句获取属于不同序列的文件列表

series_reader = sitk.ImageSeriesReader()#实例化一个读取序列

series_reader.SetFileNames(series_file_names)#设置读取文件组名

D = series_reader.Execute()#读取该序列文件得到nrrd格式数据

DicomNrrdData.append(D)#将不同的序列的nrrd格式数据保存于列表

标记数据通常需要通过人工交互完成图像掩模而确定。取图像中间部分作为感兴趣区域,这里取图像128~196行、128~196列的矩形区域作为测试,分别用变量hh0、hh1、ww0、ww1代替,即hh0=128、hh1=196、ww0=128、ww1=196。为了更好地利用已有代码,只需将每个序列的图像数据重新修改后保存,再利用上述代码即可。设pydicom模块简写为dcm,变量kk为记录标识不同的Dicom文件,初始值为0,series_file_names为不同序列的文件名,OutPath为标记数据要保存的路径。sitk在读取数据时,自动将读取到的数据利用式(1)集成到nrrd格式的数据中。

其中,S为数据斜率,一般取值为1,R为对应的截距,通常为负值,在诸多情况下R的取值为-1024,d为文件直接读取到的数值。因此,为了保证最终标记数据仍为1,在修改对应的标记Dicom文件时,数据项不能直接赋值为1,也即要使最终的v=1,修改数据可以按照式(2)确定。

这里,v=1,S=1,因此修改的数据项d=1-R。关键代码如下:

for FileName in series_file_names:

dcminfo_data=dcm.dcmread(FileName)#读取dicom图像数据结构

R= dcminfo_data.RescaleIntercept #得到图像数据的截距

Rows=dcminfo_data.Rows    #获取图像的行

Columns=dcminfo_data.Columns  #获取图像的列

newArray = np.zeros([Rows, Columns]) #创建新的元素全为0的标记矩阵

newArray[hh0:hh1,ww0:ww1]=1-R #将图像对应的掩模赋值为截距相反数加1

NewDcmdata16 = np.int16(newArray) #将数据转化为16位整数

dcminfo_data.PixelData=NewDcmdata16.tobytes() #将数据转化为对应的字节数

Path=OutPath+ks+‘.dcm #增加了标识的新文件的保存路径

dcminfo_data.save_as(Path) #保存文件

kk=kk+1  #标识符增加1

标记图像处理完成后,将保存路径利用关键代码获取对应nrrd格式的标记文件。

2.2 纹理特征获取计算

实现PyRadiomics纹理分析的数据准备后,通过在Python开发平台下使用PyRadiomics模块,从而完成系统纹理特征数据获取。Python开发平台下使用PyRadiomics模块时,除了要将待分析数据与标记数据对应的nrrd格式数据作为参数输入外,还需要利用一个yaml文件作为纹理获取计算参数,内容主要包括输入数据位数、标记数据信息以及需要计算的纹理数据类别等。该文件可以用普通文本编辑器打开进行设置,具体使用可以参考PyRadiomics模块的使用说明,最终纹理数据由PyRadiomics对应的特征提取函数的返回值得到。设Pa_Path为对应的yaml参数文件所在路径,其关键代码如下:

import radiomics   #导入radiomics模块

import radiomics.featureextractor as F #导入纹理提取模块,并简写为F

ext = F.RadiomicsFeatureExtractor(Pa_Path) #设置纹理提取参数

r= ext.executeData(D,DL)#将带分析数据D与对应的标记数据DL传入到纹理函数

实际上,原来模块的execute()函数是利用sitk读取对应的nrrd数据和标记数据,效率偏低。在纹理分析函数ext.execute()基础上,将其中调用自身的成员函数读取数据部分直接更换为输入数据即可完成,最后r向量保存的是纹理数据的字典类型数据。可利用如下代码分别输出形状、一阶距,以及由灰度游程矩阵、灰度区域大小矩阵、灰度共生矩阵、灰度差距共生矩阵所导出的纹理数据。

for key, value in r.items():

if key.find(‘shape)>=0:

Shapef.append(value)

if key.find(‘firstorder)>=0:

Firstorder.append(value)

if key.find(‘glrlm)>=0:

Glrlm.append(value)

if key.find(‘glszm)>=0:

Glszm.append(value)

if key.find(‘glcm)>=0:

Glcm.append(value)

if key.find(‘gldm)>=0:

Gldm.append(value)

2.3 特征數据可视化

获取到的医学影像纹理数据通常具有至少3个以上数值,要在电脑上将其可视化,需要采用高维数据显示方法[19]。本文系统采用常见的平行坐标方法进行数据可视化,系统输入测试一套数据(含25张CT图像)后,纹理数据可视化结果如图2所示。系统输入32个不同序列影像数据后得到的纹理数据可视化结果如图3所示,该数据含有Dicom 3.0的5 108张影像。

2.4 纹理特征数据导出

成功获取医学影像纹理数据后,为保证数据后续使用,系统设计了数据导出模块,导出为用逗号隔开的数据文件,这里使用csv格式的导出数据。设TextureFeatureCsvFileName为导出纹理数据文件路径,SeriesTexture为保存各图像序列的纹理数据列表,导入Python对应的读写csv模块后,其关键代码如下:

csvFileSave=open(TextureFeatureCsvFileName,“a+”, newline=‘  )#已追加写方式打开文件

writer = csv.writer(csvFileSave)

for TextureIndex  in range(len(SeriesTexture)):#对所有列表数据进行处理

OneLineDataList=[]

ImageTexture=SeriesTexture[TextureIndex]    #获取一个序列的纹理数据

for data in ImageTexture:

OneLineDataList.append(data) #将纹理数据利用列表合并为一行

writer.writerow(OneLineDataList)  #写入csv一行数据

csvFileSave.close()     #数据写入完成后关闭文件

3 结语

本文利用Python及对应的开源模块,开发了一个医疗影像纹理数据计算软件原型系统平台,为诊断医师进行医疗影像纹理数据获取提供了一个低成本的简易软件,同时可为其它领域的特征数据获取、数据挖掘,以及影像辅助诊断中的人工智能、深度学习应用等研究提供借鉴。系统中对医疗影像ROI的选取仅仅采用矩形区域的简单方法,以此进行系统功能验证,但在医疗诊断或者其它应用领域,ROI的选取方式一般丰富多样,包括手动绘制多边形、圆形区域、分割线等,而对于这些本文系统均未设计对应的实现模块,后续研究中需进一步完善。

参考文献:

[1] PECK D. Digital imaging and communications in medicine: a practical introduction and survival guide[M]. New York: Springer,2008.

[2] 张巧丽,赵地,迟学斌. 基于深度学习的医学影像诊断综述[J]. 计算机科学,2017,44(S2):1-7.

[3] 张永刚,陈军. 基于模型法的医学影像图像纹理分析研究[J]. 工业仪表与自动化装置,2018(3):101-103,106.

[4] 高岩. 基于CT图像的肾脏肿瘤纹理特征提取[J]. 中国数字医学,2019,14(4):66-68.

[5] 马书新. 乳腺影像案例多模检索技术探究[J]. 世界最新医学信息文摘,2018,18(46):171-172.

[6] 高静雅,张荣国,赵健,等. 融合纹理特征与形状特征的病灶CT图像识别[J]. 太原科技大学学报,2018,39(3):165-170.

[7] 张剑华,盖铖,陈胜勇. 基于目标形状特征和纹理特征的迭代配准方法在颈动脉血管中的应用[J]. 浙江工业大学学报,2018,46(1):33-37.

[8] 李亮,尹小童,李梦烁,等. 基于多特征融合的甲状腺结节良恶性识别[J]. 软件导刊,2017,16(12):137-140.

[9] 王昕,李亮,尹小童,等. 甲状腺结节超声图像多特征融合及识别[J]. 吉林大学学报(信息科学版),2017,35(6):650-655.

[10] 魏杰,曹旭阳,陈后金,等. 乳腺X线图像肿块分类方法研究[J]. 北京交通大学学报,2017,41(5):73-78

[11] INATI S J,NAEGELE J D,ZWART N R,et al.ISMRM raw data format: a proposed standard for MRI raw datasets[J].  Magnetic Resonance in Medicine,2017,77(1):411-421.

[12] VAN DER W S,SCHONBERGER J L,NUNEZ I J. Scikit-image: image processing in Python[J].  PeerJ,2014,2:e453.

[13] YANIV Z,LOWEKAMP B C,JOHNSON H J,et al. SimpleI TK image-analysis notebooks: a collaborative environment for education and reproducible research[J]. Journal of Digital Imaging,2018,31(3):290-303.

[14] 韓晓冬,王浩森,王硕,等. Python在图像处理中的应用[J]. 北京测绘,2018,32(3):312-317.

[15] DANIIL K,VALERY P,SRIKANTH N,et al. TomoPhantom,a software package to generate 2D-4D analytical phantoms for CT image reconstruction algorithm benchmarks[J]. SoftwareX,2018,7:150-155.

[16] GOUILLART E,NUNEZ L J,VAN DER W S. Analyzing microtomography data with Python and the Scikit-image library[J]. Advanced structural and chemical imaging,2017,2(1):1-5.

[17] VAN G,FEDOROV J J M,PARMAR A C,et al.Computational radiomics system to decode the radiographic phenotype[J]. Cancer Research,2017,77(21):e104-e107.

[18] 董付国. Python程序设计[M]. 第1版. 北京:清华大学出版社,2015.

[19] 陈为,沈泽潜,陶煜波. 数据可视化[M]. 第2版. 北京:电子工业出版社,2019.

(责任编辑:孙 娟)

python医疗影像_基于PyRadiomics的医疗影像纹理获取原型系统集成相关推荐

  1. java web 医疗器械_基于jsp的医疗器械进销存管理-JavaEE实现医疗器械进销存管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的医疗器械进销存管理, 该项目可用各类java课程设计大作业中, 医疗器械进销存管理的系统架构分为前后台两部分, 最 ...

  2. 医疗系统 java_基于Java的医疗管理系统

    [实例简介] 基于Java的医疗管理系统,本科生毕业设计,可以直接使用的 [实例截图] [核心代码] 医疗管理系统JAVA └── Hospital ├── src │   └── com │   └ ...

  3. python遥感图像处理_基于Python的矿山遥感监测系统开发方法

    目前,很多学者都是从宏观上讨论遥感和GIS一体化集成的可能性及集成的方法,但这些研究在GIS和RS方向只是对Python集成研究的思路或某一功能的介绍,并没有一个基于Python开发的集成GIS与RS ...

  4. java对接医疗设备_基于Java框架的医疗设备管理系统设计与实现

    论文字数:18504,页数:54 摘要 随着医疗改革的深入,医疗设备作为一个医院继人才.资金之后的第三位的竞争要素显得越来越重要.时代和科学技术的发展,大量的国内外先进的医疗设备和仪器源源不断的进入各 ...

  5. python 大气校正_基于6s模型的遥感影像大气校正方法

    基于6s模型的遥感影像大气校正工程化实现 目的:针对光学遥感影像(Landsat-8.Sentinel-2.GF-1.GF-2)的大气校正自动化实现方法,大多数是使用ENVI的FLASSH模块进行大气 ...

  6. python遥感影像地物分类_基于TensorFlow的遥感影像地物识别方法研究

    文章编号: 1674-098X(2018)04(b)-0053-02 ①作者简介: 任芳语 ( 1996, 12- ) , 女, 汉族, 黑龙江讷河人, 本科在读, 研究方向:地理信息科学与遥感图像处 ...

  7. java 医疗项目_基于jsp的社区医疗-JavaEE实现社区医疗 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的社区医疗, 该项目可用各类java课程设计大作业中, 社区医疗的系统架构分为前后台两部分, 最终实现在线上进行社区 ...

  8. python自动化测试开发_基于python的selenium2自动化测试从基础到实战(Python3、selenium2、自动化测试、web测试)...

    Selenium2是目前比较流行的一款针对web页面测试的自动化测试工具,他的前身是Selenium .Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozi ...

  9. ai智能医疗产业_人工智能以减少医疗错误

    ai智能医疗产业 技术(Technology) Let's do a thought experiment together. You walk into a supermarket but are ...

最新文章

  1. 查找xml文件中某接点的值
  2. python 速成学堂_Python 与数据科学入门
  3. 服務端的EIT造形+Socket代碼
  4. Oracle 无备份情况下的恢复--临时文件/在线重做日志/ORA-00205
  5. 几个小技巧提升导图使用逼格
  6. 微信和QQ,终于可以互通了
  7. linux台式机双屏幕怎么连接,台式机Linux/Unix多系统安装详细教程
  8. c语言汇率转换代码_基于C语言实现的货币转换器.doc
  9. 收藏级干货——Auto CAD历史版本功能大盘点(下)
  10. python正则匹配连续相同字符_正则表达式: 匹配n个相同连续字符
  11. C++-源代码调试-Visual Studio-X64dbg-WinDbg-插件开发
  12. 手把手教你在Linux上上搭建BitTorrent服务器
  13. x82y 阿里滑块 解决方法!
  14. 计算机毕业设计 移动设备的眼球追踪技术及其应用(源码+论文)
  15. 软件测试工作面试的74个常见问题
  16. 解决使用layui上传文件时提示“请求上传接口出现异常”
  17. Echarts图表自适应宽高大小
  18. 语义网、本体、OWL基础知识梳理
  19. JS:判断是否是移动端
  20. 超详细Mybatis学习笔记(可供下载)

热门文章

  1. 成都百知教育跨境电商人物专访| Shopee大卖“朔风”
  2. python入门基础002
  3. 深入RecyclerView(一)
  4. dga (Domain Generation Algorithm) 域名 生成算法 简介
  5. Struts框架漏洞
  6. TI | TM4C系列单片机中断配置方法
  7. MBA面试系列之----中文面试宝典(四)
  8. 计算机的电子表格英文,Excel电子表格规范的实用方法(中英文对照).pdf
  9. 串口的使用-ttyUSB0设备
  10. 音视频开发成长之路与音视频知识总结