免費工具

CTP DICOM Filter 影像條件篩選教學與範例

介紹如何透過 CTP DICOM Filter 的語法,撰寫影像篩選條件的指令稿,檢查與過濾 DICOM 影像資料。

CTP DICOM Filter

CTP DICOM Filter 是 CTP 處理流程中的一個處理步驟(stages),可透過指令稿所定義的篩選條件,從處理流程中挑出不符合條件的 DICOM 影像,存放於指定的隔離目錄下。

CTP DICOM Filter 指令稿語法

CTP DICOM Filter 指令稿是由一個或多個判斷條件所組成的,判斷條件的基本結構如下:

identifier.method("string")

其中 identifier 為 DICOM 的標籤,而 method("string") 則為匹配方法。

DICOM 標籤表示法

DICOM 的標籤可以使用 dcm4che 所定義的名稱或十六進位代碼來表示,例如:

  • SOPInstanceUID
  • [0008,0018]

若要表示 DICOM 的巢狀結構,可以使用雙冒號(::)分隔各層的 DICOM 標籤,例如:

  • SeqOfUltrasoundRegions::RegionLocationMinY0
  • [0018,6011]::[0018,601A]
  • SeqOfUltrasoundRegions::[0018,601A]

對於 DICOM 影像中的私有標籤(Private Data Elements),可以使用標準的十六進位代碼來表示,或是採用 Private Creator Data Element 的內容來表示。假設 [0029,0011] 這個 Private Creator Data Element 內容為 XYZ CT HEADER,則 [0029,1140] 這個私有標籤則可用以下兩種方式表示:

  • [0029,1140]
  • [0029[XYZ CT HEADER]40]

私有標籤構成的巢狀結構,也是同樣以雙冒號分隔各層的標籤,例如:

  • [0029[XYZ CT HEADER]40]::[0017[ALIGNMENT HEADER]42]

匹配方法

在 CTP DICOM Filter 的指令稿中可以使用以下幾種匹配方法,對 DICOM 標籤內容進行比對,若比對成功則傳回 true,否則傳回 false

方法 說明
equals("string") 完全等於 string
equalsIgnoreCase("string") 完全等於 string,不分大小寫。
equals("regex") 符合 regex 所指定的正規表示法。
contains("string") 包含 string
containsIgnoreCase("string") 包含 string,不分大小寫。
startsWith("string") string 開頭。
startsWithIgnoreCase("string") string 開頭,不分大小寫。
endsWith("string") string 結尾。
endsWithIgnoreCase("string") string 結尾,不分大小寫。
isLessThan("value") 數值小於 value
isGreaterThan("value") 數值大於 value

如果在對 DICOM 影像進行標籤內容比對時,若指定的 DICOM 標籤不存在,則會視為空字串("")。

isLessThanisGreaterThan 在進行比對之前,會對 DICOM 標籤內容與指定參數進行前處理,將所有非數值的字元去除,將資料轉為雙精度浮點數(double precision floating point values)之後,再進行比對,若轉換失敗則傳回 false

註解

所有雙斜線(//)之後到結尾的內容都會被視為註解,例如:

// 這是註解
PatientName.equals("xyz") // 這也是註解

邏輯運算子與括號

若要結合多種不同的判斷條件,可以使用邏輯運算子以及括號:

運算子 說明
+ OR 運算子。
* AND 運算子。
! NOT 運算子。
() 優先運算。

以下是使用邏輯運算子的範例:

// ImageType 包含 SECONDARY 或 DERIVED
ImageType.contains("SECONDARY") + ImageType.contains("DERIVED")

// ImageType 不包含 SECONDARY 或 DERIVED
!(ImageType.contains("SECONDARY") + ImageType.contains("DERIVED"))

// ImageType 不包含 SECONDARY 或 DERIVED
!ImageType.contains("SECONDARY") * !ImageType.contains("DERIVED")

Recent Posts

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

本篇介紹如何在 Python ...

1 年 ago

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

本篇介紹如何在 Ubuntu ...

1 年 ago

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

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

1 年 ago

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

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

1 年 ago