這篇基本上,是大概記錄一下,怎麼透過 DeVIDE 這套免費、OpenSource 的影像處理平台,將醫療影像的 Volume Data(CT、MRI …等等),透過找出 Isosurface(維基百科)、來建立出多邊形的 3D 模型,然後再輸出成 STL 檔,讓 3D 印表機可以用。
DeVIDE 這套軟體的官網是 http://www.cg.its.tudelft.nl/Projects/DeVIDE,Google 專案頁面是:http://code.google.com/p/devide/、下載頁面則是:http://code.google.com/p/devide/wiki/Downloads;目前最新版本是 v12.2.7,針對 Windows 平台有提供 32 位元和 64 位元的版本。
他執行起來後,主程式的介面會像下圖一樣:
他的基本操作邏輯,是根據自己的需求,把各種模族(module)做連結,建立出一個網路(Network)、完成自己要做的處理。在主介面的右側最大的空白區域,就是拿來畫這個圖的區域;而左側的「Module List」則就是所有可用的模組列表,可以透上方的搜尋框、或是分類選單,來快速地找到自己需要的模組。
在找到需要的模組後,只要把直接點兩下、或是拉到右邊,就可以把這個模組加到網路裡了;而在網路裡的每個模組,都會有一個以上的綠色的方塊,這些是用把模組之間做連結的控制點,上方的是輸入、下方的是輸出,只要把一個模組的輸出端點拉出一條線到另一個模組的輸入端點,就可以完成連結了
在使用上,一個輸出,也是可以對應到多個輸出的。右圖,就是把一組 TIFF 圖檔格式的 Volume Data,在讀取進來後、經過 doubleThreshold 和 contour 這兩個模組的處理、產生 3D 多邊形後、再透過 stlWRT 輸出成 STL 檔的一種網路圖。
而最下方的 slice3dVWR 則是用來做顯示、已確定自己的資料處理結果是否合適用的;他基本上支援多個輸入,也就代表它可以同時繪製多組資料。
當然,這邊的使用的模組,都是 Heresy 這邊的需求;像是以檔案讀取的部分來說,除了可以讀取 TIFF 外,他也有提供其他像是 JPEG、BMP 或是 DICOM 的讀取模組,可以根據自己的需要做更換。
在網路拉好後,用滑鼠在每個模組上點兩下,就可以開啟模組的設定視窗,然後就可以針對各模組進行設定。像是以第一個 TIFFReader 來說,開啟之後的設定對話框會像下左圖一樣。
由於這邊要讀取的「一疊」的 TIFF 圖檔,所以在設定上,基本上是先指定這一疊檔案的檔名的形式(File Pattern);在大部分的情況下,這類的檔案應該都是會用序列號來做檔名,所以這邊就可以透過「%04d」這類的形式,然後在指定開始的序號(First slice)以及結束的序號(Last slice),來讓他產生檔名。
像是在左圖所使用的「Resize3D_%04d.TIF」,就是代表序列號是四位數、不足會補 0;由於開始序號是「0」、結束序號是「573」,所以就代表他會去讀取 Resize3D_0000.TIF、Resize3D_0001.TIF、…、Resize3D_0573.TIF 這些檔案,來當作一組 volume data。
而由於這類的影像,礙於取像技術的限制,可能會在不同軸像有不同的解析度,所以可能會需要在「spacing」的欄位、設定單一個 voxel 在 X / Y / Z 三個軸向的比例。
在完成設定後,如果按下「OK」,就會把紀錄儲存下來;而如果是按下「Execute」,去執行整個網路;一般來說,是把所有模組都設定好後,再去按「Execute」就可以了。
接下來,「doubleThreshold」則是透過設定需要的資料的上下界,來做資料的選擇(下左圖);如果要選取的資料,只是「大於某個值」的型式的話,其實是可以省略「doubleThreshold」、直接使用「contour」的。
在「contour」的設定裡面相當當簡單,只要設定「ISO Value」,他就會去使用所有大於這個值的資料、來建立出 Isosurface 的多邊形模型。其中要注意的是,如果有使用 doubleThreshold 的話,他預設會把所有範圍內的值都改為 1,所以在 contour 的 ISO Value 的設定上,也要做對應的調整(例如,設定為 0.5)。
而如果有使用 「slice3dVWR 」來做預覽的話,這個時候應該就會看到,他的視窗裡面會有建立出來的多邊形模型了(下圖)。
如果覺得這邊看到的多邊形不滿意的話,就是要再回去調整前面的設定值,讓產生出來的多邊形、符合自己的需求。
而在多邊形確定符合需求的情況下,接下來就是可以透過設定「stlWRT」這個模組、指定要輸出的檔案名稱,完成 STL 模型檔的輸出了~
不過,在這邊也要注意,這樣直接輸出後的 STL 檔一般來說會相當大,如果要拿來做後續使用、其實是建議先做過簡化的處理的,不然,這個模型的多邊形數目可能會多到一般的軟體無法處理;而如果是要拿來做 3D 列印的話,也需要確認多邊形是連在一起、沒有額外懸空的部分,這個也是可以靠其他多邊形處理軟體來做後續處理的。
如果有需要做這樣的動作的話,Heresy 目前是知道另一套免費的 OpenSource 軟體、MeshLab(官網)可以做到這些事,不過在這邊就不詳細題該軟體的操作了。
本文的操作方法主要是參考資料《Extracting STL surface from CT data with DeVIDE》這段 YouTube 影片的教學,有興趣的話也可以看看: