1. 程式人生 > >水平集——那些我膜拜過的牛人2

水平集——那些我膜拜過的牛人2

本篇是迄今為止數學味最濃的,主要用於介紹一個方法以及一個牛人李春明。又來一個明(上次是何凱明),要是中國的小明都這麼厲害就了不得了。

代表文章:《Level set evolution without re-initialization》,《Minimization of Region-Scalable Fitting Energy for Image Segmentation》,個人主頁:http://engr.uconn.edu/~cmli/第二篇文章獲得2013年IEEE訊號處理學會最佳論文獎(IEEE Signal Processing Society Best Paper Award),

這個獎每年評選過去五年期間影響力大的幾篇文章,可見演算法需要經過相當長時間的考驗才能被評委會認可,當年同獲此殊榮的只有五篇文章。

李的最大貢獻,是提出了無需重新初始化的水平集懲罰因子區域性能量模型。要講清楚這個問題,說了話長,但今天時間有限,又要簡短說明。

首先,必須搞清楚什麼是水平集?這個很有難度,我相信大部分人都從未聽過,就算是搞影象搞機器學習的。

1 什麼是水平集?

水平集(LevelSet)是一種影象分割方法,就像閾值法(threshold),分水嶺(watershed),圖割演算法(GraphCut)一樣,只不過它主要用於醫學影象分割。另外,它是一種基於能量泛函的影象分割方法,即它把影象分割的問題,轉換為了最小化一個能量函式的問題(

聽不懂沒關係)。

其實,要想理解水平集演算法,應該先從snake以及曲線演化理論講起。但是,那樣又增加了本文的工作量,對於在手機上浮躁地翻開文章的我們來說,實在不是個明智之舉。

所以咱們先上一個另外的概念,等高線!學過初中地理的都知道等高線是什麼吧?

看下面的曲面,紅色的虛線就是一條等高線。

1

水平集的演算法,最早上起源於物理學,是OSher和Sethian為了解決遵循熱力學方程下火苗外形的變換過程,因為該演化過程是非常複雜的,具有高動態性和拓撲結構任意變換的屬性,無法用帶引數的數學表示式描述曲線或者曲面,現實生活中我們遇到的絕大多數實際問題也是沒有精確的數學表示式的。

那麼水平集演算法的

核心思想是什麼嗯?那就是將要研究的問題,看做是更高一維空間的函式(也就是水平集函式)的零水平集。因此,當我們要追蹤某一曲線(曲面)的演化過程,實際上就等價於追蹤更高一維曲面的演化過程。

2

如上圖1至2的演化過程,如果對紅色曲線建立一個隨時間而變化的模型,是很困難的,因為發生了拓撲結構變化(一條曲線變成了兩條),但是如果只是對藍色的曲面建立隨時間變化的過程,則是可行的,而紅色曲線就是取其Z=0的水平集

數學好的人有沒有覺得眼熟?實際上,這就是隱函式的思想。

(1)y = f(x)

的等價寫法就是

(2)Φ(x,y) = y - f(x)

Φ(x,y) = 0

當無法顯式寫出x為自變數的函式y,但是可以得到y與x的某種關係時,就能通過另外一種方法來表達,圓就是一個典型的例子,它的方程如下。

x2+y2=r2

非要寫出y=f(x)是這樣的:


這還只是最簡單的圓,表示式既不優美也不好理解。

好了,那採用隱函式怎麼描述剛才的曲線呢?

假設曲線為C,它是隨時間變化的,那麼曲面(也就是水平集函式)的描述式如下:

φ(C(t),t)=0

偏微分求解後就是一個如下的式子


給φ一個初始值,它就可以在F的作用下進行演化,然後令其等於0,就得到了C,原理何其明朗!

如此一來,最關鍵的問題就是求取F,也就是演化函式,這就是水平集方法的核心思想。當然實際上沒有那麼簡單了,不過搞懂戰略思想是最重要的一步。

2 為什麼要講水平集?

先給大家看幾個資料吧。

