婁夢(mèng)瑩 于 璐 黃忠浩 宋朝暉 袁 虎
齊魯醫(yī)藥學(xué)院醫(yī)學(xué)影像學(xué)院 山東淄博 255213
隨著醫(yī)學(xué)成像技術(shù)的不斷革新,醫(yī)學(xué)圖像處理技術(shù)已成為醫(yī)學(xué)影像領(lǐng)域的重要組成部分,在醫(yī)學(xué)研究與臨床診斷中發(fā)揮著重要的作用,在醫(yī)學(xué)類教育中具有很高的理論性和實(shí)用性,因此,醫(yī)學(xué)圖像處理這門課程在相關(guān)高校課程中的地位也越來越重要[1]。
醫(yī)學(xué)圖像處理是一門理、工、醫(yī)相結(jié)合的多學(xué)科交叉課程,是利用數(shù)學(xué)方法和計(jì)算機(jī)技術(shù)對(duì)醫(yī)學(xué)圖像進(jìn)行具有臨床目的與意義的處理的技術(shù)。該課程以醫(yī)學(xué)成像原理、數(shù)字信號(hào)處理及圖像分析方法為理論基礎(chǔ)[2],不僅要求學(xué)生掌握常用醫(yī)學(xué)影像成像技術(shù)的原理、圖像質(zhì)量的影響因素,同時(shí)要求學(xué)生有較好的程序語(yǔ)言編程能力,學(xué)會(huì)使用復(fù)雜的算法快速實(shí)現(xiàn)并得到處理結(jié)果,從而提高圖像的質(zhì)量。通常在大學(xué)開設(shè)該課程都包含理論與實(shí)驗(yàn)兩部分,多數(shù)高校教師采用傳統(tǒng)的MATLAB編程工具進(jìn)行實(shí)驗(yàn)教學(xué)。MATLAB中有較多的工具箱,例如小波工具箱、數(shù)字信號(hào)處理工具箱等,可以通過調(diào)用相關(guān)函數(shù)完成經(jīng)典的圖像處理功能。譚超[3]等人主要利用MATLAB進(jìn)行圖像處理工作,主要應(yīng)用有圖像處理的基本運(yùn)算、圖像的變換域處理、圖像的形態(tài)學(xué)處理等。此外,MATLAB中的GUI(Graphical User Interface)工具為虛擬實(shí)驗(yàn)軟件的開發(fā)提供了高集成度的環(huán)境,可有效提高效率。魏寧寧[4]等人運(yùn)用MATLAB GUIDE結(jié)合M文件進(jìn)行程序編寫,以實(shí)現(xiàn)醫(yī)學(xué)圖像處理中各個(gè)實(shí)驗(yàn)項(xiàng)目。
近年來,隨著人工智能技術(shù)的不斷發(fā)展和進(jìn)步,各種新的編程工具應(yīng)運(yùn)而生。Python作為一種功能強(qiáng)大的開源編程語(yǔ)言,隨著深度學(xué)習(xí)網(wǎng)絡(luò)的深入發(fā)展,在各個(gè)領(lǐng)域應(yīng)用越來越廣泛,同時(shí)也越來越受廣大師生和科研人員的喜愛。針對(duì)醫(yī)學(xué)圖像處理領(lǐng)域,一方面,Python具有功能強(qiáng)大的擴(kuò)展庫(kù),包含多種現(xiàn)有的圖像處理函數(shù),能夠簡(jiǎn)單便捷地實(shí)現(xiàn)傳統(tǒng)的醫(yī)學(xué)圖像處理方法;另一方面,Python在深度學(xué)習(xí)網(wǎng)絡(luò)模型開發(fā)中具有一定的優(yōu)勢(shì),能夠利用多種新型的網(wǎng)絡(luò)模型完成不同的醫(yī)學(xué)圖像處理操作。
目前,Python在醫(yī)學(xué)圖像處理領(lǐng)域的應(yīng)用越來越普遍,Python語(yǔ)言不僅作為高校師生的科研工具更融入高校的課程中,且已經(jīng)在一些高校的相關(guān)課程的實(shí)驗(yàn)教學(xué)中得到應(yīng)用[5]。
醫(yī)學(xué)圖像處理課程不僅要求學(xué)生掌握其理論知識(shí),理解相關(guān)算法基礎(chǔ),更要求學(xué)生能夠通過實(shí)驗(yàn)操作得到相應(yīng)的圖像處理效果,編程實(shí)現(xiàn)各種理論算法。因此,需要科學(xué)合理地安排相關(guān)實(shí)驗(yàn),加強(qiáng)理論與實(shí)踐的有機(jī)結(jié)合。
在當(dāng)代高校教學(xué)中,學(xué)科融合作為一種新的教學(xué)理念已經(jīng)逐步滲透各個(gè)領(lǐng)域。學(xué)科融合有利于形成知識(shí)體系,提升學(xué)生的學(xué)習(xí)質(zhì)量和效率,有利于培養(yǎng)學(xué)生獨(dú)立思考、創(chuàng)造性思維,促進(jìn)多元化思維的發(fā)展,能激發(fā)學(xué)生學(xué)習(xí)興趣,使學(xué)生積極主動(dòng)學(xué)習(xí)。
目前,Python程序設(shè)計(jì)課程已經(jīng)引入醫(yī)學(xué)影像技術(shù)專業(yè)教學(xué)內(nèi)容中,將Python編程與醫(yī)學(xué)圖像處理課程實(shí)驗(yàn)內(nèi)容相結(jié)合,實(shí)現(xiàn)學(xué)科融合,能夠發(fā)揮更好的教學(xué)效果。Python程序設(shè)計(jì)課程的引入為醫(yī)學(xué)圖像處理實(shí)驗(yàn)提供了編程基礎(chǔ),而醫(yī)學(xué)圖像處理課程為Python程序設(shè)計(jì)提供了應(yīng)用平臺(tái),二者相輔相成,加強(qiáng)理論與實(shí)踐的有機(jī)結(jié)合能夠更好地實(shí)現(xiàn)學(xué)生的綜合能力培養(yǎng),更專注于應(yīng)用型人才的培養(yǎng),更符合新時(shí)代對(duì)青年學(xué)生的要求。
將Python語(yǔ)言引入醫(yī)學(xué)圖像處理課程,根據(jù)理論知識(shí)合理安排調(diào)整實(shí)驗(yàn)環(huán)節(jié)是本次課程改革研究的重點(diǎn)。在Python的擴(kuò)展庫(kù)中,有大量可以用來進(jìn)行醫(yī)學(xué)圖像處理的函數(shù)工具庫(kù),例如Numpy、Matplotlib、Pillow、Skimage、OpenCV等。這些擴(kuò)展庫(kù)能極大地簡(jiǎn)化算法編程過程,以更簡(jiǎn)便的形式幫助學(xué)生理解和完成醫(yī)學(xué)圖像處理的相關(guān)操作。因此,將Python應(yīng)用在醫(yī)學(xué)圖像處理課程中能更好地讓學(xué)生掌握該門課程的精髓。
醫(yī)學(xué)圖像處理主要是把數(shù)字化的二維圖像看作二維矩陣進(jìn)行運(yùn)算,而Python中的Numpy函數(shù)能夠?qū)崿F(xiàn)數(shù)字圖像到矩陣的轉(zhuǎn)換,即Numpy數(shù)組表示圖像數(shù)據(jù),可通過對(duì)Numpy數(shù)組的操作完成對(duì)圖像的相關(guān)處理。Python中的Pillow、OpenCV、Scipy、Matplotlib、Skimage等工具庫(kù)也都支持Numpy數(shù)組模塊。
在醫(yī)學(xué)圖像處理課程的理論學(xué)習(xí)中,其主要內(nèi)容包括醫(yī)學(xué)圖像的基本處理基礎(chǔ)、醫(yī)學(xué)圖像的變換方法、醫(yī)學(xué)圖像的增強(qiáng)方法、醫(yī)學(xué)圖像的分割方法、醫(yī)學(xué)圖像加權(quán)融合方法等。合理安排相應(yīng)的實(shí)驗(yàn)內(nèi)容,旨在用實(shí)際操作完成醫(yī)學(xué)圖像處理過程,實(shí)現(xiàn)理論方法與實(shí)踐操作相結(jié)合,真正完成醫(yī)學(xué)圖像處理全過程。
醫(yī)學(xué)圖像處理課程的基本內(nèi)容包括圖像信息的讀取、格式轉(zhuǎn)換及保存、彩色圖像與灰度圖像之間的相互轉(zhuǎn)換、灰度直方圖的繪制以及基礎(chǔ)的算術(shù)運(yùn)算、幾何變換等。
在實(shí)驗(yàn)過程中,利用Pillow工具庫(kù)中Image模塊的相關(guān)函數(shù)能夠?qū)崿F(xiàn)各種基本圖像處理操作。其中,利用open()函數(shù)能夠?qū)D像賦值給變量,再利用size函數(shù)、format函數(shù)、filename函數(shù)讀取圖像的尺寸信息,獲取圖像的分辨率、文件名及文件格式類型,還可通過save()函數(shù)實(shí)現(xiàn)各種圖像格式的轉(zhuǎn)換和保存,通過convert()函數(shù)實(shí)現(xiàn)彩色圖像與灰度圖像之間的轉(zhuǎn)換。在繪制圖像的灰度直方圖時(shí),主要用到Matplotlib工具庫(kù)中的hist()函數(shù)。此外,利用Matplotlib工具庫(kù)中的imshow()、show()函數(shù),能夠顯示圖像,并能夠通過title()、xlabel()、ylabel()、axis()函數(shù)等為圖像添加相關(guān)的標(biāo)題、標(biāo)簽及坐標(biāo)等標(biāo)注信息。基礎(chǔ)的算術(shù)運(yùn)算可以通過Numpy工具中的array()函數(shù)進(jìn)行矩陣的加、減、乘、除計(jì)算。幾何變換可以通過Pillow工具庫(kù)中Image模塊的resize()函數(shù)、rotate()函數(shù)、transpose()函數(shù)分別實(shí)現(xiàn)圖像的縮放、旋轉(zhuǎn)、鏡像處理。
醫(yī)學(xué)圖像處理課程中主要的圖像變換有三種,分別是傅里葉變換、離散余弦變換、小波變換。
在實(shí)驗(yàn)過程中,利用Numpy工具庫(kù)中的fft函數(shù)計(jì)算一維和多維離散傅里葉變換;利用Scipy工具庫(kù)中的fftpack子工具庫(kù)中rfft()、irfft()、fft2()等各類傅里葉變換函數(shù),實(shí)現(xiàn)更多種類的傅里葉變換方法;利用PyWavelets工具庫(kù)中的wavedec函數(shù)進(jìn)行小波變換;利用OpenCV工具庫(kù)中的dct、idct函數(shù)進(jìn)行離散余弦變換。
醫(yī)學(xué)圖像增強(qiáng)是醫(yī)學(xué)圖像處理課程中的重點(diǎn)內(nèi)容,指根據(jù)圖像特點(diǎn)、存在的問題或應(yīng)用目的等,所采取的改善圖像質(zhì)量、加強(qiáng)圖像某些特征的措施,主要包含灰度變換增強(qiáng)算法、直方圖均衡化算法及各種濾波器增強(qiáng)算法。
在實(shí)驗(yàn)過程中,實(shí)現(xiàn)醫(yī)學(xué)圖像的灰度變換增強(qiáng)一般采用簡(jiǎn)單的算術(shù)運(yùn)算按照灰度變換公式直接對(duì)圖像矩陣進(jìn)行處理,即直接對(duì)圖像數(shù)據(jù)所對(duì)應(yīng)的Numpy中的array()數(shù)組進(jìn)行運(yùn)算。
直方圖均衡化是醫(yī)學(xué)圖像處理中最常用的圖像預(yù)處理方法,用簡(jiǎn)單的編程操作實(shí)現(xiàn)醫(yī)學(xué)圖像的直方圖均衡化增強(qiáng),獲得較好的圖像處理效果是該課程重點(diǎn)教學(xué)內(nèi)容之一。在Python中,OpenCV、Skimage及Pillow工具庫(kù)中都有相關(guān)的內(nèi)置函數(shù)可以用來實(shí)現(xiàn)圖像的直方圖均衡化處理;在Pillow工具庫(kù)中,ImageOps模塊中的equalize()函數(shù)可實(shí)現(xiàn)直方圖均衡化;在Skimage工具庫(kù)中,exposure模塊中的equalize_hist()函數(shù)可以實(shí)現(xiàn)直方圖均衡化;在OpenCV工具箱中,equalizeHist()函數(shù)可以實(shí)現(xiàn)直方圖均衡化。
醫(yī)學(xué)圖像的濾波增強(qiáng)從濾波原理上大致分為空域?yàn)V波器和頻域?yàn)V波器兩大類;從處理效果上大致分為圖像平滑濾波器和圖像銳化濾波器兩種。其中,圖像平滑處理主要功能是去除噪聲、增強(qiáng)細(xì)節(jié)信息,常用中值濾波和均值濾波算法;圖像銳化處理主要功能是增強(qiáng)邊緣輪廓信息,常用邊緣銳化和邊緣檢測(cè)算法。在Python中,利用Pillow工具庫(kù)的ImageFilter模塊中的filter()函數(shù)能夠?qū)崿F(xiàn)各種圖像濾波處理。其中,用于圖像平滑增強(qiáng)處理的函數(shù)有SMOOTH平滑濾波器、MedianFilter中值濾波器、MinFilter最小值濾波器等;用于圖像銳化增強(qiáng)處理的函數(shù)有SHARPEN銳化濾波器、EDGE_ENHANCE邊緣增強(qiáng)濾波器、CONTOUR邊緣輪廓濾波器等。另外,Skimage工具庫(kù)的filters模塊、restoration模塊以及OpenCV工具庫(kù)提供了大量的函數(shù),也可以用于進(jìn)行醫(yī)學(xué)圖像的空域?yàn)V波增強(qiáng)處理,例如,均值濾波、雙邊濾波、維納濾波等。
醫(yī)學(xué)圖像分割是將感興趣區(qū)域從背景中分離并提取出來,主要內(nèi)容包括基于閾值的圖像分割算法、基于邊緣檢測(cè)的圖像分割算法、基于形態(tài)學(xué)的圖像分割算法、基于分水嶺的圖像分割算法以及基于模式識(shí)別的圖像分割算法。
在實(shí)驗(yàn)教學(xué)中,主要實(shí)踐內(nèi)容為基于閾值的醫(yī)學(xué)圖像分割方法的實(shí)現(xiàn),典型的分割算法為圖像二值化處理,即基于單閾值的醫(yī)學(xué)圖像分割算法。在Python中,利用Numpy中的array()將圖像轉(zhuǎn)換為數(shù)字矩陣,然后通過Numpy中的where()函數(shù)將矩陣中的每一個(gè)元素值與閾值進(jìn)行大小比較(關(guān)系運(yùn)算),以此將數(shù)字圖像分割成感興趣區(qū)域和背景區(qū)域兩部分,實(shí)現(xiàn)圖像二值化分割處理。在此過程中,可以采用灰度直方圖hist()函數(shù)進(jìn)行雙峰法選閾值,也可以對(duì)矩陣運(yùn)算取均值為閾值。其次,Skimage工具庫(kù)的segmentation模塊可以實(shí)現(xiàn)基于分水嶺的醫(yī)學(xué)圖像分割;filters模塊可以實(shí)現(xiàn)基于邊緣檢測(cè)算子的醫(yī)學(xué)圖像分割和基于閾值的醫(yī)學(xué)圖像分割。
此外,用Python可以搭建深度學(xué)習(xí)網(wǎng)絡(luò)模型進(jìn)行醫(yī)學(xué)圖像分割。先利用Pillow庫(kù)讀取圖像文件,并將其轉(zhuǎn)換為Numpy數(shù)組,然后利用Tensorflow、Pytorch等模塊構(gòu)建圖像分割網(wǎng)絡(luò)模型,例如典型的U-Net圖像分割模型。Python中有大量開源的深度學(xué)習(xí)網(wǎng)絡(luò)模型可提供使用,能夠簡(jiǎn)化編程過程,方便操作演示,更利于學(xué)生理解和自主學(xué)習(xí)。
圖像融合是用特定的算法將兩幅或多幅圖像綜合成一幅新的圖像。對(duì)于醫(yī)學(xué)影像相關(guān)領(lǐng)域而言,醫(yī)學(xué)圖像融合主要是將解剖結(jié)構(gòu)圖像和功能圖像相融合,使融合后的圖像同時(shí)具有解剖學(xué)和功能學(xué)特點(diǎn),主要方法有基于空域的圖像融合和基于變換域的圖像融合。常用的醫(yī)學(xué)圖像空域融合算法包括像素灰度極大(小)值融合、像素灰度值加權(quán)融合;變換域圖像融合方法主要是小波變換算法。
像素灰度值加權(quán)融合是醫(yī)學(xué)圖像融合中最常用的方法,也是實(shí)教學(xué)的重點(diǎn)實(shí)驗(yàn)項(xiàng)目。在Python中,將圖像轉(zhuǎn)化為Numpy數(shù)組后,設(shè)置合理的權(quán)重模板,對(duì)多幅圖像的數(shù)組添加權(quán)重參數(shù),然后直接對(duì)多個(gè)數(shù)組進(jìn)行運(yùn)算,即采用多數(shù)組之間的算術(shù)運(yùn)算可實(shí)現(xiàn)圖像的加權(quán)融合。也可以利用Pillow工具庫(kù)的ImageChops模塊中的內(nèi)置函數(shù)進(jìn)行圖像的融合,例如,相加函數(shù)add()、減法函數(shù)subtract()、疊加函數(shù)multiply()等。
基于Python的醫(yī)學(xué)圖像處理課程教學(xué)改革旨在提高學(xué)生的操作能力,培養(yǎng)學(xué)生對(duì)本門課程的學(xué)習(xí)興趣,培養(yǎng)學(xué)生解決實(shí)際問題的能力,具有較強(qiáng)的創(chuàng)新性和實(shí)用性。經(jīng)過近三年的改革探索,用Python語(yǔ)言進(jìn)行醫(yī)學(xué)圖像處理實(shí)驗(yàn)教學(xué)取得了較好的教學(xué)效果。
首先,融入課程融合理念,Python程序設(shè)計(jì)為醫(yī)學(xué)圖像處理打下了堅(jiān)實(shí)的編程基礎(chǔ),反之,本課程也讓Python程序設(shè)計(jì)得到了實(shí)踐應(yīng)用。用Python語(yǔ)言進(jìn)行實(shí)驗(yàn)設(shè)計(jì)更容易被學(xué)生接受和理解,實(shí)驗(yàn)操作執(zhí)行更順暢,學(xué)生學(xué)習(xí)興趣濃厚。
其次,注重實(shí)踐教學(xué),革新實(shí)驗(yàn)教學(xué)手段,優(yōu)化實(shí)驗(yàn)教學(xué)內(nèi)容。教學(xué)過程中,注重理論方法與實(shí)踐操作的有機(jī)結(jié)合,突出課程的實(shí)用性,加強(qiáng)對(duì)實(shí)踐能力的引導(dǎo)和培養(yǎng)。用Python代替?zhèn)鹘y(tǒng)的MATLAB進(jìn)行實(shí)驗(yàn)教學(xué),旨在通過簡(jiǎn)單的Python編程實(shí)現(xiàn)醫(yī)學(xué)圖像處理課程教學(xué)中的主要圖像處理方法。在實(shí)驗(yàn)過程中,Python免費(fèi)開源、語(yǔ)法簡(jiǎn)單,能高效地進(jìn)行數(shù)值計(jì)算,在圖像處理方面也有相應(yīng)的功能強(qiáng)大的內(nèi)置函數(shù)庫(kù),且在深度學(xué)習(xí)領(lǐng)域發(fā)展迅速,能夠利用Python中的現(xiàn)有函數(shù)完成對(duì)醫(yī)學(xué)圖像的各種不同的處理操作,來滿足臨床檢查中對(duì)不同圖像的需求,提供高質(zhì)量的醫(yī)學(xué)圖像來服務(wù)醫(yī)學(xué)診斷。
此外,Python作為當(dāng)今人工智能領(lǐng)域重要的編程語(yǔ)言,受到各個(gè)研究機(jī)構(gòu)及企業(yè)的青睞,學(xué)生掌握一定的Python編程能力有助于今后的工作就業(yè)。