董建民 劉建新
摘 要:針對計算機輔助診斷中醫(yī)學影像紋理計算相對復雜、商業(yè)分析軟件功能相對固定和成本較高等問題,以目前主流的Python語言為開發(fā)工具,將其對應的PyRadiomics模塊、SimpleITK模塊與Pydicom模塊相結(jié)合,給出了符合Dicom 3.0格式的醫(yī)療影像數(shù)據(jù)紋理分析軟件設計流程,開發(fā)了紋理計算過程和數(shù)據(jù)可視化原型系統(tǒng)。系統(tǒng)集成為影像醫(yī)師診斷提供了一種低成本、交互友好的紋理特征數(shù)據(jù)獲取與分析手段,為醫(yī)學影像中的人工智能、深度學習應用打下了基礎。
關(guān)鍵詞:PyRadiomics;醫(yī)療影像;紋理獲取
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 引言
隨著醫(yī)療設備數(shù)字化的不斷深入,從數(shù)據(jù)管理技術(shù)上看,以影像歸檔和通信系統(tǒng)(Picture Archiving and Communication Systems,PACS)為依托,將計算機斷層(Computed Tomography,CT)、核磁共振(Magnetic Resonance Imaging,MRI)、超聲(Ultrasound,US)成像等各種醫(yī)療影像設備形成以Dicom(Digital Imaging and Communications in Medicine) 3.0為標準的醫(yī)療影像數(shù)據(jù)標準,目前已經(jīng)基本實現(xiàn)了統(tǒng)一的數(shù)據(jù)交換和管理模式[1]。從已有醫(yī)療影像采集設備看,圖像質(zhì)量從空間上越來越精細,采集所需時間越來越短,圖像重建速度也越來越快,并且整個過程對被檢查對象幾乎沒有任何損害,這為醫(yī)療影像應用從傳統(tǒng)個案診斷走向海量數(shù)據(jù)分析打下了堅實的物質(zhì)基礎,正逐漸為當前醫(yī)療人工智能分析、特征深度學習等研究提供應用前提和可能[2-3]。從臨床診斷角度看,醫(yī)療影像紋理分析是影響診斷結(jié)論的重要方面,根據(jù)已有的紋理信息診斷應用可知,對醫(yī)療影像中感興趣區(qū)域(Region of Interest,ROI )的紋理分析包括如下方面:一階距、形狀特征、以灰度共生矩陣為基礎的度量、以灰度游程矩陣為基礎的度量,以及灰度區(qū)域大小矩陣等,共包含100多個特征數(shù)值[4-9],獲取這些數(shù)值對于影像分析意義重大。Python語言程序由于具有開源的特點以及程序設計入門相對容易等優(yōu)點,目前已被廣泛應用于各特定的圖像處理領域[10-16]。PyRadiomics[17]是一個開源的Python[18]軟件包,用于從醫(yī)學成像中提取放射組學特征。其模塊已經(jīng)集成了目前所有的影像紋理分析算法,可便捷地為臨床影像診斷醫(yī)師提供各種紋理數(shù)據(jù)。同時,鑒于目前醫(yī)療均采用Dicom3.0標準,因此需要對此類格式的影像數(shù)據(jù),利用特定專業(yè)的開源模塊,對數(shù)據(jù)文件進行解碼和數(shù)據(jù)獲取。
然而,從臨床醫(yī)療影像紋理分析應用看,已有的紋理分析理論涉及較為復雜的數(shù)值計算與統(tǒng)計學理論,不利于影像診斷醫(yī)師集中精力進行診斷判定,同時也不利于大量醫(yī)療影像數(shù)據(jù)的自動處理和分析。目前,商業(yè)醫(yī)療影像分析軟件由于涉及諸多專利和數(shù)據(jù)授權(quán)等問題,其高昂的商業(yè)成本不僅限制了其進一步推廣和應用,而且阻礙了非醫(yī)科等其他工程技術(shù)人員與一線醫(yī)療影像診斷醫(yī)師的合作。這樣,要實現(xiàn)醫(yī)療影像數(shù)據(jù)紋理分析的大范圍應用,首先必須避免醫(yī)療影像診斷師陷入復雜紋理分析的數(shù)學理論和數(shù)值計算,其次采用一切手段降低數(shù)據(jù)處理難度和成本,最終形成功能相對齊全、界面友好、交互簡單的紋理數(shù)據(jù)獲取、顯示與數(shù)據(jù)導出系統(tǒng)。本文正是針對上述要求,將運行于Windows 7系統(tǒng)上的Python3.6作為開發(fā)工具,以符合Dicom3.0標準的醫(yī)療影像數(shù)據(jù)作為數(shù)據(jù)輸入,利用與之對應的SimpleITK模塊快速處理數(shù)據(jù),通過Pydicom模塊解碼Dicom文件數(shù)據(jù),用于人工或者系統(tǒng)自動標定影像數(shù)據(jù)的ROI,然后將前兩者數(shù)據(jù)處理結(jié)果作為數(shù)據(jù)分析基礎,結(jié)合PyRadiomics強大的紋理數(shù)據(jù)獲取功能,得到對應的紋理數(shù)據(jù)后,利用可視化方式加以顯示。同時,為促進紋理數(shù)據(jù)的進一步應用,本文也設計了紋理數(shù)據(jù)的導出功能,從而為紋理數(shù)據(jù)的科學研究與分析奠定基礎。
1 系統(tǒng)開發(fā)流程
在系統(tǒng)開發(fā)之前,首先需要正確安裝開發(fā)工具Python 語言解釋器以及對應版本的PyRadiomics、Pydicom、SimpleITK、Numpy等主要模塊,并經(jīng)過測試確保各模塊可正常使用。參照如圖1所示流程設計各模塊功能。
2 紋理計算功能實現(xiàn)
2.1 數(shù)據(jù)準備
由于Pyradiomics模塊在構(gòu)架時,其接收的影像分析數(shù)據(jù)和標記數(shù)據(jù)輸入為nrrd格式,而這種格式的數(shù)據(jù)需要對已有的Dicom3.0數(shù)據(jù)進行提取和標記后生成,因此首先需要設計并生成待處理數(shù)據(jù),這由Python對應的SimpleITK完成。需要注意的是,符合Dicom3.0標準的醫(yī)療影像數(shù)據(jù),在利用探測到的信號重建圖像時,采用不同的序列實例,而這些實例采用不同的重建參數(shù)而得到的紋理數(shù)據(jù)必然不同。因此在開發(fā)軟件時,必須利用Dicom文件的頭信息分別依次解析,按照不同實例序列依次處理。因此,數(shù)據(jù)準備模塊分為待分析影像的nrrd格式數(shù)據(jù)生成和標記數(shù)據(jù)生成,標記數(shù)據(jù)最簡單的方式就是利用掩模將圖像的ROI標識為1、其它標識為0。待分析數(shù)據(jù)關(guān)鍵代碼如下:設file_path為待分析的符合Dicom3.0的數(shù)據(jù)路徑,sitk為simpleITK模塊的簡寫,DicomNrrdData是初始為空的列表,代碼結(jié)束后保存不同序列nrrd格式的待分析數(shù)據(jù)。
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格式數(shù)據(jù)
DicomNrrdData.append(D)#將不同的序列的nrrd格式數(shù)據(jù)保存于列表
標記數(shù)據(jù)通常需要通過人工交互完成圖像掩模而確定。取圖像中間部分作為感興趣區(qū)域,這里取圖像128~196行、128~196列的矩形區(qū)域作為測試,分別用變量hh0、hh1、ww0、ww1代替,即hh0=128、hh1=196、ww0=128、ww1=196。為了更好地利用已有代碼,只需將每個序列的圖像數(shù)據(jù)重新修改后保存,再利用上述代碼即可。設pydicom模塊簡寫為dcm,變量kk為記錄標識不同的Dicom文件,初始值為0,series_file_names為不同序列的文件名,OutPath為標記數(shù)據(jù)要保存的路徑。sitk在讀取數(shù)據(jù)時,自動將讀取到的數(shù)據(jù)利用式(1)集成到nrrd格式的數(shù)據(jù)中。
其中,S為數(shù)據(jù)斜率,一般取值為1,R為對應的截距,通常為負值,在諸多情況下R的取值為-1024,d為文件直接讀取到的數(shù)值。因此,為了保證最終標記數(shù)據(jù)仍為1,在修改對應的標記Dicom文件時,數(shù)據(jù)項不能直接賦值為1,也即要使最終的v=1,修改數(shù)據(jù)可以按照式(2)確定。
這里,v=1,S=1,因此修改的數(shù)據(jù)項d=1-R。關(guān)鍵代碼如下:
for FileName in series_file_names:
dcminfo_data=dcm.dcmread(FileName)#讀取dicom圖像數(shù)據(jù)結(jié)構(gòu)
R= dcminfo_data.RescaleIntercept #得到圖像數(shù)據(jù)的截距
Rows=dcminfo_data.Rows? ? #獲取圖像的行
Columns=dcminfo_data.Columns? #獲取圖像的列
newArray = np.zeros([Rows, Columns]) #創(chuàng)建新的元素全為0的標記矩陣
newArray[hh0:hh1,ww0:ww1]=1-R #將圖像對應的掩模賦值為截距相反數(shù)加1
NewDcmdata16 = np.int16(newArray) #將數(shù)據(jù)轉(zhuǎn)化為16位整數(shù)
dcminfo_data.PixelData=NewDcmdata16.tobytes() #將數(shù)據(jù)轉(zhuǎn)化為對應的字節(jié)數(shù)
Path=OutPath+ks+‘.dcm #增加了標識的新文件的保存路徑
dcminfo_data.save_as(Path) #保存文件
kk=kk+1? #標識符增加1
標記圖像處理完成后,將保存路徑利用關(guān)鍵代碼獲取對應nrrd格式的標記文件。
2.2 紋理特征獲取計算
實現(xiàn)PyRadiomics紋理分析的數(shù)據(jù)準備后,通過在Python開發(fā)平臺下使用PyRadiomics模塊,從而完成系統(tǒng)紋理特征數(shù)據(jù)獲取。Python開發(fā)平臺下使用PyRadiomics模塊時,除了要將待分析數(shù)據(jù)與標記數(shù)據(jù)對應的nrrd格式數(shù)據(jù)作為參數(shù)輸入外,還需要利用一個yaml文件作為紋理獲取計算參數(shù),內(nèi)容主要包括輸入數(shù)據(jù)位數(shù)、標記數(shù)據(jù)信息以及需要計算的紋理數(shù)據(jù)類別等。該文件可以用普通文本編輯器打開進行設置,具體使用可以參考PyRadiomics模塊的使用說明,最終紋理數(shù)據(jù)由PyRadiomics對應的特征提取函數(shù)的返回值得到。設Pa_Path為對應的yaml參數(shù)文件所在路徑,其關(guān)鍵代碼如下:
import radiomics? ?#導入radiomics模塊
import radiomics.featureextractor as F #導入紋理提取模塊,并簡寫為F
ext = F.RadiomicsFeatureExtractor(Pa_Path) #設置紋理提取參數(shù)
r= ext.executeData(D,DL)#將帶分析數(shù)據(jù)D與對應的標記數(shù)據(jù)DL傳入到紋理函數(shù)
實際上,原來模塊的execute()函數(shù)是利用sitk讀取對應的nrrd數(shù)據(jù)和標記數(shù)據(jù),效率偏低。在紋理分析函數(shù)ext.execute()基礎上,將其中調(diào)用自身的成員函數(shù)讀取數(shù)據(jù)部分直接更換為輸入數(shù)據(jù)即可完成,最后r向量保存的是紋理數(shù)據(jù)的字典類型數(shù)據(jù)。可利用如下代碼分別輸出形狀、一階距,以及由灰度游程矩陣、灰度區(qū)域大小矩陣、灰度共生矩陣、灰度差距共生矩陣所導出的紋理數(shù)據(jù)。
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 特征數(shù)據(jù)可視化
獲取到的醫(yī)學影像紋理數(shù)據(jù)通常具有至少3個以上數(shù)值,要在電腦上將其可視化,需要采用高維數(shù)據(jù)顯示方法[19]。本文系統(tǒng)采用常見的平行坐標方法進行數(shù)據(jù)可視化,系統(tǒng)輸入測試一套數(shù)據(jù)(含25張CT圖像)后,紋理數(shù)據(jù)可視化結(jié)果如圖2所示。系統(tǒng)輸入32個不同序列影像數(shù)據(jù)后得到的紋理數(shù)據(jù)可視化結(jié)果如圖3所示,該數(shù)據(jù)含有Dicom 3.0的5 108張影像。
2.4 紋理特征數(shù)據(jù)導出
成功獲取醫(yī)學影像紋理數(shù)據(jù)后,為保證數(shù)據(jù)后續(xù)使用,系統(tǒng)設計了數(shù)據(jù)導出模塊,導出為用逗號隔開的數(shù)據(jù)文件,這里使用csv格式的導出數(shù)據(jù)。設TextureFeatureCsvFileName為導出紋理數(shù)據(jù)文件路徑,SeriesTexture為保存各圖像序列的紋理數(shù)據(jù)列表,導入Python對應的讀寫csv模塊后,其關(guān)鍵代碼如下:
csvFileSave=open(TextureFeatureCsvFileName,“a+”, newline=‘? )#已追加寫方式打開文件
writer = csv.writer(csvFileSave)
for TextureIndex? in range(len(SeriesTexture)):#對所有列表數(shù)據(jù)進行處理
OneLineDataList=[]
ImageTexture=SeriesTexture[TextureIndex]? ? #獲取一個序列的紋理數(shù)據(jù)
for data in ImageTexture:
OneLineDataList.append(data) #將紋理數(shù)據(jù)利用列表合并為一行
writer.writerow(OneLineDataList)? #寫入csv一行數(shù)據(jù)
csvFileSave.close()? ? ?#數(shù)據(jù)寫入完成后關(guān)閉文件
3 結(jié)語
本文利用Python及對應的開源模塊,開發(fā)了一個醫(yī)療影像紋理數(shù)據(jù)計算軟件原型系統(tǒng)平臺,為診斷醫(yī)師進行醫(yī)療影像紋理數(shù)據(jù)獲取提供了一個低成本的簡易軟件,同時可為其它領域的特征數(shù)據(jù)獲取、數(shù)據(jù)挖掘,以及影像輔助診斷中的人工智能、深度學習應用等研究提供借鑒。系統(tǒng)中對醫(yī)療影像ROI的選取僅僅采用矩形區(qū)域的簡單方法,以此進行系統(tǒng)功能驗證,但在醫(yī)療診斷或者其它應用領域,ROI的選取方式一般豐富多樣,包括手動繪制多邊形、圓形區(qū)域、分割線等,而對于這些本文系統(tǒng)均未設計對應的實現(xiàn)模塊,后續(xù)研究中需進一步完善。
參考文獻:
[1] PECK D. Digital imaging and communications in medicine: a practical introduction and survival guide[M]. New York: Springer,2008.
[2] 張巧麗,趙地,遲學斌. 基于深度學習的醫(yī)學影像診斷綜述[J]. 計算機科學,2017,44(S2):1-7.
[3] 張永剛,陳軍. 基于模型法的醫(yī)學影像圖像紋理分析研究[J]. 工業(yè)儀表與自動化裝置,2018(3):101-103,106.
[4] 高巖. 基于CT圖像的腎臟腫瘤紋理特征提取[J]. 中國數(shù)字醫(yī)學,2019,14(4):66-68.
[5] 馬書新. 乳腺影像案例多模檢索技術(shù)探究[J]. 世界最新醫(yī)學信息文摘,2018,18(46):171-172.
[6] 高靜雅,張榮國,趙健,等. 融合紋理特征與形狀特征的病灶CT圖像識別[J]. 太原科技大學學報,2018,39(3):165-170.
[7] 張劍華,蓋鋮,陳勝勇. 基于目標形狀特征和紋理特征的迭代配準方法在頸動脈血管中的應用[J]. 浙江工業(yè)大學學報,2018,46(1):33-37.
[8] 李亮,尹小童,李夢爍,等. 基于多特征融合的甲狀腺結(jié)節(jié)良惡性識別[J]. 軟件導刊,2017,16(12):137-140.
[9] 王昕,李亮,尹小童,等. 甲狀腺結(jié)節(jié)超聲圖像多特征融合及識別[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,F(xiàn)EDOROV 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] 陳為,沈澤潛,陶煜波. 數(shù)據(jù)可視化[M]. 第2版. 北京:電子工業(yè)出版社,2019.
(責任編輯:孫 娟)