姜濤,林仲志,吳水才,王笑茹,林沅平
1. 北京工業大學 生命科學與生物工程學院,北京 100124;2. 長庚大學 資訊工程系,臺灣 桃園 33302
肝癌作為全球發病率較高的惡性腫瘤之一,正嚴重威脅我國人民的生命和健康[1]。據報道,原發性肝癌已成為我國第四位常見的惡性腫瘤以及第三位的腫瘤致死原因,每年新增病例約占全球一半以上[2],有效地治療肝癌亦成為亟待解決的重大社會問題。隨著醫學影像技術的發展,尤其是計算機斷層掃描(Computed Tomography,CT)技術在肝癌治療中的廣泛應用,對醫生進行早期診斷、術前規劃有很大幫助。從腹部CT 圖像中準確地分割出肝臟是肝癌計算機輔助診斷、手術規劃、醫學影像導航的第一步,也是極其重要的一步。然而,由于肝臟形狀的高度個體差異、肝臟內部灰度不均勻、與胃等鄰近器官的邊界較弱(圖1)、以及與鄰近器官的灰度差異小等因素,使得肝臟分割成為一項具有挑戰性的任務,吸引了大量研究人員的關注。

圖1 肝臟的CT影像結構圖
在傳統臨床應用中,主要依賴于經驗豐富的專業醫師從CT 影像中進行手工肝臟分割,但這種方法效率十分低,需要消耗大量時間和精力,醫師的主觀因素對分割結果會產生較大的影響。為了提高肝臟分割的效率和精度,引入計算機圖像處理技術,輔助醫師分割肝臟CT 圖像是必然的趨勢。目前常用的肝臟分割方法[3]可分為以下兩類:半自動分割和全自動分割。半自動肝臟分割方法常常需要人為進行種子點的選取等操作,分割效率較低。全自動分割過程中不需要人為的干預,具有較高的分割效率。Luo 等[4]根據肝臟自動算法中使用的圖像特征,將肝臟分割方法分為以下三類:基于灰度的方法、基于結構的方法和基于紋理的方法。Punia 等[5]回顧了用于肝臟圖像自動分割的機器學習方法,主要分為:基于神經網絡的方法、基于支持向量機的方法、基于聚類的方法和組合方法。
Zhou 等[6]提出了一種非對比X 線軀干CT 圖像中肝臟區域全自動分割的概率模型,利用概率模型估算空間位置計算出肝臟的分布概率,實現肝臟的自動分割,但分割精度不夠理想。這些傳統的分割方法結果好壞很大程度上依賴于配準的過程,由于肝臟較大的形狀變化,使得配準難度變高,對結果影響較大。目前深度學習在醫學圖像分割領域的應用受到了越來越多研究者的關注,Jin 等[7]以3D U-Net 網絡[8]為基礎,提出一種提出了一種三維混合殘差注意感知分割方法RA-UNet,能夠精確分割出三維的肝臟和肝腫瘤CT 圖像,但需要很高的硬件條件和大量訓練時間和訓練樣本。本文根據肝臟CT 圖像中的分割難題,提出了一種基于卷積神經網絡(Convolutional Neural Network,CNN)和簡單線性迭代聚類(Simple Linear Iterative Cluster,SLIC)超像素算法的肝臟分割方法。首先利用CNN 對CT 圖像中的肝臟部位進行檢測,以獲取其大致區域及坐標,再利用SLIC 對圖像進行分割,獲得初步的肝臟分割結果,最后再通過腐蝕、膨脹、中值濾波等進行后處理,得到更加準確的結果。
圖2 為本文方法的整體流程。主要由兩個階段組成,一個是以卷積神經網絡為基礎的目標檢測;另一個是以SLIC 為基礎的圖像分割。首先原始CT 圖像經過預處理,將DICOM 格式轉換成JPG 格式,送入CNN 目標檢測模型中,產生目標檢測框,獲取大致的肝臟區域坐標,為下一階段做準備。在圖像分割階段,原始CT 圖像經過SLIC處理之后會產生很多小的像素塊,即超像素。屬于肝臟區域的超像素能夠較好保留肝臟的邊緣特征,以及有相似的像素值,故設置一個閾值,組合相似超像素塊,得到整體的肝臟區域。為了將肝臟區域從原圖中分割出來,利用上一階段獲取的肝臟區域坐標,查詢在得到整體的肝臟區域之后此坐標區域內的像素,找出出現頻率最高的像素值,此像素值就是肝臟區域的像素值,假設其為a。因此在以CNN 為基礎的目標檢測階段中,得到的檢測框只需符合框內大部分區域是肝臟即可,無須特別精確的包圍整個肝臟。之后在得到整體的肝臟區域基礎上,將其中像素值為a 的都設為1,其余的像素值都設為0,得到一張只有肝臟的二值圖像,將肝臟區域從原圖中分割出來。產生的分割結果有一些孔洞和邊緣毛刺,最后做一些腐蝕、中值濾波等后處理,使效果更好。

