穆 珺,晏峻峰,彭清華
(湖南中醫(yī)藥大學(xué),湖南 長沙 410208)
中醫(yī)現(xiàn)代目診以傳統(tǒng)目診為基礎(chǔ),通過對眼科儀器設(shè)備檢查結(jié)果的分析,聯(lián)系相關(guān)臨床經(jīng)驗(yàn)從而做出診斷。而眼底圖像分析包括眼底血管分析,屬于中醫(yī)現(xiàn)代目診的一個重要研究內(nèi)容[1]。 不僅如此,眼底血管在諸如高血壓、糖尿病、青光眼等疾病的檢測和診斷中含有豐富的信息[2]。 但對眼底圖像血管進(jìn)行人工分割的方式,通常費(fèi)時費(fèi)力,并且需要具有專家知識[3]。 因此,眼底圖像血管分割算法的研究一直受到醫(yī)學(xué)圖像處理領(lǐng)域的廣泛關(guān)注[4-6]。
SINGH 等[2]使用基于Gumbel 概率分布函數(shù)的濾波器和基于熵的閾值方法對眼底圖像血管進(jìn)行分析。LI 等[3]通過BP 算法訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)來完成血管分割。 HU 等[7]提出了一個多尺度卷積神經(jīng)網(wǎng)絡(luò)來獲取眼底圖像血管分割的概率圖,并使用條件隨機(jī)場獲取最終分割結(jié)果。 DASGUPTA 等[8]提出了一個全卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)來進(jìn)行眼底圖像血管分割。BARKANA 等[9]提出了一個眼底圖像血管分割模型,使用多種統(tǒng)計(jì)特征,并融合多種分類器來提升和評估分割性能。 RONNEBERGER 等[10]提出了一個名為U-Net 的端到端神經(jīng)網(wǎng)絡(luò)架構(gòu),并通過U-Net 神經(jīng)網(wǎng)絡(luò)進(jìn)行醫(yī)學(xué)圖像分割。 此后的研究者提出了許多基于U-Net 神經(jīng)網(wǎng)絡(luò)進(jìn)行眼底圖像血管分割的算法,并顯示出優(yōu)秀的性能[6]。 JIN 等[11]提出了一個可變形的U-Net 神經(jīng)網(wǎng)絡(luò)架構(gòu)來分割眼底血管。 ORUJOV等[12]提出了一種模糊邊緣檢測的算法來分割眼底圖像血管。CHENG 等[13]提出了一個密集連接U-Net 神經(jīng)網(wǎng)絡(luò)架構(gòu)來分割眼底血管。 FENG 等[14]提出了一個跨連接神經(jīng)網(wǎng)絡(luò)來分割眼底血管。YU 等[15]使用零相位分量分析和全局對比度規(guī)范化進(jìn)行預(yù)處理,然后訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)獲取眼底血管分割結(jié)果。 盡管研究者們付出了大量的努力,也取得了不少進(jìn)展,但眼底圖像血管分割仍然具有值得進(jìn)一步改進(jìn)的空間[4-6]。
本文所提出的眼底圖像血管分割算法的總體流程包括:數(shù)據(jù)增廣與預(yù)處理、小波系數(shù)圖像獲取、UNet 神經(jīng)網(wǎng)絡(luò)訓(xùn)練與預(yù)測、閾值分割與后處理。
1.1.1 數(shù)據(jù)來源 本文所提出的眼底圖像血管分割算法是在DRIVE 數(shù)據(jù)集上進(jìn)行訓(xùn)練和測試。DRIVE數(shù)據(jù)集是廣泛使用于眼底圖像血管分割的公開數(shù)據(jù)集,其中包含40 張眼底圖像,每張圖像的尺寸為565 像素寬、584 像素高。 該數(shù)據(jù)集的40 張圖像中,20 張被劃分為訓(xùn)練圖像,20 張被劃分為測試圖像。每一張眼底圖像都提供了對應(yīng)的專家手動分割圖像。本文采用U-Net 神經(jīng)網(wǎng)絡(luò),將訓(xùn)練圖像和對應(yīng)的分割圖像作為訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練;將算法對測試圖像的分割結(jié)果與測試圖像的專家分割結(jié)果進(jìn)行對比,以度量算法分割性能。
1.1.2 數(shù)據(jù)增廣 在諸如眼底圖像血管分割等醫(yī)學(xué)圖像處理問題中,要獲取大量的專家手動分割信息以構(gòu)成訓(xùn)練數(shù)據(jù)通常是非常困難的。 而訓(xùn)練數(shù)據(jù)數(shù)量的缺乏,很可能造成訓(xùn)練中的模型過擬合問題,從而降低以神經(jīng)網(wǎng)絡(luò)等算法為代表的有監(jiān)督的分割算法的準(zhǔn)確性和泛化能力。為解決該問題,本文采用數(shù)據(jù)增廣操作,將原始數(shù)據(jù)集中的40 張圖像增廣為160 張圖像。數(shù)據(jù)增廣操作對于每一張圖像,計(jì)算得到其水平鏡像圖像、豎直鏡像圖像、水平與豎直鏡像圖像。 單張?jiān)紙D像的增廣結(jié)果如圖1 所示。
圖1 數(shù)據(jù)增廣
1.1.3 圖像預(yù)處理 在輸入U(xiǎn)-Net 神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練和測試之前,本文將對原始圖像進(jìn)行一系列預(yù)處理操作。預(yù)處理操作包括圖像灰度化、圖像數(shù)據(jù)標(biāo)準(zhǔn)化、圖像對比度受限自適應(yīng)直方圖均衡化[16]、伽瑪變換。 圖像灰度化是將彩色圖像轉(zhuǎn)換為灰度圖,其計(jì)算公式如下:
GrayScale=0.299×R+0.587×G+0.114×B (1)
其中,R、G、B 分別為每個像素點(diǎn)的紅、綠、藍(lán)3個顏色通道的亮度值,通過加權(quán)求和,得到GrayScale,即該像素點(diǎn)的灰度值。
圖像數(shù)據(jù)標(biāo)準(zhǔn)化操作的作用是將數(shù)據(jù)轉(zhuǎn)化為具有均值0 和標(biāo)準(zhǔn)差1 的新數(shù)據(jù),以避免具有較大取值范圍的變量對計(jì)算結(jié)果產(chǎn)生劇烈影響,標(biāo)準(zhǔn)化的公式如下:
其中,x 是每個像素點(diǎn)的灰度值,x 是所有像素點(diǎn)的平均灰度值,Sx是所有像素點(diǎn)灰度值的標(biāo)準(zhǔn)差,x′是標(biāo)準(zhǔn)化之后的灰度值。
圖像對比度受限自適應(yīng)直方圖均衡化算法的作用是利用局部圖像塊的直方圖對圖像的灰度值進(jìn)行映射,以提高圖像對比度,實(shí)現(xiàn)圖像的增強(qiáng)。伽瑪變換的作用也是對圖像進(jìn)行增強(qiáng),其公式如下:
其中,x 是每個像素點(diǎn)的灰度值,gamma(x)是變換后的灰度值,參數(shù)γ 取值為0.833。
原始圖像經(jīng)過預(yù)處理后的結(jié)果如圖2 所示。
圖2 圖像預(yù)處理
1.2.1 哈爾小波變換 小波變換是信號處理與圖像處理中一個強(qiáng)有力的數(shù)學(xué)工具。 小波變換能同時描述圖像的空間域和頻率域的信息。 哈爾小波是一種應(yīng)用極為廣泛的小波變換[17]。 哈爾小波的計(jì)算公式如下:
通過哈爾小波變換,可以得到圖像的兩種小波系數(shù),分別為近似系數(shù)與細(xì)節(jié)系數(shù)。 近似系數(shù)可以視為原始圖像在低分辨率下的近似;而細(xì)節(jié)系數(shù)可以描述原始圖像在各個局部的細(xì)微變化。
對二維灰度圖像進(jìn)行一階哈爾小波變換,可以視為在行和列兩個方向分別進(jìn)行一維哈爾小波變換,從而可以得到以下小波系數(shù)矩陣:圖像的近似系數(shù)矩陣、反映圖像水平方向變化細(xì)節(jié)的水平細(xì)節(jié)系數(shù)矩陣、反映圖像垂直方向變化細(xì)節(jié)的垂直細(xì)節(jié)系數(shù)矩陣、反映圖像對角方向變化細(xì)節(jié)的對角細(xì)節(jié)系數(shù)矩陣。
1.2.2 小波系數(shù)矩陣上采樣 對灰度圖像進(jìn)行一階哈爾小波變換,可以得到水平細(xì)節(jié)系數(shù)矩陣、垂直細(xì)節(jié)系數(shù)矩陣、對角細(xì)節(jié)系數(shù)矩陣,這3 個細(xì)節(jié)系數(shù)矩陣可以綜合反映出圖像各個局部在不同方向上的細(xì)微的變化情況。
因此,將這3 個細(xì)節(jié)系數(shù)矩陣作為富含信息的輸入,和預(yù)處理得到的灰度圖像共同組成神經(jīng)網(wǎng)絡(luò)訓(xùn)練和測試的輸入。
由于小波變換得到的細(xì)節(jié)系數(shù)矩陣尺寸為原始圖像的一半,因此,采用雙線性插值算法對小波系數(shù)矩陣進(jìn)行上采樣,得到尺寸和原始圖像一致的小波系數(shù)圖像。
小波變換的輸入圖像和上采樣得到的3 個小波系數(shù)圖像如圖3 所示。
圖3 小波變換的輸入圖像和上采樣得到的3 個小波系數(shù)圖像
1.3.1 U-Net 神經(jīng)網(wǎng)絡(luò)架構(gòu) U-Net 是RONNEBERGER 等[10]于2015 年提出的端到端的卷積神經(jīng)網(wǎng)絡(luò)。 U-Net 網(wǎng)絡(luò)由收縮路徑與擴(kuò)張路徑兩個對稱的部分構(gòu)成。 U-Net 神經(jīng)網(wǎng)絡(luò)對輸入的圖像塊進(jìn)行處理,最終得到同樣尺寸的特征圖作為分割預(yù)測結(jié)果輸出。
在收縮路徑中,原始輸入圖像塊經(jīng)過兩次3×3卷積與ReLU 操作,再進(jìn)行2×2 最大池化,如此操作重復(fù)4 次;得到的特征圖像塊再經(jīng)過兩次3×3 卷積與ReLU 操作,此后進(jìn)入擴(kuò)張路徑;在擴(kuò)張路徑中,將收縮路徑最末端得到的特征圖像塊進(jìn)行上采樣,并與收縮路徑中處于同層的特征圖像塊進(jìn)行拼接,拼接后進(jìn)行兩次3×3 卷積與ReLU 操作,將得到的像塊進(jìn)行上采樣,如此重復(fù)4 次。 在擴(kuò)張路徑的最末端,通過2 個1×1 卷積將輸出特征圖映射為每個像素點(diǎn)分別屬于血管和背景的預(yù)測值。
本文在大體借鑒文獻(xiàn)[10]中的U-Net 神經(jīng)網(wǎng)絡(luò)架構(gòu)基礎(chǔ)上,對網(wǎng)絡(luò)架構(gòu)進(jìn)行了一些調(diào)整和改善。
首先,本文將收縮路徑中的池化操作設(shè)置為重復(fù)2次,相應(yīng)的擴(kuò)張路徑中的上采樣操作也設(shè)置為重復(fù)2 次,以適應(yīng)于本文所處理的眼底圖像及眼底圖像塊尺寸有限的特點(diǎn)。 其次,本文在每個3×3 卷積與ReLU 操作之后,加入了批標(biāo)準(zhǔn)化與丟棄操作,以加速神經(jīng)網(wǎng)絡(luò)收斂。
本文所采用的U-Net 神經(jīng)網(wǎng)絡(luò)架構(gòu)如圖4 所示。
圖4 U-Net 神經(jīng)網(wǎng)絡(luò)架構(gòu)
1.3.2 U-Net 神經(jīng)網(wǎng)絡(luò)訓(xùn)練 (1)訓(xùn)練圖像塊采樣盡管已經(jīng)通過數(shù)據(jù)增廣將訓(xùn)練圖像的數(shù)量從20 增加到80,但是訓(xùn)練圖像的數(shù)量仍然非常有限。 為避免U-Net 神經(jīng)網(wǎng)絡(luò)訓(xùn)練中出現(xiàn)過擬合,本文采用隨機(jī)采樣的方式,在每張?jiān)加?xùn)練圖像中,隨機(jī)采樣9500 個尺寸為48×48 的圖像塊,從而構(gòu)造總數(shù)量為760 000 的圖像塊作為訓(xùn)練數(shù)據(jù)。
(2)損失函數(shù)本文對于U-Net 神經(jīng)網(wǎng)絡(luò)的最終輸出層采用softmax 函數(shù)作為激活函數(shù)。 softmax 函數(shù)的公式如下:
其中,zi(i∈{1,2})表示U-Net 神經(jīng)網(wǎng)絡(luò)的輸出,即圖像塊中每個像素點(diǎn)分別屬于血管和背景的預(yù)測值,并且預(yù)測值被排列成2 條向量。 p(zi)就是將預(yù)測值歸一化后得到的每個像素點(diǎn)分別屬于血管和背景的概率值,分別用p(z1)和p(z2)表示,若z1>z2,則p(z1)>p(z2),反之亦然;每個像素點(diǎn)將被算法預(yù)測為p(zi)取最大值所對應(yīng)的類別。
對于每個像素x,損失函數(shù)可以衡量算法對像素預(yù)測值與真實(shí)值之間的差異,本文采用交叉熵?fù)p失函數(shù)。 交叉熵?fù)p失函數(shù)的公式如下:
其中,y(x)與p(x)分別是像素x 的真實(shí)類別標(biāo)簽和預(yù)測值。 y1(x)是表示像素x 是否屬于背景點(diǎn)的類別標(biāo)簽,而y2(x)是表示像素x 是否屬于血管點(diǎn)的類別標(biāo)簽。 p1(x)是算法預(yù)測像素x 屬于背景點(diǎn)的概率值,而p2(x)是算法預(yù)測像素x 屬于血管點(diǎn)的概率值,考慮所有采樣的像素點(diǎn)x(x∈Ω),總體的損失函數(shù)如下所示:
其中,m 是所有屬于訓(xùn)練樣本集的像素總數(shù),而Loss(y(x),p(x))是單個像素x(x∈Ω)的損失函數(shù)。
1.3.3 U-Net 神經(jīng)網(wǎng)絡(luò)預(yù)測 在完成訓(xùn)練后, 本文使用訓(xùn)練得到的U-Net 神經(jīng)網(wǎng)絡(luò)對于測試圖像的所有像素點(diǎn)屬于血管的概率進(jìn)行預(yù)測。 預(yù)測值越接近1 表示像素點(diǎn)屬于血管的概率越大,預(yù)測值越接近0 表示像素點(diǎn)屬于背景的概率越大。
由于訓(xùn)練中采用了尺寸為48×48 的圖像塊,在測試中,也需要將測試圖像劃分為48×48 的圖像塊。 對每一張?jiān)紲y試圖像,本文使用步幅為2 像素的間隔進(jìn)行圖像塊采樣。 對于原始測試圖像中的同一個像素點(diǎn),將多次出現(xiàn)在不同采樣塊的不同位置;每個采樣圖像塊中分別得到的同一個像素點(diǎn)的預(yù)測值,再將同一個像素點(diǎn)的多個預(yù)測值求平均作為該像素點(diǎn)的最終預(yù)測值,以此減輕采樣位置的差異對于預(yù)測結(jié)果的影響。
原始測試圖像和U-Net 神經(jīng)網(wǎng)絡(luò)預(yù)測得到的概率圖像如圖5 所示。
圖5 原始測試圖像與U-Net 的預(yù)測結(jié)果
1.4.1 閾值分割 通過U-Net 神經(jīng)網(wǎng)絡(luò)預(yù)測,可以得到測試圖像所有像素點(diǎn)屬于血管的概率預(yù)測值,該預(yù)測值取值為0 到1 之間,預(yù)測值越接近1 表示像素點(diǎn)屬于血管的概率越大。
本文采用閾值分割方法將每個像素點(diǎn)屬于血管的概率預(yù)測值轉(zhuǎn)化為像素值是否屬于血管的分類標(biāo)簽。 具體計(jì)算公式如下:
其中,PredictionMap(x)表示每個像素點(diǎn)x 屬于血管的概率預(yù)測值,T 是分割的閾值,本文中設(shè)置T=0.5。而seg(x)表示閾值分割的結(jié)果,seg(x)=1 表示像素x 為血管點(diǎn);而seg(x)=0 表示像素x 為背景點(diǎn)。
閾值分割的結(jié)果如圖6(a)所示。
圖6 閾值分割與后處理結(jié)果
1.4.2 后處理 在眼底圖像中,許多局部區(qū)域的對比度很低,細(xì)小的血管非常不清晰,因此,即使借助于U-Net 神經(jīng)網(wǎng)絡(luò),許多血管尤其是細(xì)小血管的分割也是極其困難的。 表現(xiàn)在閾值分割結(jié)果上,就是分割出的血管有很多斷裂的情況。 為解決這一問題,本文在閾值分割的基礎(chǔ)上,引入閉運(yùn)算作為后處理,從而將血管分割結(jié)果中出現(xiàn)的斷裂處進(jìn)行融合。
后處理的結(jié)果如圖6(b)所示。 直接對比閾值分割結(jié)果與后處理結(jié)果,兩者差異不明顯;但在“2.4”的實(shí)驗(yàn)分析中,通過對一些測試圖像的閾值分割結(jié)果與后處理結(jié)果進(jìn)行局部放大,可明顯觀察到后處理結(jié)果相對于閾值分割結(jié)果有所改進(jìn)。
本文所有實(shí)驗(yàn)均運(yùn)行于筆記本計(jì)算機(jī),該計(jì)算機(jī)配置了型號為英特爾酷睿i7-9750H、主頻為2.60 GHz的CPU,并配置了16 GB RAM 和6GB型號為NVIDIA GeForce GTX 1660Ti 的GPU。 該計(jì)算機(jī)所使用的操作系統(tǒng)為64 位Win10。本文算法實(shí)現(xiàn)所使用的編程語言為python,用到的第三方庫主要包括TensorFlow、Keras、sklearn、numpy、opencv、pywt 等。本 文實(shí)驗(yàn)所用到的眼底圖像數(shù)據(jù)集為DRIVE 數(shù)據(jù)集,該數(shù)據(jù)集的介紹在“1.1.1”。
本文用來對算法性能進(jìn)行評價(jià)與度量的主要指 標(biāo) 包 括:準(zhǔn) 確 率(Acc)、特 指 度(Spe)、靈 敏 度(Sen)、精度(Pre)、F1 值與ROC 曲線的AUC 指標(biāo)。上述評價(jià)指標(biāo)的定義如下:
其中,TP 表示被模型正確預(yù)測的正樣本數(shù);FP表示被模型錯誤預(yù)測為正樣本的負(fù)樣本數(shù);FN 表示被模型錯誤預(yù)測為負(fù)樣本的正樣本數(shù);TN 表示被模型正確預(yù)測的負(fù)樣本數(shù)。 在本文實(shí)驗(yàn)中,正樣本是指對應(yīng)血管的像素點(diǎn);負(fù)樣本是指對應(yīng)背景的像素點(diǎn)。
Acc、Spe、Sen、Pre、F1 值,是從不同角度衡量分類模型的性能,上述指標(biāo)的取值范圍都在0 到1 之間,取值越接近1,說明模型性能越好。 ROC 曲線是接受者操作特征曲線,ROC 曲線下方的面積,簡稱為AUC 指標(biāo),可以綜合地評價(jià)模型的平均性能。 AUC指標(biāo)的取值范圍也在0 到1 之間,取值越接近1,說明模型性能越好。
為分析本文所使用的小波系數(shù)圖像對于分割算法性能的影響,本文在其他實(shí)驗(yàn)設(shè)置完全相同的情況下,對比分析了不加入小波系數(shù)和加入小波系數(shù)時,血管分割結(jié)果的性能差異,如表1 所示。 實(shí)驗(yàn)結(jié)果顯示,從Acc、Spe、Pre、F1 值、AUC 指標(biāo)等5 個方面比較,加入小波系數(shù)的結(jié)果均優(yōu)于不加入小波系數(shù)的結(jié)果;唯一在Sen 指標(biāo)上,加入小波系數(shù)的結(jié)果略差于不加入小波系數(shù)的結(jié)果。綜合而言,本文所使用的小波系數(shù)對分割結(jié)果具有一定的提升作用。
表1 不加入小波系數(shù)和加入小波系數(shù)的性能比較
分析對比閾值分割結(jié)果與后處理結(jié)果,從圖像全局觀察來看,兩者不明顯。 為此,本文將一些測試圖像的閾值分割結(jié)果與后處理結(jié)果進(jìn)行了局部放大和對比分析。 閾值分割結(jié)果與后處理結(jié)果的局部放大圖像如圖7 所示。 其中,列(a)為閾值分割結(jié)果局部放大圖,列(b)為后處理結(jié)果局部放大圖。通過對于細(xì)小血管所處局部圖像進(jìn)行放大,可以明顯觀察到,引入閉運(yùn)算作為后處理所得到的分割結(jié)果中,原先斷裂的細(xì)小血管實(shí)現(xiàn)了融合。
圖7 閾值分割與后處理局部放大圖
根據(jù)現(xiàn)有眼底圖像血管分割算法所普遍采用的評價(jià)指標(biāo),從Acc、Spe、Sen、ROC 曲線的AUC 指標(biāo)4 個方面對本文算法和現(xiàn)有算法進(jìn)行性能比較,如表2 所示。 本文算法分割結(jié)果的ROC 曲線如圖8 所示。實(shí)驗(yàn)結(jié)果顯示,本文算法均超過或者不弱于現(xiàn)有的眼底圖像分割算法。
表2 本文算法與現(xiàn)有算法性能比較
圖8 本文算法分割結(jié)果的ROC 曲線
需要說明的是,本文算法為有監(jiān)督的分割方法,需要將數(shù)據(jù)集中的原始圖像劃分為訓(xùn)練圖像和測試圖像。本文采用DRIVE 數(shù)據(jù)集的發(fā)布者所給出的劃分,將DRIVE 數(shù)據(jù)集中的40 張?jiān)紙D像劃分為20張訓(xùn)練圖像和20 張測試圖像。 此外,文獻(xiàn)[3]、文獻(xiàn)[8]、文獻(xiàn)[9]、文獻(xiàn)[7]、文獻(xiàn)[11]、文獻(xiàn)[13]、文獻(xiàn)[14]、文獻(xiàn)[15]的算法也都是有監(jiān)督的分割方法,上述論文中均是采用相同的劃分方法,將DRIVE 數(shù)據(jù)集中的40 張?jiān)紙D像劃分為20 張訓(xùn)練圖像和20 張測試圖像。
本文算法所得到的眼底圖像血管分割結(jié)果如圖9 所示,其中列(a)為原始眼底圖像,列(b)為本文算法得到的最終分割結(jié)果。
針對中醫(yī)現(xiàn)代目診的一個重要研究內(nèi)容,即眼底血管分析,本文提出了一種基于小波變換和UNet 的眼底圖像血管分割算法。 該算法主要通過數(shù)據(jù)增廣與預(yù)處理、小波系數(shù)圖像獲取、U-Net 神經(jīng)網(wǎng)絡(luò)訓(xùn)練與預(yù)測、閾值分割與后處理等步驟完成眼底血管的分割。本文從不同角度對本文算法進(jìn)行了性能分析,實(shí)驗(yàn)結(jié)果顯示,本文所使用的小波系數(shù)對分割結(jié)果具有一定的提升作用,并且本文算法超過或者不弱于現(xiàn)有的眼底圖像分割算法。
綜上所述,本文提出的眼底圖像血管分割算法能得到滿意的分割結(jié)果,在中醫(yī)現(xiàn)代目診中具有潛在的應(yīng)用價(jià)值。
湖南中醫(yī)藥大學(xué)學(xué)報(bào)2022年12期