[转]DICOM医学图像处理:Deconstructed PACS之Orthanc
轉載:http://blog.csdn.net/zssureqh/article/details/41424027
背景:
?
? ? ? ? 此篇博文介紹一個開源的、基于WEB的DICOM Server軟件。該開源軟件完全使用C++編寫,不依賴于第三方數據庫(內置了SQLite數據庫)或其他框架,支持RESTful API設計模式。官網上提供了源代碼,同時也給出了編譯后的Windows和Linux系統的二進制安裝包。Orthanc是PACS領域的一種改革,提出了“解構PACS概念”,即Deconstructed PACS,用戶可以通過三種方式訪問Orthanc:DICOM Server、Web Server和RESTful API。
Orthanc:
? ? ? ? 開源中國社區中對于Orthanc有一段這樣的描述:Orthanc是一個輕量級的,基于REST的DICOM服務器,主要用于衛生保健和醫療研究。Orthanc可將任意運行Windows和Linux的計算機編程DICOM存儲(或者說是一個小型PACS系統),其架構是輕量級的,沒有復雜的數據庫管理,不依賴于第三方軟件。
? ? ? ? 除此以外,Orthanc官網(http://www.orthanc-server.com/about.php)對于Orthanc的描述著重提到:Orthanc之所以與眾不同是因為它提供RESTful API。因此,Orthanc可以使用任何計算機語言開發。Orthanc存儲的DICOM圖像的標簽可以以JSON文件格式下載,此外,Orthanc對于存儲的DICOM實例可以動態生成對應的PNG圖像。
? ? ? ? Orthanc隱藏了復雜的DICOM文件格式和DICOM協議,使使用者只專注于DICOM文件內容。
Deconstructed PACS:
? ? ? ? Deconstructed PACS是新一代的PACS系統,原文的描述為"The latest strategy for imaging informatics is actually "deconstructed PACS," where the core elements of PACS are best-of-breed or component-based solutions, integrated together using standards-based approaches.” PACS系統最早是通過組合多個獨立的子系統來實現簡單獲取和轉存圖像,對于圖像(images)和醫學信息(demographics)分別采用不同的網絡;隨后發展為C/S模式,通過Client的工作站來實現(胖客戶端thick-client);最后演變成基于瀏覽器的Web PACS(瘦客戶端thin-client)。
【Deconstructed PACS概念目前我還沒有搞太明白,官網的資料比較多,后續會補充更多的資料,有興趣的讀者也可以直接閱讀博文后我給出的連接】
Orthanc安裝:
? ? ? ? 通過上述簡短的介紹,想必大家已經對Orthanc有了大致的了解。下面給出Orthanc的安裝方法,Orthanc是一個開源軟件,因此有兩種安裝方式。
Orthanc二進制包在Windows下安裝:
? ? ? ? 下載地址:http://www.orthanc-server.com/download-windows.php。在官網下載頁面中輸入基本信息就會在郵箱中獲得下載鏈接,Windows下的二進制安裝包名稱為:Orthanc-0.8.5-Installer.exe。雙擊安裝包,如下圖所示,單擊“下一步”就可以順利完成安裝。
?
?
?
?
? ? ? ? 該文件夾用于設置Orthanc軟件的安裝目錄,即主要程序OrthancService.exe和Orthanc-0.8.5-Release.exe的存放位置。
?
?
? ? ? ? 此處用于設置Orthanc軟件中DICOM Server的數據存儲目錄,可以簡單的理解為mini-PACS的歸檔目錄,后續示例中的圖像就保存在該文件夾下。
?
?
? ? ? ? 此處用于設置Orthanc軟件在開始菜單中快捷鍵的文件夾。
?
?
? ? ? ? 單擊Install,稍等片刻即可完成Orthanc在Windows下的安裝。
Orthanc源碼在Windows下編譯運行:
? ? ? ? 開源軟件最常用的是源碼編譯,如是可以生成跟本機系統最匹配的可執行文件。Orthanc源代碼下載地址為:http://sourceforge.net/projects/orthancserver/files/Orthanc-0.8.5.tar.gz/download,源碼包名稱為:Orthanc-0.8.5.tar.gz。解壓Orthanc-0.8.5.tar.gz到希望的目錄(本機我選擇C:\),得到C:\Orthanc-0.8.5,如下圖:
?
?
? ? ? ? 打開INSTALL安裝說明文檔,可以看到安裝必須的準備:
?
1)CMake,我直接利用本地安裝的CMake2.8(也可以到官網下載最新版本:http://www.cmake.org/);
?
2)Python,安裝過程中有一些自動生成的腳本需要用到Python解釋器,下載地址http://www.python.org/,我本機安裝的版本為:Python2.7;
?
3)7-Zip:用于解壓縮安裝過程中下載的壓縮包,下載地址為http://www.7-zip.org/。
?
? ? ? ? 在選擇CMake GUI界面,指定source code和build路徑后,單擊Configure會出現缺少7-zip的錯誤提示,如下圖:
?
?
? ? ? ? 原因是我本機起初并未安裝7-zip軟件。按照INSTALL給出的官網下載并安裝完成后,重新啟動CMake再次進行配置后,又會出現錯誤,如下所示。提示缺少libgoogle-glog-dev package,這個應該是google的用于日志記錄的庫。
?
?
? ? ? ? 在搜索并下載libgoogle-glog-dev package時遇到了問題,未找到直接的下載鏈接。因此利用CMake GUI編譯Orthanc的路暫時走不通。重新仔細閱讀INSTALL文檔,找到了在Windwos系統下利用Microsoft Visual Studio進行Orthanc源碼編譯的方法,具體說明如下:
Native Windows build with Microsoft Visual Studio
-------------------------------------------------
# cd [...]\OrthancBuild
# cmake -DSTANDALONE_BUILD=ON -DSTATIC_BUILD=ON -DALLOW_DOWNLOADS=ON -G "Visual Studio 8 2005" [...]\Orthanc
?
Then open the "[...]/OrthancBuild/Orthanc.sln" with Visual Studio.
?
? ? ? ? 利用cmd進入到命令提示符狀態,仿照上述代碼,創建安裝緩存目錄,mkdir c:\OrthancBuild;隨后啟動cmake命令行模式,按照INSTALL中的說明設置編譯模式,具體指令為:
cd c:\OrthancBuild
cmake -DSTANDALONE_BUILD=ON -DSTATIC_BUILD=ON -DALLOW_DOWNLOADS=ON -G "Visual Studio 10" ..\Orthanc-0.8.5\Orthanc-0.8.5
? ? ? ? 注:目錄要指定到源碼中CMakeList.txt文件所在的層級。另外對于本地編譯器的選擇,可以現在cmd狀態下輸入cmake,查看當前支持的編譯器類型,如下圖所示,我選擇的是Visual Studio 10。
?
?
? ? ? ? 上述打開了自動下載第三方支持庫的選項,即-DALLOW_DOWNLOADS=ON?。在啟動cmake后,會自動下載我們在CMake GUI模式下提示缺少的各種支持庫。等待所有第三方庫自動下載并安裝完成后,Orthanc源碼就順利編譯完成了,如下圖所示:
?
?
? ? ? ? 打開上圖中提示的Build files文件路徑C:\Orthanc-0.8.5,雙擊打開VS工程Orthanc.sln。選擇“生成”下的“批生成”,勾選ALL_BUILD項目,單擊“生成”后等待編譯完成。
? ? ? ? 順利編譯完成后,在C:\Orthanc-0.8.5\Debug目錄下看到了與二進制安裝后相同的可執行文件,名稱為Orthanc.exe,如下圖所示:
?
?
? ? ? ? 至此利用Orthanc源碼進行安裝的過程順利結束。其實在CMake GUI模式下我們勾選了配置項中的“ALLOW_DOWNLOADS”,也可以順利完成Orthanc源碼的編譯。
?
?
Orthanc測試:
?
? ? ? ? Orthanc被描述為一款開源的、輕量級的,滿足RESTfu API 的DICOM服務器。它獨特之處在于存在多種與Orthanc的交互方式,主要有三種:DICOM Server,Web Server和RESTful API。下面就利用這三種訪問方式對上述兩種安裝環境進行實例測試:
二進制包的測試:
1)作為DICOM Server:
? ? ? ? 安裝并啟動OrthancService.exe后,在任務管理器中可以看到啟動了兩個服務駐留進程OrthancService.exe和Orthanc-0.8.5-Release.exe
?
?
? ? ? ? Orthanc提供了發送和接收DICOM圖像的基本功能,類似于一個mini PACS。可以與DCMTK提供的工具包進行良好的交互,此處我就借助DCMTK提供的storescu.exe工具將C:\test.dcm文件發送到Orthanc,具體指令如下:
storescu.exe –d –aec ORTHANC localhost 4242 c:\test.dcm
? ? ? ? 對于storescu.exe工具包的使用可參照我前幾篇的專欄,此處ORTHANC是Called AE Title,4242是Orthanc中DICOM服務的監聽端口,該信息在安裝過程中指定的數據歸檔目錄(即c:\Orthanc)中的Connfiguration.json配置文件中可以自行設置,上述命令行中的參數是Orthanc安裝時默認的設置。
?
?
? ? ? ? 命令執行后,storescu.exe的輸出結果如下圖所示,說明test.dcm文件已經順利發送到Orthanc。
?
?
? ? ? ? 打開Orthanc默認的數據歸檔文件夾C:\Orthanc\OrthancStorage\6a\d6可以看到一個大小與test.dcm相同的文件,利用DICOM Viewer打開可以看到兩者是同一個文件。這說明Orthanc成功接收到storescu.exe發送的測試圖像。
?
?
2)作為Web Server:
?
? ? ? ? Orthanc內置了一個Web Server(也可嵌入到Apache服務中),即Orthanc Explorer。Orthanc Explorer提供了一種友好的交互方式,可通過拖拽文件的方式實現DICOM文件上傳。下面我們演示一下:
? ? ? ? 在開始菜單中選擇Open Orthanc Explorer,或者在Chrome或者Firefox瀏覽器中直接輸入http://localhost:8042/app/explorer.html(注:目前不支持IE瀏覽器)。打開后此處可以直接看到我們剛才 利用storescu.exe上傳的test.dcm文件,如下圖所示:
? ? ? ? 單擊上圖右上角的Upload DICOM,出現如下界面:
? ? ? ?此時我們可以使用“拖拽”方式實現DICOM文件上傳。下面我選擇c:\test2.dcm文件,拖拽到上述頁面中,然后單擊Start the upload,會彈出上傳進度條,如下所示:
? ? ? ? 返回上層界面,可以看到我們“拖拽”的test2.dcm文件已經順利完成上傳,如下圖所示:
3)利用RESTful API:
? ? ? ? 下面介紹Orthanc最令人振奮的訪問方式——RESTful API。它提供了一種使用標準網絡協議與圖像服務器進行交互的方式,使得可以在任何地方(只要有網絡覆蓋)通過網絡連接訪問Orthanc服務器,并且無需考慮服務運行的平臺或開發語言。RESTful APIs使用URIs來實現資源的定位與訪問,此處的資源包括patients、studies和images三級,與DICOM協議中定義相同,傳統的PACS也多以此作為數據庫的設計原則。對于該類請求,Orthanc會將文本信息以JSON格式返回(JSON是一種輕量級的廣泛應用的文件格式);對于圖像信息會返回PNG網絡圖像格式。該部分想必大家都很熟悉,下面我們就直接演示一下:
? ? ? ? 此處借助于curl.exe工具,在cmd模式下輸入:
cd c:\
curl –X POST?http://localhost:8042/instances?–data-binary @test3.dcm
? ? ? ? 得到如下結果表明test3.dcm圖像上傳成功,
? ? ? ? 打開Orthanc Explorer可以看到剛才上傳的test3.dcm文件:
源碼編譯后測試:
? ? ? ? 在任務管理器中先手動終止OrthancService.exe和Orthanc-0.8.5-Release.exe兩個Orthanc后臺服務進程,轉到編譯源碼生成的目錄C:\Orthanc-0.8.5\Debug下,啟動Orthanc.exe,如下圖所示:(調試狀態下Orthanc.exe會輸出狀態信息,也可以在命令行下啟動Orthanc.exe --verbose輸出調試信息)
? ? ? ? 仿照上一節,從DICOM Server、Web Server和RESTful API三種方式進行測試:
1)DICOM Server
? ? ? ? 進入cmd模式,輸入:
storescu.exe –d –aec ORTHANC localhost 4242 c:\test.dcm,可以看到圖像上傳成功的結果:
2)Web Server
? ? ? ? 打開谷歌瀏覽器,地址欄輸入http://localhost:8042/app/explorer.html,可以看到剛才上傳的test.dcm文件,如下圖:
? ? ? ? 單擊Upload DICOM,拖拽test2.dcm文件到瀏覽器頁面,然后單擊Start the Upload,返回到主頁面可以看到順利上傳的結果,如下圖:
? ? ? ? 打開目錄C:\Orthanc-0.8.5\Debug\OrthancStorage,可以看到順利歸檔的兩個文件
3)RESTful API
? ? ? ? 進入cmd模式,輸入如下指令:
cd c:\
curl –X POST?http://localhost:8042/instances?–data-binary @test3.dcm
? ? ? ? 在Orthanc Explorer中可以順利看到結果,如下圖:
? ? ? ??【注】:與二進制安裝環境下不同的是,curl運行時會偶爾返回錯誤提示,出現這種情況后重啟Orthanc.exe就可以解決。
知識點補充:
RESTful API:
? ? ? ? RESTful API是目前比較成熟的一套互聯網應用程序的API設計理論。REST,全稱Representational State Transfer,最早是由Roy Thomas Fielding在他2000年的博士論文中提出的。論文中的部分摘要如下:
“
This dissertation explores a junction on the frontiers of two research disciplines in computer science: software and networking. Software research has long been concerned with the categorization of software designs and the development of design methodologies, but has rarely been able to objectively evaluate the impact of various design choices on system behavior. Networking research, in contrast, is focused on the details of generic communication behavior between systems and improving the performance of particular communication techniques, often ignoring the fact that changing the interaction style of an application can have more impact on performance than the communication protocols used for that interaction. My work is motivated by the desire to understand and evaluate the architectural design of network-based application software through principled use of architectural constraints, thereby obtaining the functional, performance, and social properties desired of an architecture.
”
? ? ? ? 如果一個架構符合REST原則,就稱它為RESTful架構。要理解RESTful結構,需要充分理解Representational State Transfer?這個詞組的含義,每個詞代表什么意思。該詞組中省略了主語,表現層(representational)其實指的是資源(resources)的表現層。所謂資源就是網絡上的一個實體,或者說網絡上的一個具體信息。REST從資源的角度來觀察整個網絡,分布在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表示方式。所謂上網,就是互聯網上一系列“資源”的互動,一系列URI的調用。
? ? ? ? 資源是一種信息實體,可以有多種表現形式,叫做“表現層(representation)”,例如文本可以用txt表示,也可以用html、xml、JSON表示,甚至可以使用二進制格式;圖片可以用JPEG、PNG等格式。URI只代表資源實體,不代表它的表現形式。有些網址最后的.html后綴名是不需要的,因為.html后綴是一種表示格式,屬于“表現層”范疇,URI只代表資源的位置。
? ? ? ? 訪問一個網站,就代表客戶端與服務器的一個互動過程。這個過程中勢必會涉及到數據和狀態的改變。互聯網通信協議HTTP協議,是一個無狀態協議。這意味著,所有的狀態都保存在服務器端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生"狀態轉化"(State Transfer)。而這種轉化是建立在表現層之上的,所以就是"表現層狀態轉化"。客戶端用到的手段,只能是HTTP協議。具體來說,就是HTTP協議里面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來刪除資源。獲得這些表會致使這些應用程序轉變了其狀態。隨著不斷獲取資源的表示方式,客戶端應用不斷地在轉變著其狀態,所謂表述性狀態轉移(Representational State Transfer)。——這一觀點不是憑空臆造的,而是通過觀察當前Web互聯網的運作方式而抽象出來的。Roy Fielding 認為,“設計良好的網絡應用表現為一系列的網頁,這些網頁可以看作的虛擬的狀態機,用戶選擇這些鏈接導致下一網頁傳輸到用戶端展現給使用的人,而這正代表了狀態的轉變”。
? ? ? ? 綜合上面的解釋,我們總結一下什么是RESTful架構:
- 每一個URI代表一種資源;
- 客戶端和服務器之間,傳遞這種資源的某種表現層;
- 客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現"表現層狀態轉化";
WADO:
? ? ? ? 關于WADO的詳細介紹可以參考DICOM3.0標準的第18部分。
參考資料:
http://www.orthanc-server.com/index.php,Orthanc官網
http://www.orthanc-server.com/blog.php,Orthanc
http://www.auntminnie.com/index.aspx?sec=ser&sub=def&pag=dis&ItemID=107001,Deconstructed PACS
http://www.auntminnie.com/index.aspx?sec=sup&sub=pac&pag=dis&ItemID=55408,Deconstructed PACS
http://siim.org/siim2014/scientific-program/deconstructed-pacs,Deconstructed PACS
http://idoimaging.com/blog/?p=288,I Do Imaging
http://www.codeproject.com/Articles/797118/Implementing-a-WADO-Server-using-Orthanc,Orthanc Plugins SDK
http://baike.baidu.com/view/5798116.htm?fr=aladdin,RESTful APIs
http://www.cnblogs.com/springyangwc/archive/2012/01/18/2325784.html,RESTful APIs
?
?
?
?
?
作者:zssure@163.com
?
時間:2014-11-23
轉載于:https://www.cnblogs.com/h2zZhou/p/5215853.html
總結
以上是生活随笔為你收集整理的[转]DICOM医学图像处理:Deconstructed PACS之Orthanc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘被分区怎么恢复出厂设置 恢复U盘出厂
- 下一篇: javascript小实例,多种方法实现