圖2 方法的整體結構圖
卷積神經網絡是一種深層前饋型神經網絡常用于圖像領域的監督學習問題,比如計算機視覺、圖像識別、目標檢測等。1998 年,Lecun 等[9]提出了最初的CNN 模型,并在之后進行了完善,在Krizhevsky 等[10]取得2012 年ImageNet 競賽冠軍之后,CNN 在圖像識別領域幾乎成為深度學習的代名詞,在其他領域中也有越來越多的應用。卷積神經網絡主要由卷積層、池化層和全連接層組成,一個卷積神經網絡中有一個或多個卷積層,通常每個卷積層后都要跟隨一個池化層,最后連接一個或多個全連接層。

圖3 SSD網絡模型的結構
SSD(Single Shot MultiBox Detector) 是Liu 等[11]在ECCV 2016 上提出的一種基于CNN 的目標檢測算法,是目前主要的檢測框架之一,其模型結構見圖3。SSD 網絡總體由兩部分組成,前部分(前五層)主要采用卷積網絡初步提取圖像特征,以VGG16 網絡結構作為基礎,包括輸入層、卷積層、池化層。后部分將卷積層代替原始全連接層,卷積層逐層遞減,以多尺度滑動窗口特征提取層級結構為主體。分別將VGG16 的全連接層fc6 和fc7 轉換成33 卷積層conv6 和11 卷積層conv7,同時將池化層pool5 由原來的stride=2 的22 變 成stride=1 的33。然 后 移 除dropout 層和fc8 層,并新增一系列卷積層。
SSD 同樣采用回歸方法獲取目標對象位置和類別,不同的是SSD 使用的是目標對象位置周圍的特征而非全圖的特征。SSD 各卷積層將特征圖分割為若干相同大小的網格,稱為feature map cell,對每個網格設定一系列固定大小的包圍盒,稱為default boxes。然后分別預測default boxes 的偏移以及類別得分,最終通過非極大值抑制方法得到檢測結果。default boxes 的作用類似于Faster R-CNN 的anchor機制,不同的是default boxes 作用于不同層次的多個特征圖上,這樣可以利用多層的特征以最佳尺度匹配目標對象的實際區域。
SSD 模型要對目標的位置和類別同時進行預測,故其損失函數L 包括定位損失函數Lloc和置信度損失函數Lconf定義為:

式中,N 代表匹配完整物體框的默認框數目;α 為權值,初始值為1;x 為默認框與物體框的匹配結果;c 為類別的置信度;l 為預測結果的位置信息;g 為物體框個數。
在圖像中由一系列位置相鄰且顏色、亮度、紋理等特征相似的像素點組成的小區域,作為一個整體來處理,這個整體就稱之為超像素。超像素大多保留了進一步進行圖像分割的有效信息,且一般不會破壞圖像中物體的邊界信息。
超像素生成的算法大致可以分成基于圖論的方法和基于梯度下降的方法,SLIC 就是一種基于梯度的超像素分割算法,由Achanta 等[12]提出。Wu 等[13]曾提出基于SLIC超像素的圖像分割方法,實現肝臟在三維CT 圖像上的自動分割。SLIC 算法主要思想將圖像從三維RGB 顏色空間轉移到三維CIELAB 顏色坐標空間。每個像素由一個5 維向量(l,a,b,x,y)表示,其中(l,a,b)為像素LAB 的RGB 顏色,(x,y)為像素的圖像坐標。兩個像素(xi,yi)和(xj,yj)的相似性由距離Dij表示。計算公式如下:

