第三章 Balloon Model為基礎的影像分割法
3.3 影像分割法
當snake 收斂之後,我們得到一個三角化的封閉網格結構,用於表現三維影像上欲 分割物體的表面輪廓,但並未將影像完成分割,因為單從網格結構的表面輪廓資訊無法 簡單迅速的判斷影像上的一個voxel 是否落在封閉的網格結構之內,所以必須要有一套 方法將Balloon Model 重建出來的物件影像輪廓與背景分割,這裡我們提出了一套根據 Model 的網格結構為判斷條件的區域成長法(Region Growing)來分割三維影像。以二維影 像為例【圖3-10】
【圖3-10】二維影像分割法示意圖
中間白點為初始的種子點(seed),紅色箭頭為區域內的點向外成長的四個方向,外圍黑 色輪廓線為Model 收斂後的輪廓,黑色點為位在輪廓上的點,藍色區域為成長中的區域。
在上圖【圖3-10】中,種子點會往四方尋找鄰近點,若該點不為邊界上的點(黑色點)則 將改點加入區域(藍色部分),直到鄰近點為輪廓邊界上的點停止,運用此區域成長法可 以順利將封閉的輪廓區域分割出來。而在三維影像上,因為欲分割的物體為封閉的三角 化網格區域,以此方法來尋找分割影像時,應判斷該voxel 是否落在 Model 的表面輪廓 之上(網格之上),若是則停止尋找鄰近點加入區域,否則繼續區域成長。所以,若能判 斷一個點是否落在Model 的表面輪廓(網格結構)上,以此為條件作區域成長,此區域成 長法能成功的將Model 的物件影像分割出來。
如何判斷一個voxel 是否落在 Model 的表面輪廓之上呢?這裡我們提出的方法如下:
定義Mesh={Meshi |i=0,1,2,...,n−1};n為snake上的網格個數,Plane(Meshi)為網格i上三頂
點所組成的平面方程式,distance[H, Plane(Meshi)]和distance(H, AB )分別為頂點H到
Plane(Meshi)和 AB 的距離,d1,d2為臨界值參數,Inside(Meshi,H)為點H與Meshi的判斷式,
若點H位在Meshi之內則回傳True,否則回傳False。
Inside_Object(H)
∀ 若distance[H, Plane(Mesh,i i)]≤d1 且滿足
{Inside(Meshi,H)為True或distance(H, AB )≤d2, AB為Meshi上的邊} 回傳False.
否則回傳True. (24)
若滿足上列條件式則判定頂點v落在Model的表面輪廓Meshi之上停止尋找鄰近點加入區 域。當點H與平面方程式Plane(Meshi)的距離小於臨界值d1時,則考慮Meshi上的三個頂點 A、B、C與點座標H之間的關係【圖 3-11】:
(a) (b)
【圖3-11】判斷選定的點是否在三角形內部
若點H位於三角形△ABC的內部,則 AHB∠ 、∠BHC、∠CHA都會小於180 度,否則,
這三個角度中會有一個角度大於 180 度,我們可以從構成這個角度鄰邊向量的外積求 得。以 AHB∠ 為例,計算HB向量和HA向量的外積HB×HA,如果(HB×HA)⋅N >0,N 為△ABC的法向量,則角度 AHB∠ 小於180 度。當三個角度 AHB∠ 、 、 都 小於 180 度,那麼點H位在三角形內,Inside(Mesh
∠BHC ∠CHA
i,H)回傳True。若Inside(Meshi,H)不為 True,則在考慮點H與△ABC上的邊 AB、BC、CA的距離,若距離小於臨界值d2則判定 點H位在△ABC的邊上。詳細分割演算法如下:
參數定義:
Vertex:頂點的資料結構。
Inside_Object((Vertex)v):定義如(24)。
Neighbor((Vertex)v):回傳頂點 v 尚未做判斷的鄰近點。
Mark((Vertex)v):更改頂點 v 在分割影像中的灰階值 Queue:儲存頂點的佇列提供下列運算
add((Vertex)v):將頂點 v 加入佇列當中。
front():回傳佇列第一個元素並將其移除佇列。
empty():當佇列為空佇列時回傳 True,反之回傳 False。
I. Initial a seed (Vertex)v.
Queue.add(v).
II. Do {
if [ Inside_Object(v = Queue.front())] do Queue.add(Neighbor(v));
Mark(Neighbor(v))=100;
else
On_Object case:
Mark(v) = 255;
Default case: do nothing;
}while(Queue.empty() not True)
根據上述的演算法,初始一個種子點判斷該點是否落在 Model 的網格之上,若成立 則該點停止尋找鄰近點加入區域的動作並設置改點灰階值為 255(分割影像的邊界點),
反之,將該點灰階值設為100 繼續區域成長,直到區域內所有的邊界點都落在網格之上,
區域成長停止。利用此方法可以成功的分割出封閉的網格結構,達到我們分割三維影像 的目的。
第四章
實驗結果
本章將以第三章提出的Balloon Model 做下列各種三維影像資料的實驗,包括標準 果蠅的MushroomBody 模型的重建、果蠅神經的分割以及對實驗過後的果蠅腦細胞的分 割,實驗結果證明,在這些資料當中都得到了良好的物體幾何模型跟分割結果,為一具 有方便、簡單、實用的三維物體分割演算法。
演算法是以V.C++實作,用 CGAL(Computational Geometry Algorithms Library)[3]
作為幾何模型的資料結構,一套專門用於解決計算幾何上問題的C++函式庫,並以 OpenGL 將幾何網格繪出,用到的實驗參數有α、β 和γ ,分別是Model 的 elastic parameter、curvature parameter 和 inflation parameter。
4.1 果蠅 MushroomBody 幾何模型重建
標準MushroomBody 為一組 256×256×132 經過分割處理的 volume data,比較用傳 統的Marching cube【圖 4-1】演算法以及我們提出的 Balloon Model【圖 4-2】做幾何模
型的重建。
【圖4-1】用 Marching cube 重建標準 MushroomBody 的結果 (總共 104384 個三角形)
【圖 4-2】用 Balloon Model 重建標準 MushroomBody 的結果之一
初始輪廓的位置在(46,66,110),由圖(a)至(h)分別為經過 1、10、30、70、130、175、
200、260 次 iteration 後的 Model 輪廓,(h)為 Model 收斂後的結果共 1946 個三角形,
其中實驗參數α=0.5,β =2.0,γ =6.5。
考慮 Marching cube 與 Balloon Model 的實驗結果可以發現,【圖 4-2】的幾何模 型結構只有【圖4-1】的左半部,這是因為 Balloon Model 具有內在能量的特性,所 以當 Model 從左半部的初始輪廓成長至與 MushroomBody 右半部的連接觸時【圖 4-3】,內在能量將抗拒控制點向外膨脹,所以 Model 收斂於 MushroomBody 的左半 部,並不會將整顆MushroomBody 重建出來。
【圖4-3】在 volume data 上 MushroomBody 左右的連接處 (紅色圓圈處)
由上圖可知,MushroomBody 的左右半部是互相連接的,但是受到 Model 內在 能量的影響,幾何模型並不會由連接處穿越至右半部,只會將左半部分重建完成。
在同一組三維影像上,根據不同的實驗需求我們可能需要重建不同的幾何模型(如
【圖 4-2】或【圖 4-4】),我們可以透過參數的調整(α、β、γ )或 Model 網格的精 細度(藉由加細分割的條件控制)來達到控制最後的幾何模型結果,讓每次的實驗皆能 順利的分割出我們欲分割的三維物件。我們試著用另一組實驗參數對此組影像重 建,α=0.7,β =3.0,γ =6.5,【圖4-4】是收斂後的結果
【圖4-4】重建標準 MushroomBody 的結果之二
【圖4-5】果蠅神經影像的三維幾何模型 (紅色方框處是我們想要分割的球狀神經)
【圖4-6】果蠅神經的幾何模型
由左至右分別為經過1、50、100、166 次 iteration 後的實驗結果,Model 在經過 366 次 的iteration 後收斂。
【圖4-7】左邊為影像分割 後的結果,邊界輪廓以灰階 值255 的亮點表示,右邊為 原始影像的對照。
由上至下,分別為第 91、93、95、98 和 99 片影 像上的分割結果。
可以看到在91、93、
95 片影像當中,Model 因為 受到內在能量的控制,下方 互相連結的神經部分不會 被分割出來。
【圖4-7】果蠅神經影像上的分割結果
從【圖 4-5】影像的幾何網格繪出上可以清楚的看到,我們欲分割的球狀神經部分,
經由一條細長的神經與下方的神經相連接,若是用傳統區域成長法將無法只對我們感興 趣的球狀神經做分割,勢必會沿著相連接的神經分割至別的球狀神經。而以我們提出的
Balloon Model 做影像的分割,不僅可以得到物體的幾何模型【圖 4-6】,同時在影像分 割的結果上【圖4-7】因為受到 Model 內在能量的控制,可以將我們感興趣的球狀神經 部分分割出來,不會產生過度分割的情形。【圖4-8】、【圖 4-9】為另一組果蠅神經的 實驗結果,我們設置初始位置為(555,505,91)用相同的實驗參數,【圖 4-8】為模型最後 收斂的幾何結構,【圖4-9】為分割後的影像與原始影像的比較。
(a)沿 x 方向往-x 觀察 (b)沿 z 方向往-z 方向觀察 【圖 4-8】第二組資料 Model 收斂後的結果
(經過 266 次 iteration 後收斂)
上圖為模型收斂後的網格結構,(a)為觀察者沿 x 軸方向往-x 方向觀察的模型結果(b)為觀 察者沿 z 軸方向往-z軸方向觀察的模型結果,由網格模型可以觀察得知分割的神經為一 橢圓球體
【圖4-9】左邊為影像分割 後的結果,邊界輪廓以灰階 值255 的亮點表示,右邊為 原始影像的對照。
由上至下,分別為第 86、88、90、92 和 95 片影 像上的分割結果。
【圖 4-9】第二組資料影像上的分割結果
4.3 果蠅腦細胞分割
在這組影像中,我們要分割的影像是果蠅腦的細胞空洞。在之前的實驗當中,我 們所要分割的三維影像都是在影像當中灰階值相對明亮的區域,而這次的影像資料則是 要找出在影像當中灰階值較暗的空洞,為了提高影像分割結果的正確性,我們先對影像 做一些前處理讓空洞的區域變得更加的明顯。
實驗的影像是 1024 像素×1024 像素 16 片的共軛焦顯微鏡影像,先對影像做一次 negative 再對 negative 後的影像做一次半徑為 13~14 的 Match filter,前處理過後的影像 與原始影像的比較如【圖4-10】。
(a)原始影像 (b)前處理後的影像
【圖4-10】果蠅腦第八片影像上對影像做前處理前後的比較
由【圖 4-10】可觀察出在原始影像中白色圓圈標明處(A、B 及 C)有明顯的空洞,
在經過我們的前處理之後空洞變成灰階值高、亮度大的區域,接下來就可以開始對我們 想要分割的細胞空洞做幾何模型的重建。
Model 初始輪廓位置(724,871,8),實驗參數α =0.45,β =2.0,γ =6.5,經過 367 次 iteration 後 Model 收斂,得到的實驗結果如圖【圖 4-11】、【圖 4-12】所示。
(a)沿 x 方向往-x 觀察 (b)沿 z 方向往-z 方向觀察
【圖4-11】果蠅腦細胞空洞 Model 收斂後的結果 (367 次 iteration)
(a) (b) (c)
【圖4-12】果蠅腦細胞空洞影像上的分割結果
(a)列為影像分割後的結果,(b)列為經過前處理後的影像結果,(c)為原始影像上的對照,
邊界輪廓以灰階值255 的亮點表示,由上至下,分別為第 6、7、8、9 和 10 片影像上的 分割結果。
第五章 結論與未來研究方向
三維影像的分割法一直是一個很熱門的研究領域,但是因應不同的三維影像及影像
特徵,適用的影像分割法就不盡相同。在本論文中,提出了一種以Balloon Model 為基 礎的三維影像分割法,由能量參數的調整變化決定Model 幾何輪廓,再由 Model 的幾何 輪廓作為區域成長法分割的判斷資訊分割影像,我們將此方法運用在果蠅共軛焦顯微鏡 影像上,由使用者決定一初始輪廓位置(即欲分割的物體位置),經過 Balloon Model 能量 最佳化的過程,即可完成該物體的幾何輪廓模型及分割,為一具備方便性、彈性及實用 性的三維影像分割方式。
然而在實驗過程當中,我們發現仍然有許多可以改進的地方。首先,在網格碰撞的 處理上,我們雖然對鄰境網格做了相交的防護,但是對於一些較複雜的物體結構,例如 環狀結構或者中間有空洞的物體,我們提出的演算法並無法處理這種非鄰近網格碰撞的 情形,如何對網格的碰撞做偵測及預防將是未來研究的重點之一。另外,如何使我們的 程式更加的自動化?是否有一種自動化的初始輪廓設定方式可以根據影像的特徵自動
然而在實驗過程當中,我們發現仍然有許多可以改進的地方。首先,在網格碰撞的 處理上,我們雖然對鄰境網格做了相交的防護,但是對於一些較複雜的物體結構,例如 環狀結構或者中間有空洞的物體,我們提出的演算法並無法處理這種非鄰近網格碰撞的 情形,如何對網格的碰撞做偵測及預防將是未來研究的重點之一。另外,如何使我們的 程式更加的自動化?是否有一種自動化的初始輪廓設定方式可以根據影像的特徵自動