李磊 郝磊 蔣林華
摘? 要: 在完成了兒童功能性腦圖譜的構(gòu)建后,需要考慮的問(wèn)題就是如何將它直觀地呈現(xiàn)出來(lái)。目前,已經(jīng)有適用于打開(kāi)和呈現(xiàn)NIFTI圖像文件的Python模塊或是MATLAB工具包。但是,他們對(duì)于不熟悉腳本操作和編程的研究者來(lái)說(shuō)不是很方便,需要經(jīng)過(guò)專(zhuān)門(mén)的學(xué)習(xí)才能運(yùn)用自如。我們考慮開(kāi)發(fā)一個(gè)基于Python的工具箱來(lái)適配兒童功能性腦圖譜的呈現(xiàn)和后續(xù)的分析,用戶可以直接在GUI界面上進(jìn)行點(diǎn)擊即可完成自己的研究操作,避免直接與腳本進(jìn)行交互,方便了沒(méi)有編程基礎(chǔ)的用戶的使用。
關(guān)鍵詞: 腦圖譜;Python;工具箱;設(shè)計(jì)
中圖分類(lèi)號(hào): TP311.52 ???文獻(xiàn)標(biāo)識(shí)碼: A??? DOI:10.3969/j.issn.1003-6970.2020.07.036
本文著錄格式:李磊,郝磊,蔣林華. 基于Python的兒童腦圖譜工具箱的設(shè)計(jì)與實(shí)現(xiàn)[J]. 軟件,2020,41(07):179-184+215
Design and Implementation of Childrens Brain Atlases Based on Python
LI Lei1, HAO Lei2, JIANG Lin-Hua1*
(1. School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China;2. IDG/McGovern Institute for Brain Research, Beijing Normal University, Beijing 100875, China)
【Abstract】: After childrens developmental brain functional atlases have been completed, a problem has been rose that how to display it intuitively. At present, there are Python modules or MATLAB toolkits for loading and displaying NIFTI image files. However, they are very inconvenient for researchers who are not familiar with script operation or programming. They need to take a long time to learn for operating those scripts expertly. So, a toolbox to adapt to the presentation and subsequent analysis of childrens developmental brain functional atlases based on Python was designed and developed. Users can click button directly on the GUI interface to complete their own research operations and avoid direct interaction with scripts. This toolbox facilitates the use of users without programming basis.
【Key words】: Brain atlases; Python; Toolbox; Design
0 ?引言
在科技飛速發(fā)展的今天,各種先進(jìn)的高科技儀器被應(yīng)用于科研中,成為了科學(xué)家和研究員的有利幫手。核磁共振儀就是腦科學(xué)領(lǐng)域的一個(gè)不可或缺的研究工具,人腦磁共振成像(MRI)目前已經(jīng)廣泛的運(yùn)用到了腦發(fā)育的基礎(chǔ)研究[1-4],并逐漸地被用于探究?jī)和颓嗌倌甏竽X發(fā)育過(guò)程與自身行為之間的關(guān)系[5-7],有望能夠?yàn)楦鞣N腦功能發(fā)育狀態(tài)提供輔助診斷和參考對(duì)象。
目前,已經(jīng)出版過(guò)許多基于結(jié)構(gòu)化核磁共振成像的腦圖譜集,作為兒童群體[8-11]的重要參考。例如,北京師范大學(xué)的賀勇課題組在2019年發(fā)表了一篇論文[12],他們基于328名認(rèn)知正常的中國(guó)兒童(6至12歲)的高質(zhì)量磁共振腦影像數(shù)據(jù),采用嚴(yán)格規(guī)范的圖像處理與質(zhì)量控制流程,通過(guò)無(wú)偏迭代的模板圖譜生成算法,構(gòu)建了中國(guó)兒童標(biāo)準(zhǔn)腦結(jié)構(gòu)圖譜集(CHN-PD)。然而,現(xiàn)行的兒童大腦圖譜大多是基于無(wú)任務(wù)的或者結(jié)構(gòu)的,不能作為判斷兒童在特定的認(rèn)知過(guò)程是否處于正常發(fā)育發(fā)展范圍的參考。據(jù)我們所知,全世界還缺乏兒童認(rèn)知發(fā)育的年齡和認(rèn)知功能腦圖譜。
在之前的研究中,我們已經(jīng)使用了3T Siemens Prisma掃描儀收集了548名7至12歲的兒童的高質(zhì)量T1加權(quán)結(jié)構(gòu)和事件相關(guān)的功能磁共振成像(fMRI)數(shù)據(jù),并且使用了最新的預(yù)處理工具包fMRIPrep[13]對(duì)fMRI數(shù)據(jù)進(jìn)行預(yù)處理。然后針對(duì)不同年齡組和認(rèn)知任務(wù)組合構(gòu)建了通用線性模型,這些神經(jīng)發(fā)育功能性腦圖譜提供了兒童大腦發(fā)育期下的平均神經(jīng)激活強(qiáng)度、分布和模式。在本文中,著重闡述了基于特定年齡和任務(wù)的兒童認(rèn)知發(fā)育功能性腦圖譜對(duì)應(yīng)的功能性腦發(fā)育圖譜工具箱(Developmental Brain Functional Atlas,DBFA)的開(kāi)發(fā)流程。該工具箱分別提供了年齡特異性和認(rèn)知特異性(以及僅用于情緒處理的性別特異性)圖譜的下載。使用者可以選擇使用未矯正、false discovery rate(FDR)和familywise error(FWE)矯正等方式來(lái)輸入閾值,以進(jìn)行不同p值和最小激活體素?cái)?shù)之間的多重比較。
1 ?工具箱設(shè)計(jì)
考慮到目前腦科學(xué)領(lǐng)域大多數(shù)的研究工具或者腳本都是基于Python或Matlab的,大部分心理學(xué)專(zhuān)業(yè)的研究生和研究者們需要經(jīng)過(guò)專(zhuān)門(mén)的編程訓(xùn)練才能理解代碼的含義,從而能根據(jù)自己的研究目的和需要去編寫(xiě)或者改寫(xiě)腳本,才能運(yùn)行出分析的數(shù)據(jù)結(jié)果來(lái)進(jìn)行后面的研究。該工具箱的設(shè)計(jì)不僅僅只是作為兒童功能性腦發(fā)育圖譜的一個(gè)可視化工具,它還是一款可以為研究者們提供fMRI數(shù)據(jù)分析的工具。所以,DBFA工具箱要避免讓源代碼或者腳本文件直接和用戶進(jìn)行交互,我們提供了像商業(yè)工具一般的可視化界面,所有的操作只需要用鼠標(biāo)點(diǎn)擊即可完成,方便對(duì)計(jì)算機(jī)腳本不熟悉的用戶使用,可以加快在研究過(guò)程中在數(shù)據(jù)處理方面的時(shí)間損耗。
我們采用Python語(yǔ)言作為編寫(xiě)語(yǔ)言,這樣能夠較好地與主流的心理學(xué)腦科學(xué)領(lǐng)域使用的腳本函數(shù)進(jìn)行對(duì)接;使用PyQt5+Eric6來(lái)設(shè)計(jì)GUI并且嵌入相應(yīng)功能的槽函數(shù);最后使用cx-Freeze作為打包工具來(lái)生成最后的可執(zhí)行程序。
DBFA工具箱是作為兒童功能性腦發(fā)育圖譜的可視化工具而開(kāi)發(fā)的,但是它不應(yīng)只具有可視化這么一個(gè)功能,這樣開(kāi)發(fā)成本太高而可使用性又太低。我們考慮,DBFA工具箱應(yīng)該具有能夠可視化.nii(標(biāo)準(zhǔn)NIFTI圖像的擴(kuò)展名是.nii,包含了頭文件及圖像資料)的文件功能,它不僅僅只用于開(kāi)發(fā)的腦圖譜的文件,用戶自己的.nii文件也可以使用該工具箱來(lái)打開(kāi)并且可視化。用戶有兩種方式可以打開(kāi)nii圖譜文件,一種通過(guò)打開(kāi)菜單在電腦磁盤(pán)中選擇要處理的文件;另一種是根據(jù)工具箱提供的篩選功能,選擇年齡,認(rèn)知任務(wù)和狀態(tài)來(lái)篩選出對(duì)應(yīng)的nii文件來(lái)打開(kāi)。打開(kāi)后,對(duì)應(yīng)的nii文件的可視化腦圖將會(huì)顯示在主界面上,用戶可以根據(jù)自己的需求來(lái)直接將圖片保存下來(lái),或者是使用FDR、FPR、FWE矯正得到更加嚴(yán)格的腦圖譜后再保存。同時(shí)也可以設(shè)置Voxels的數(shù)目來(lái)決定激活腦區(qū)的最小大小;設(shè)置Cut_coords的坐標(biāo)來(lái)獲得不同位置的腦切片圖譜。完成后,用戶可以將該處理完的腦圖譜存儲(chǔ)為一個(gè)新的nii文件,今后可以隨時(shí)進(jìn)行查看和再操作。DBFA工具箱的系統(tǒng)功能流程圖如圖1所示。
2 ?核心部分
2.1 ?GUI設(shè)計(jì)
Qt庫(kù)是目前最強(qiáng)大的庫(kù)之一[14-15]。PyQt是一個(gè)創(chuàng)建GUI應(yīng)用程序的工具包。它是Python編程語(yǔ)言和Qt庫(kù)的成功融合。因此,我們采用PyQt5來(lái)創(chuàng)建GUI界面。導(dǎo)入QtCore, QtGui, QtWidgets三個(gè)模塊,工具箱所需要的菜單欄、顯示框、文本框、下拉框、按鈕和控件等都可以從中直接生成實(shí)例化對(duì)象,減少在GUI上的耗費(fèi)時(shí)間。同時(shí),PyQt提供的信號(hào)與槽機(jī)制實(shí)現(xiàn)了界面與業(yè)務(wù)邏輯的分離,將重點(diǎn)放在槽函數(shù)的編寫(xiě)上。
2.2 ?關(guān)鍵函數(shù)實(shí)現(xiàn)
雖然nibabel模塊中的load函數(shù)和nibabel.viewers模塊中的OrthoSlicer3D函數(shù)可以打開(kāi)NIFTI圖像文件并且呈現(xiàn)出3D圖像來(lái),但是這樣呈現(xiàn)出來(lái)的圖像未經(jīng)過(guò)任何處理,也不利于觀察,所以不能直接套用現(xiàn)有的模塊和函數(shù)。我們考慮,將NIFTI文件打開(kāi)、FDR、FPR、FWE矯正功能編寫(xiě)到一個(gè)函數(shù)中。定義函數(shù)如下:
def ThresholdMap (StatMap = Fname, Alpha = alpha, Height_control = height_control, Cluster_ threshold = cluster_threshold):
其中,StatMap接收使用nibable打開(kāi)的NIFTI文件的文件名,Alpha接收用戶輸入的數(shù)值(0≤alpha≤1),Height_control接收矯正方式的形式,Cluster_threshold接收Voxels的數(shù)值大小。重點(diǎn)代碼如下:
if? height_control == 'fpr':?????? threshold = norm.isf(alpha)
…
if? height_control == 'fdr':?????? threshold = fdr_threshold(stats, alpha)??? elif height_control == 'fwe':?????? threshold = norm.isf(alpha / n_voxels)?????? stats*= (stats > threshold)
_StatMap = masker.inverse_transform(stats).get_data()LabelMap,nLabels = label(_StatMap > threshold)labels =LabelMap[masker.mask_img_.get_data() > 0]for label in range(1,,nLabels + 1):??? if? np.sum(labels == label) < cluster_threshold:??????? stats[labels == label] = 0
return masker.inverse_transform(stats), threshold
在完成了文件的讀取和數(shù)據(jù)矯正后,需要將矯正后的文件進(jìn)行可視化。用于可視化的函數(shù)需要接收前面矯正后的文件和閾值,并且,我們考慮加入水平面、矢狀面、冠狀面的位置輸入來(lái)滿足用戶對(duì)于大腦各個(gè)腦區(qū)的研究。定義函數(shù)如下:
def PlotStatMap (Threshold_map = threshold_map, Threshold = threshold, Cut_coords = cut_coords):
其中,Threshold_map和Threshold接收ThresholdMap函數(shù)返回的矯正后的數(shù)據(jù),Cut_coords接收一個(gè)三元組(X,Y,X)來(lái)確定切面的坐標(biāo),也可以不選擇輸入,該函數(shù)返回默認(rèn)位置的切面坐標(biāo)。重點(diǎn)代碼如下:
threshold_map = _utils.check_niimg_3d(threshold_map, dtype='auto')
display = display_factory(display_mode)(???? img,???? threshold = threshold,???? cut_coords = cut_coords,???? figure = figure,
axes = axes,???? black_bg = black_bg,???? colorbar = colorbar,???? brain_color = brain_color,??? )
return display
調(diào)用plt.show( )即可呈現(xiàn)出對(duì)應(yīng)文件矯正后繪制出的圖像。
3 ?工具箱實(shí)現(xiàn)
如圖2所示是運(yùn)行后的工具箱初始界面。通用的文件打開(kāi)方式可以點(diǎn)擊菜單欄的File選項(xiàng)開(kāi)里的Open來(lái)選擇磁盤(pán)里的nii文件,如果需要查看我們發(fā)布的兒童發(fā)育腦圖譜可以通過(guò)右邊的篩選模塊來(lái)打開(kāi)。用戶可以根據(jù)自己的研究所需,來(lái)選擇是基于年齡相關(guān)的腦圖還是基于任務(wù)相關(guān)的腦圖,如果是年齡相關(guān)的,那么在Age選項(xiàng)里可以選擇7~12中一個(gè)具體的年齡,如果是任務(wù)相關(guān)的,Age選項(xiàng)變?yōu)椴豢捎?,腦圖譜默認(rèn)年齡為全年齡段。然后,在四種任務(wù)中,用戶必須要選擇一個(gè)任務(wù),再選擇一種狀態(tài)。四個(gè)任務(wù)都來(lái)自于心理學(xué)經(jīng)典實(shí)驗(yàn)任務(wù),注意網(wǎng)絡(luò)測(cè)驗(yàn)(ANT)、氣球模擬危險(xiǎn)性測(cè)驗(yàn)(BART)、情緒匹配(EM)、數(shù)字N-back(NB)。全部選擇完成后,會(huì)讀取出匹配與選擇的腦圖譜文件并顯示在Display區(qū)域中。讀取后,篩選區(qū)域會(huì)被禁止使用,用戶可以再根據(jù)自己的需求,可以選擇點(diǎn)擊Save Picture按鈕來(lái)保存當(dāng)前的顯示的圖像,圖像將保存在工具箱所在目錄的Result文件夾下。用戶可以在FDR、FPR、FWE三種不同的矯正方式中選擇一項(xiàng)輸入閾值來(lái)獲取不同嚴(yán)格程度下的新圖譜。Voxels的數(shù)值可以選擇也可以不選擇,輸入的數(shù)值會(huì)決定激活腦區(qū)域內(nèi)相連的最小體素?cái)?shù)。Cut_coords的三個(gè)坐標(biāo)會(huì)改變圖像所呈現(xiàn)的三個(gè)切片位置,方便用戶查看該情形下的任意腦區(qū)情況。每次改變?cè)O(shè)置的參數(shù)點(diǎn)擊Show即可顯示新的圖像。最后,用戶可以輸入文件名來(lái)將重新設(shè)置閾值后的腦圖譜保存為一個(gè)新的nii文件,新的文件將保存在工具箱的目錄底下。
以BART任務(wù)中的Pump狀態(tài)為例,選擇年齡為9歲的通用性別腦圖譜,點(diǎn)擊Load按鈕后得到的該圖譜原始圖像呈現(xiàn)在Display窗口中,如圖3所示。
分別在FDR、FPR、FWE的輸入框中輸入0.005這個(gè)閾值,取相同的Voxels數(shù)值50,得到根據(jù)閾值矯正后的腦圖譜分別如圖4(a)(b)(c)所示。在同一個(gè)圖譜的基礎(chǔ)上,把相連的最小腦激活體素設(shè)為相同,可以發(fā)現(xiàn),相同的閾值下三種不同矯正方式對(duì)應(yīng)的腦激活區(qū)域基本沒(méi)有變化,激活的區(qū)域大小不同,F(xiàn)PR矯正程度相對(duì)來(lái)說(shuō)弱一點(diǎn),F(xiàn)WE則最為嚴(yán)格。
對(duì)比圖4(b)和圖4(d)可以看出,在同一圖譜下,使用相同的矯正方式和Voxels值,輸入不同的閾值,得到矯正后的圖譜在激活腦區(qū)上沒(méi)有顯著的差異,只有激活范圍有部分差異。與0.01閾值相比,在0.005
閾值下,激活范圍有了減小,部分激活完全消失,說(shuō)明閾值越小矯正程度越嚴(yán)格,可以排除局部激活對(duì)后續(xù)研究中的影響。
用戶在完成矯正后,可以選擇輸入X,Y,Z的值來(lái)查看水平面、矢狀面、冠狀面的三維切片圖像,以滿足不同用戶的研究需求,對(duì)照?qǐng)D如圖4(e)和圖4(f)所示。
4 ?結(jié)論
在本研究中,我們采集了中國(guó)7至12歲兒童的高質(zhì)量fMRI數(shù)據(jù),建立了一套適用于不同認(rèn)知領(lǐng)
域基于特定年齡、認(rèn)知神經(jīng)及認(rèn)知發(fā)育功能腦圖譜,觀察到兒童在不同的認(rèn)知過(guò)程中廣泛存在的特異性的全腦激活。同時(shí),我們?cè)谏窠?jīng)成像信息學(xué)工具和資源信息中心(NITRC)網(wǎng)站(http://www.nitrc.org/ projects/dbfa)上發(fā)布了DBFA工具箱,用來(lái)量化、可視化和下載不同特定認(rèn)知過(guò)程的腦圖譜。研究者們也可以用這個(gè)工具箱來(lái)處理自己fMRI數(shù)據(jù),或者根據(jù)我們發(fā)布的腦圖譜,根據(jù)自己研究中的需要,來(lái)重新進(jìn)行閾值的設(shè)置和全腦中激活腦區(qū)位置的觀察。
這個(gè)公開(kāi)的腦圖譜來(lái)源于一個(gè)正常、特征良好的人群,有助于開(kāi)放性問(wèn)題和圖像數(shù)據(jù)分析,以便研究者們能更好地了解兒童人群。使用這樣一個(gè)大樣本使得這些圖譜具有可重復(fù)性、健壯性,可作為今后兒科研究中正常發(fā)育大腦和患病大腦的參考。
參考文獻(xiàn)