式中,s 為超像素的面積,其與超像素塊中的像素數量相關;m 是超像素的聚合度。我們稱之為種子點的初始聚類,是通過均勻地劃分圖像而生成的。然后,通過梯度上升方法更新超像素區域,直到它通過計算超像素邊界的不同兩側上的兩個像素之間的距離來收斂。
SLIC 主要優點如下:生成的超像素如同細胞一般緊湊整齊,鄰域特征比較容易表達。這樣基于像素的方法可以比較容易改造為基于超像素的方法,不僅可以分割彩色圖,也可以兼容分割灰度圖。需要設置的參數非常少,默認情況下只需要設置一個預分割的超像素的數量。相比其他的超像素分割方法,SLIC 在運行速度、生成超像素的緊湊度、輪廓保持方面都比較理想。
當SLIC 圖像分割階段處理完之后,產生的初步分割結果會有一些孔洞和邊緣毛刺。膨脹運算可以用來填補目標區域中某些空洞以及消除包含在目標區域中的小顆粒噪聲,腐蝕運算可以用來消除小且無意義的目標物。閉運算是對圖像進行先膨脹后腐蝕的操作,可以用來彌合較窄的間斷和細長的溝壑,消除物體間小的孔洞,填補輪廓線中的斷裂。中值濾波是一種非線性數字濾波器技術,經常用于去除圖像或者其他信號中的噪聲,是圖像處理中的一個常用步驟,它對于斑點噪聲和椒鹽噪聲來說尤其有用,保存邊緣的特性使它在不希望出現邊緣模糊的場合也很有用。
因此,本文采用膨脹、閉運算和腐蝕等形態學運算來處理填充其孔洞,最后經過中值濾波使圖像邊緣變得光滑,圖4 示出了整個后處理流程及相應結果。