世界衛生組織下屬的官方癌症機構國際癌症研究中心(IARC)釋出《2014年世界癌症報告》,參與編撰的有來自40多國的250多位科學家,對全球180多個國家的28種癌症的總體情況和流行趨勢進行了全面的描述和分析,報告的資料基於2012年的統計結果。

根據報告統計資料顯示,在2012年,全球新增癌症病例達到1400多萬例,並預計在未來20年達到每年2200萬的水平,同期癌症死亡人數也將從每年820萬飆升至1300萬,全球癌症負擔目前正在以驚人的速度不斷加重。

那中國又如何呢?

2012年,全球新病例有一半發生在亞洲,其中大部分發生在中國,居全球首位。中國新增307萬癌症患者並造成約220萬人死亡。每10萬人中約250人,全國每分鐘有6人被診斷為癌症,人一生患惡性腫瘤的概率為22%(74歲),由於中國龐大的人口基數,使得中國成為第一癌症大國並不意外。其中肺癌是最普遍和最致命的癌症,2012年約新增180萬患者並導致159萬人死亡。其中中國約佔此類病例的1/3以上。專家表示,吸菸、長期遭受空氣汙染和職業中接觸致癌物,是增大(中國人)患肺癌風險的主要因素。你可能會說,有病就去治嘛,有什麼問題。

問題是!

一方面逐年遞增大量的病例,另一方面國內的醫療資源分佈非常不均勻來北京看一次病就知道了,醫院的資源是多麼的緊缺。去年北京市醫療機構的總診療人次是2.19億,其中近一半是外地患者到北京來就診,靠醫生手動地診斷已經滿足不了如此多的患者。另一方面,隨著生活水平提升很多病人需要個性化的治療(不差錢),這需要更智慧的醫療診斷系統來追蹤病人的病情發展,而目前的應用仍然不能令人滿意,很大程度上是因為醫療影象處理的水平精度還不夠。醫學影象處理結果不能OK就行了,人命關天。漏判一個腫瘤,誤判一個腫瘤,都是災難性的。

醫學影象處理包括很多方面,此處只講分割。影象分割是底層的操作,也是影象處理裡非常關鍵與基本的技術,它主要用於提取病變組織以便臨床治療定時追蹤腫瘤細胞的大小,位置,生長狀態,從而瞭解和預測病情的發展,以便進行治療。

影象分割方法有很多,為什麼偏偏要講水平集

這是因為醫學影象不同於一般的影象,它有自己的特點。

(1) 對比度低。由於醫學影象成像原理多樣導致影響其影象質量的原因各不相同,而且醫學影象的獲取往往是借鑑間接的手段,如顯影技術或者磁場效應,而非其他自然影象的獲取,不可避免地導致獲取的影象對比度與信噪比低。尤其是MRI影象中不可避免存在的灰度偏移場,CT影象中的部分容積效應,對醫學影象演算法的魯棒性提出了較大的挑戰。

(2) 個體差異明顯。這一方面是由於各人的身體結構存在著差異性,導致即使對於相同的器官組織,相應的影象也可能存在較大的差異。另一方面是由於不可預知的病灶區域可能破壞了組織影象的完整性,對演算法的通用效能提出了更大的挑戰。

下面只上幾張比較中規中矩的腫瘤影象。

上面是一些典型的腦腫瘤圖,圖中的白塊就是腫瘤。為了讓大家看的更直觀,特地選出來一些比較好分割的影象,但是也並不是什麼方法都能分割出來的,就我個人知識而言,不進行任何預處理,沒有一種方法可以自動地直接將這些腫瘤都給分割出來。不信可以去問問周邊搞影象的人,如果有,請務必告訴我。

下面是我的分割結果,算不上完全自動,但是也是基本上不需要監督。(仔細看腫瘤周圍疊加的輪廓,就是分割的結果)

用到的方法就是水平集。

3 Why李春明

接下來才是最重要的,為什麼要致敬李春明。

在水平集方法之前,有個snake方法,它也是基於能量泛函的方法。核心思想就是,首先在感興趣區域的附近給出一條初始曲線,接下來在曲線固有內力(控制曲線的彎曲和拉伸)和影象外力(控制收斂到區域性特徵)的作用下收斂到目標的邊界輪廓,再具體的公式就不想細說了,因為一兩句話說不清楚

