免費工具

CTP:DICOM 影像去識別化工具安裝與使用教學與範例

介紹如何安裝與使用 RSNA MIRC CTP 去識別化(de-identification)工具,對 DICOM 影像進行匿名化(anonymization)與假名化(pseudonymization)處理,清除影像中的個人資料。

安裝 JRE

由於 CTP 相關的工具都是由 Java 所開發的,使用前要先安裝好基本的 JRE 環境。若在 Windows 或 macOS 環境下,可從 Java 官方網站下載安裝檔進行安裝。

若在 Ubuntu Linux 中可以使用 apt 安裝 JRE 套件:

# 安裝 JRE
sudo apt install default-jre

CTP(Clinical Trials Processor)

RSNA MIRC CTP(Clinical Trials Processor)是一套具有高度彈性的臨床資料處理工具,可以用於 DICOM 醫療影像的去識別化處理,在許多的去識別化工具測試評比表現優異,此工具也是 TCIA 所指定的去識別化工具之一。

CTP 的工具皆以 JAR 的形式釋出,所以不管是在 Windows、macOS 或 Linux 等平台都可以直接執行,操作方式都相同。

下載與安裝 CTP

RSNA MIRC 網站上下載 CTP-installer.jar 這個 CTP 的 JAR 安裝檔。

若在 Ubuntu Linux 伺服器上,可以使用 wget 下載:

# 下載 CTP-installer.jar
wget http://mirc.rsna.org/download/CTP-installer.jar

下載 JAR 安裝檔之後,使用以下指令執行 JAR 檔案進行安裝,並選擇安裝路徑,安裝路徑可以自由指定,安裝的過程只是將檔案解壓縮至安裝路徑之下而已。

# 安裝 CTP
java -jar CTP-installer.jar
CTP 安裝程式

若在 Windows 中也可以直接以滑鼠點兩下的方式來執行 JAR 檔案。

接著設定 CTP 伺服器所使用的連接埠號。

設定 CTP 伺服器連接埠號

安裝完成並關閉安裝程式之後,會自動執行 RSNA CTP Launcher 伺服器管理程式,在這個管理介面中可以調整 CTP 伺服器的工作處理流程設定,控制 CTP 伺服器的運行,以及查閱記錄檔等。

RSNA CTP Launcher

平常若要手動啟動 RSNA CTP Launcher,可以在進入 CTP 安裝目錄之後,執行 Launcher.jar 這個 JAR 檔:

# 啟動 RSNA CTP Launcher
java -jar Launcher.jar

新增 CTP Pipeline

CTP 是透過各種處理步驟(stages)所組合而成的 pipeline 來處理各種資料的,主要的步驟可以分為四大類:

  1. Import Services:提供各種匯入資料的方式。
  2. Processors:提供各種資料處理工具。
  3. Storage Services:提供各種資料儲存方式。
  4. Export Services:提供各種資料匯出方式。

使用者可以依照自己的需求使用這些處理步驟建立 pipeline,或是選用內建好的 pipeline 組合。

若要進行 DICOM 影像的去識別化,可以在「Pipeline」選單中選取內建的「DICOM De-identification to Local Storage」這一條 pipeline,將其新增至伺服器中。

新增 Pipeline

建立 pipeline 之後,可以調整 pipeline 中各個處理步驟的設定,在去識別化的流程中,比較重要的就是 DicomAnonymizer 的 script 設定,這個 script 中明確定義了每個 DICOM 標籤的處理方式,CTP 的 scriptsprofiles 目錄中附帶了許多依據 DICOM 標準所撰寫的 script,使用者可以從中選擇適合自己的 script 來用,另外也可以搭配預先定義好的 ID 對照表進行 ID 的去識別轉換。

調整 Pipeline 設定

在使用既有的去識別化 script 設定檔時,記得要修改設定檔中針對個別機構或專案的設定值,例如機構名稱、專案名稱等屬性,最重要的是一定要設定好 UIDROOT 值,若使用別人的 UIDROOT 可能會有 UID 重複的風險。

若是個人或組織需要一個有效的 UIDROOT,可以考慮向 Medical Connections 申請免費的 UID 前綴,對於台灣的使用者亦可考慮以台灣的 OID 物件識別碼來設計 UID 前綴。

除了 DicomAnonymizer 之外,DicomPixelAnonymizer 也有 script 設定,其定義了如何去除烙印在影像上的個人資料。

這裡的 IDMap 是用來讓下一個步驟的 DicomAnonymizer 產生各種 UID、AccessionNumber 與 Patient ID 的原始值與取代值的對應表。而 DicomDecompressor 則是用於影像資料的解壓縮。

設定好 pipeline 並儲存之後,選擇「General」頁籤,按下「Start」啟動 RSNA CTP 伺服器。

啟動 RSNA CTP 伺服器

選擇「Log」頁籤,查看伺服器啟動的狀況。

CTP 伺服器 Log 記錄

CTP 伺服器啟動之後,我們就可以用一般的瀏覽器開啟指定的連接埠,就可以看到 CTP 伺服器的網頁介面了,若想要登入網頁介面,可以使用預設的 admin 管理帳號,而密碼則是 password

CTP 網頁介面

這樣 CTP 伺服器就準備好了,接下來就可以將 DICOM 影像檔案送進 CTP 伺服器進行處理了。

以 FileSender 傳送 DICOM 影像

將 DICOM 影像檔案遞送至 CTP 伺服器的方式有很多種,這裡我們示範以 FileSender 透過 HttpImportService 的方式匯入 DICOM 影像。