圖4 后處理流程圖
本文采用公開數據集3DIRCADb(https://www.ircad.fr/research/3dircadb/)作為實驗數據集,該數據集中有20 套CT 掃描影像(共2821 張),其中10 位為女性檢查者,10位為男性檢查者,在20 位檢查者中75%患有肝癌。
硬件設備(操作系統:Windows 10 64 位;內存:16 G;GPU:AMD Radeon R9 M370X;CPU:Inter Core i7-4870HQ(非NVIDIA 顯卡,只能用CPU 訓練)。
軟件工具包括TensorFlow:1.9(CPU 版);Python:3.5.2(Anaconda 4.2.0);Tensorflow object detection API(https://github.com/tensorflow/models);LabelImg。
我們隨機挑選數據集的其中10 位病人的數據(共1374張CT 影像)作為訓練集,2 位病人的數據(共287 張CT 影像)作為測試集。我們主要運用的工具是谷歌的Tensorflow object detection API,是一個構建在TensorFlow 之上的可以簡化構建、訓練、部署目標檢測模型的開源框架,十分便于目標檢測的神經網絡訓練。
2.2.1 創建訓練/測試數據集
首先我們將所有的數據從DICOM 格式轉化成JPG 格式:肝臟的CT 值一般在40~70 之間,設定好窗位后進行歸一化處理。然后對12 位病人的數據進行人工標記,根據數據集提出的金標準標記出肝臟區域,使用的工具為LabelImg,如圖5 所示,其中紅色框區域就是手動標記的肝臟區域。標注完成后保存為同名的xml 文件,為標準的VOC 目標檢測數據集格式。最后調用API 庫中的數據格式轉化程序 create_pascal_tf_record.py,將數據集轉化為TFRecord 格式。

圖5 對肝臟區域進行標記
2.2.2 肝臟目標檢測
創建完訓練/測試數據集后,將其送入API 進行訓練,選擇的模型是SSD 網絡模型。實驗中設置初始學習率為0.004,衰減率為0.95,訓練步數設定為50000 步。使用CPU 作為訓練硬件平臺,隨著訓練迭代次數逐步增加,模型的損失函數L 的值逐漸減少,并趨于1,訓練完成后得到一個肝臟檢測的模型。當送入一張肝臟圖像至模型,就會得到該圖片的肝臟區域檢測框及其坐標,如圖6 所示,上下分別為不同切面層的肝臟CT 影像,左邊為原始輸入的肝臟圖像,中間紅色區域為肝臟區域的金標準,右邊綠色的框框就是我們檢測的肝臟區域的大致范圍,上面的數字表示模式判斷此區域為肝臟的概率。

圖6 目標檢測結果
2.2.3 肝臟圖像分割
最后進行基于SLIC 的圖像分割,實驗中設置SLIC 算法初始的種子點個數為2000,在設定閾值合并相似超像素塊時,選擇threshold 的值為25。在后處理階段,膨脹、腐蝕、閉運算等形態學處理的卷積核設置為1515 的矩陣,且所有元素都是1,中值濾波中濾波窗口尺寸設置為7。以上所有參數皆是在多次對比實驗中選擇的合理參數,此階段實驗中先手動設置肝臟區域以調整參數,然后將目標檢測階段和圖像分割階段整合在一起。圖7 是一張CT 圖像經過目標檢測后的肝臟分割結果,左邊黃色是區域是本文方法所產生的分割結果,中間紅色區域是數據集提供的金標準,右邊是二者疊加顯示,可以看出本文提出的方法進行肝臟分割的可行性和準確性。但是也有遇到錯誤分割的時候,如圖8 所示。紅色區域是肝臟的真實區域,黃色區域是我們的分割結果,由于在基于CNN 的目標檢測階段錯誤的識別了肝臟,導致了下一步在分割階段的錯誤分割。

圖7 實驗結果比較

圖8 錯誤分割的結果
本文采用標重合率DICE、體積重疊誤差VOE 和相對體積誤差RVD 評估指標[14-15]。定義肝臟分割結果的區域為A,期望分割結果為B,這三項指標定義如下。

在剩下的8 位病人的數據中,隨機挑選一位,將其CT 序列送入本文設計的分割模型中,根據之前提到的評估指標,得到的結果,見表1,我們的分割結果的DC 為0.951,VOE 為0.0917,RVD 為-0.018。在同其他一些方法比較的時候效果也得到一定的提升,其他三種方法也是對3DIRCADb 數據集進行分析處理,再次表明本文方法的可行性和準確性。

表1 不同方法的結果比較
本文提出了一種基于卷積神經網絡和SLIC 超像素算法的圖像分割方法,準確地分割了腹部CT 掃描影像中的肝臟區域。首先是通過基于卷積神經網絡的目標檢測模型,利用SSD 網絡結構,準確定位出肝臟的大致區域,并獲得其坐標。然后是通過基于SLIC 超像素算法的圖像分割模型,得到初步肝臟分割結果。最后經過一些形態學和中值濾波等處理對結果進一步優化。該方法將深度學習方法和傳統圖像分割方法相結合,同已經發表的一些方法比較,分割精度有所提高。
本文提出的方法也需要做出一定的改進:① 圖8 中由于基于卷積神經網絡的目標檢測未能檢測出一個CT 序列的每一張肝臟圖像,所以對這些圖像就無法進行分割,要對網絡結構進行進一步改進和優化;② 只訓練了一種數據集,為了進一步提高分割準確度,下一步要訓練更多的數據集;③ 現在很多三維的肝臟分割方法已經發表,以后需在二維的基礎上向三維的圖像分割進行改進。