它存在著很大的問題,也就是前面第一部分提到的,要將曲線進行引數化,這是個非常困難的問題,而且它還不能處理影象曲線的拓撲變換,所以才有了水平集的出場。

早期的水平集方法是邊緣型的,對噪聲非常敏感,而醫學影象退化(含噪聲,對比度低)非常厲害,所以應用很侷限。後來Chan和Vese率先提出了簡化的二值CV模型,通過加入曲線的長度項和麵積項作為曲線演化的平滑約束項,獲得能量函式如下。

接下來只有兩個公式,儘管不寫公式可能說不清楚這個問題,但我的最終目的是引導大家對此感興趣,而不是用公式來嚇大家。

上面的能量函式,就對應了影象分割的問題。使它最小化的曲線C,就是我們分割目標的輪廓,而且它能保證結果一定是光滑的,封閉的,其他的方法保證不了這一點,至少無法直接保證。

這就是水平集演算法最大的好處,得到的結果曲線是處處可導的。

好是好,然而該方法是一個能量泛函最小化問題,經典解法就是最小梯度法,然後離散化按一定步長進行迭代直至收斂。在不斷迭代的過程中,等高線(也就是零水平集)會變得不再光滑,如果不進行調整,就是使得演化過程越來越偏離正確結果。於是在很長一段時間裡,就是各種重新求解水平集函式來約束其光滑的方法,它們都有一個特點,計算量非常大!再優化,也無法達到線性的複雜度。本來水平集方法演化就慢,這樣一來就更加限制了其發展,而且每次迭代完後重新計算水平集的方法還無法保證精度。

在臨床治療中每天產生大量的樣本,如果處理速度太慢是不可接受的。

改變的發生,似乎就是《Level set evolution without re-initialization》的發表。

當然,他乾的有影響的不止這一件事,不過這是開始。一言以敝之,就是在原始的方程中添加了下面的二階式子,作為懲罰項。

它的微分如下:

1-1/|φ|被稱為擴散率函式,當水平集函式梯度大於1時,擴散率大於0,懲罰項起正向擴散作用,使得水平集函式更加光滑,從而減小梯度;反之使其增大。總之,它約束了水平集函式的梯度偏離1的程度,而當水平集函式的梯度能保持1時,對應的零水平集,也就是我們的分割輪廓是光滑處處連續可導的。後來李進一步改善了該運算元,使得水平集函式在零水平集附近的梯度為1,而在遠離零水平集的附近為0。當然也有人基於此方法的思想,採用了更加高階的規整化方案。

好了,核心思想是什麼?

那就是,如果曲線演化速度太快了,就讓它慢一點,如果慢了,就快一點。它的存在,能在很大程度上保證零水平集曲線是光滑的。水平集函式φ不光滑的地方,φ就會大於1,從而使得P很大,對減小能量造成不利的影響。所以P是一個懲罰項,要想能量最小,作為它的求和項中一項的P也應該小,對應的也就是曲線光滑,不知道這樣理解是不是簡單一些?

有了這一項後,就只需要考慮以一定的步長進行離散迭代,而不需要每迭代一次就對水平集函式Φ進行一次複雜的計算了。

這堪稱是里程碑式的研究成果,後來的水平集方法相關的論文很多都要在此思想上進行研究。

之所以要講數學味挺濃的東西,一方面是因為影象處理演算法本來最核心的就是數學,另一方面也是為了藉此引出懲罰這個概念。因為,幾乎在所有數學優化問題中,它都隱約可見。不掌握這個思想,接下來就舉步維艱!

儘管已經儘量避免數學公式,試圖按自己的語言把一些影象演算法講的淺顯易懂,但是自己也還需要努力。而數學,我深刻感覺到學得再好也不為過,自己還非常非常欠缺。

本想插入兩個小視訊讓大家直觀地感受一下水平集方法的過程,無奈微信做不到,公式編輯也不好。提供一個demo如下:

https://math.berkeley.edu/~sethian/2006/Applications/Medical_Imaging/artery.html

轉載自:水平集