首先從 RSNA MIRC 網站上下載 FileSender 的 JAR 安裝檔。若在 Ubuntu Linux 伺服器上,可以使用 wget 下載:

# 下載 FileSender-installer.jar
wget http://mirc.rsna.org/download/FileSender-installer.jar

下載 JAR 安裝檔之後,執行該 JAR 安裝檔,安裝 FileSender,並選擇安裝路徑:

# 安裝 FileSender
java -jar FileSender-installer.jar

安裝好 FileSender 之後,執行其中的 FileSender.jar

# 執行 FileSender
java -jar FileSender.jar

啟動 FileSender 之後,在左側欄位中可以選擇要上傳的 DICOM 影像,可以選擇單一檔案或是整個目錄,而右側則是填入 DICOM 伺服器的位址 http://localhost:7778/,設定好之後,按下「Send」上傳檔案。

FileSender

上傳完成後,會顯示上傳結果。

FileSender 傳送 DICOM 影像結果

上傳 DICOM 影像至 CTP 伺服器之後,會自動經過 pipeline 處理,處理完成之後的影像預設會儲存至 CTP 安裝路徑下的 roots/FileStorageService/__default/ 目錄中。

# 查看處理結果
ls -R roots/FileStorageService/__default/
__guests.xml  __index.xml  ST-13821646120427586942  ST-16316529995385159400

roots/FileStorageService/__default/ST-13821646120427586942:
FO-10793127550884327511.dcm  FO-15090205929499068295.dcm  __index.xml
FO-14240513639107968581.dcm  FO-447121239004225879.dcm

roots/FileStorageService/__default/ST-16316529995385159400:
FO-10735987393490621105.dcm  FO-2888303257337280749.dcm
FO-1137166037218404651.dcm   FO-7206559828680062055.dcm
FO-12744427732757654110.dcm  FO-8639208383977107329.dcm
FO-13436623129608677956.dcm  FO-8974801485968763825.dcm
FO-14345389630097408667.dcm  FO-9752852785207225931.dcm
FO-14983669555146471350.dcm  FO-9790638582733981195.dcm
FO-17717808009561358413.dcm  __index.xml
FO-2461664446741563845.dcm

若要調整輸出 DICOM 影像檔案的存放路徑結構,可以調整 FileStorageService 的設定(例如透過 fsNameTag 的設定以 PatientID 作為目錄名稱分開儲存影像),或是採用 DirectoryStorageService 等其他不同的 storage services。

ArchiveImportService 與 DirectoryImportService

除了使用 FileSender 透過 HttpImportService 匯入 DICOM 影像之外,CTP 還有其他多種匯入 DICOM 影像的方式,對於一般的檔案來說,也可以考慮使用 ArchiveImportService 或 DirectoryImportService,一個 pipeline 中可以同時使用多種匯入資料的方式。

ArchiveImportService 可以從指定的目錄中匯入 DICOM 影像,匯入影像之後會保留原始的 DICOM 檔案,並將處理進度資訊儲存在 roots/ArchiveImportService 目錄下的 checkpoint.bin 檔案中,若要重新處理所有檔案,必須刪除此檔案並重新啟動 CTP。

DirectoryImportService 則是會從指定目錄中匯入 DICOM 檔案,匯入檔案後會將 DICOM 影像原始檔案刪除,此種方式適合用於手動匯入檔案。

DicomEditor

CTP 的功能很齊全,但是安裝與使用上比較麻煩,如果只是需要單純的 DICOM 影像檔案去識別化功能,可以使用 DicomEditor 這個 DICOM 影像編輯工具,它可以進行 DICOM 影像的瀏覽、編輯以及去識別化處理。

CTP 相關工具的下載與安裝流程都很類似,先從 RSNA MIRC 網站上下載 DicomEditor 的 JAR 安裝檔後,執行 JAR 安裝檔進行安裝,並選擇安裝路徑:

# 下載 DicomEditor-installer.jar
wget http://mirc.rsna.org/download/DicomEditor-installer.jar

# 安裝 DicomEditor
java -jar DicomEditor-installer.jar

安裝完成之後,進入安裝目錄,執行 DicomEditor.jar

# 執行 DicomEditor
java -jar DicomEditor.jar

DicomEditor 會使用安裝目錄下 dicom-anonymizer.script 中所定義的去識別化規則,而在「Anonymizer」頁籤中則會顯示每一條規則,使用者也可以自行調整其中的設定。

DicomEditor 去識別化規則

在「Directory」頁籤中,選取要進行去識別化的 DICOM 影像檔案或目錄,按下「Anonymize」按鈕即可進行去識別化的處理。

DicomEditor 去識別化處理

處理完成後的 DICOM 影像檔案會在檔案名稱上附加 -no-phi 字樣,另存新檔放在相同目錄之下。

# 查看 DICOM 去識別化結果
ls dicom/339833062/07-05-2001-NA-NA-19638/3001578.000000-NA-60758
1-1.dcm         1-2-no-phi.dcm  1-4.dcm         1-5-no-phi.dcm  1-7.dcm
1-1-no-phi.dcm  1-3.dcm         1-4-no-phi.dcm  1-6.dcm         1-7-no-phi.dcm
1-2.dcm         1-3-no-phi.dcm  1-5.dcm         1-6-no-phi.dcm

CTP 相關的工具大部分都是具有 GUI 圖形介面的 Java 程式,如果需要指令介面的 DICOM 影像去識別化工具,可以使用 CTP DICOM Anonymizer Tool

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago