介紹3D Slicer的另一個身份:醫學影像IDE

IDE(Integrated Development Environment )集成開發環境一般是指程序員在進行軟件開發時,需要使用的一整套環境和應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面等。大家比較熟悉的IDE有Microsoft Visual Studio、Eclipse、PyCharm等。IDE的選擇通常和開發語言和應用領域密切相關。例如,如果做Windows C++/C#應用開發,基本都會優先選擇Visual Studio;如果做Java開發,則傾向首選Eclipse;PyCharm則是很多Python開發程序員的首選。

 

在醫學影像算法開發領域,大家是否注意到近年來的兩個趨勢。第一,越來越多的人喜歡用Python做爲開發語言,進行快速原型開發和驗證。正所謂,“人生苦短,我用Python”。第二個趨勢,爲了進一步加快原型開發的速度,尤其是避免重複“造輪子”,大家通常會選擇ITK、VTK、QT這個“三劍客”組合,來作爲圖像處理、可視化和圖形界面的三大基石。並且,這兩大趨勢正在融合形成一個彙總趨勢:使用Python作爲開發語言,調用ITK、VTK、QT這三大基礎庫,進行醫學影像算法原型的開發。

 

分析到這裏,終於要引出我們這篇小文章要討論的主要問題了。想要用Python調用ITK、VTK和QT進行開發,有哪些好的IDE可供選擇?

 

對於高手來講,直接從Python安裝包開始,然後逐個安裝SimpleITK、VTK、PyQt,就可以了。也可以藉助Anaconda來建立多版本開發環境。但對於新手和小白,這個過程並不簡單。需要解決安裝包下載、版本選擇、PIP安裝命令等一系列問題,才能夠入門,建立起真正能夠開始編程的環境。

 

那麼,有沒有更省事一步到位的解決辦法?答案是,有。這個一步到位的解決方法就是本文要介紹的3D Slicer。

 

3D Slicer是一個開源的跨平臺醫學影像可視化和處理分析軟件,由美國國家衛生研究院(National Institutes of Health)支持開發,迄今已經有超過20年的開發歷史,但仍然保持着一個活躍的開發羣體。關於3D Slicer的詳細介紹,可以參考官方網站:https://www.slicer.org/。

 

本文重點介紹3D Slicer中集成的Python開發環境。假定大家已經從網站下載最新的4.8.1版本,完成了安裝。軟件啓動後,將顯示下面的界面:

注意到紅色箭頭指向的右上方按鈕圖標了嗎?這不就是Python的代表性Logo嗎?沒錯,只要安裝好3D Slicer,內部就會直接準備好了Python 2.7的開發環境。點擊這個按鈕,就會在軟件的下方啓動Python的交互式開發環境。如下圖紅色箭頭指向所示。

 

 

是不是有些小小的驚喜和意外?這還遠不是全部。在這個開發環境中,你可以直接調用SimpleITK、VTK和PyQt的函數和功能。關於如何在Slicer中進行Python編程,大家可以參考官方網站介紹,(https://www.slicer.org/wiki/Documentation/Nightly/Developers/Python_scripting),非常詳細。

 

在真正入坑,開始折騰之前,大家可能都會先思考一個問題。我用這個工具能夠做什麼事情,達到什麼樣的效果?回答這個問題的最佳方式就是,舉個例子。

 

下面介紹一個基於3D Slicer環境,採用Python開發的椎弓根螺釘手術規劃和模擬擴展應用:PedicleScrewSimulator。

 

PedicalScrewSimulator爲開源軟件(https://github.com/smclach/PedicleScrewSimulator)。整個工程,如果不統計資源和模型文件,一共包含了10個Python文件。其中最長的文件,代碼行數爲919行。大多數文件的代碼行數,都在300行以內。這與Python編程,“少寫代碼,多半實事”的追求目標非常一致啊。

 

PedicleScrewSimulator非常“友好”,在左側面板中,提供了操作嚮導,指導和提示用戶逐步操作。包含下述步驟。

 

  1.  加載DICOM影像

 

上方是軟件整體界面。在界面左側,顯示的是嚮導面板,具體如下圖。

 

 

可以看到提供了多種加載方式。整個數據加載步驟,包括上面的圖形用戶界面,由LoadDataStep.py文件實現,一共168行代碼。其中加載影像的核心功能是通過調用Slicer內部已經集成的輔助功能模塊來實現的。核心代碼只有一句話,代碼如下:

slicer.util.openAddDataDialog()

 

2. 裁剪感興趣區域

在第二步中,軟件會在三個正交切面圖像(MPR)上顯示感興趣區域裁剪框,讓用戶手工拖拽調節,選擇感興趣區域。其中左側的操作面板(如下圖所示),都是採用PyQt搭建出來的。

右上方的Volume Rendering繪製窗口則基於Slicer中內置的下述module來實現。

slicer.modules.volumerendering

 

3. 標記植入點

 

在這一步中需要指定植入點的位置。可以直接在VR窗口中點擊確定。

 

4. 植入過程模擬

 

在這一步中,可以先選擇要植入的骨釘型號,然後選擇要植入的深度。之後,點擊“Insert Screw”按鈕,就可以看到藍色的骨釘動態的鑽入骨骼中。還可以點擊“Backout Screw”來撤回骨釘。

 

5. 術後效果模擬

在最後一步中,可以採用在上方VR窗口以半透明骨骼效果,觀察骨釘植入效果。還可以在3個MPR窗口中,觀察骨釘出現在哪些切面層面和輪廓。如下圖所示。

 

至此,對於PedicScrewSimulator“蜻蜓點水”式介紹完成。沒有深入技術細節和代碼,只是想通過圖片分享的方式,讓大家初步瞭解和感受在Slicer這個IDE進行開發,可以完成哪些工作,達到什麼樣的效果。

 

用3D Slicer作爲醫學影像算法快速開發的IDE,突出優勢是已經集成好了ITK、VTK和QT常用“三大件”,並且可以使用Slicer內部若干已經開發完成的Module,來加快開發進程。但是所有的餡餅都不是白來的,要想能夠在Slicer中進行開發,學習和熟悉Slicer的設計理念、軟件架構仍然是必須的。友提,真正入坑之前,還是把官方指導網頁大致看一遍,才能更好決定,這是不是適合自己的那盤菜。

 

官方指導網頁:

https://www.slicer.org/wiki/Documentation/Nightly/Developers/Python_scripting

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章