• 跳至主要導覽
  • 跳至主要內容
  • 跳至主要資訊欄
Office 指南

Office 指南

辦公室工作實用教學

  • Excel
  • Word
  • PowerPoint
  • Windows
  • PowerShell
  • R

DCMTK:DICOM ToolKit 安裝與使用教學與範例

介紹如何在 Ubuntu Linux 中安裝與使用 DCMTK(DICOM ToolKit)工具,進行 DICOM 影像的檢視、建立、轉換、傳送、接收與儲存等動作。


DCMTK(DICOM ToolKit)是一套開放原始碼的 DICOM 函式庫與工具組,

安裝 DCMTK

若在 Ubuntu Linux 中要安裝 DCMTK 工具,可以從官方的套件庫直接安裝:

# 安裝 DCMTK 套件
sudo apt install dcmtk

DCMTK 套件提供了許多工具,我們可以利用以下指令查看有哪些指令工具可以使用:

# 查看 DCMTK 工具集
dpkg -L dcmtk | grep bin
/usr/bin
/usr/bin/cda2dcm
/usr/bin/dcm2json
/usr/bin/dcm2pdf
/usr/bin/dcm2pnm
/usr/bin/dcm2xml
/usr/bin/dcmcjpeg
/usr/bin/dcmcjpls
/usr/bin/dcmconv
[略]

若要查詢特定指令工具的用法,可以查看其線上手冊,例如查詢 dcmconv 指令的用法就可以執行:

# 查詢 dcmconv 指令的用法
man dcmconv

顯示 DICOM 檔案內容

DCMTK 資料集中的 dcmdump 指令可以用來顯示 DICOM 檔案的內容,也就是將所有的 DICOM 標籤(tags)資訊都顯示出來。

# 顯示 DICOM 標籤資訊
dcmdump image.dcm
# Dicom-File-Format

# Dicom-Meta-Information-Header
# Used TransferSyntax: Little Endian Explicit
(0002,0000) UL 230                                      #   4, 1 FileMetaInformationGroupLength
(0002,0001) OB 00\01                                    #   2, 1 FileMetaInformationVersion
(0002,0002) UI =CTImageStorage                          #  26, 1 MediaStorageSOPClassUID
(0002,0003) UI [1.2.826.0.1.3680043.8.1055.1.20111102150758591.03296050.69180943] #  64, 1 MediaStorageSOPInstanceUID
(0002,0010) UI =JPEG2000                                #  22, 1 TransferSyntaxUID
(0002,0012) UI [1.2.826.0.1.3680043.8.1055.1]           #  28, 1 ImplementationClassUID
(0002,0013) SH [dicomlibrary-100]                       #  16, 1 ImplementationVersionName
(0002,0016) AE [DICOMLIBRARY]                           #  12, 1 SourceApplicationEntityTitle

# Dicom-Data-Set
# Used TransferSyntax: JPEG 2000 (Lossless or Lossy)
(0008,0005) CS [ISO_IR 100]                             #  10, 1 SpecificCharacterSet
(0008,0008) CS [ORIGINAL\PRIMARY\AXIAL\HELIX]           #  28, 4 ImageType
(0008,0012) DA [20061012]                               #   8, 1 InstanceCreationDate
(0008,0013) TM [091605.000000]                          #  14, 1 InstanceCreationTime
[略]

彩色輸出 DICOM 標籤資訊

dcmdump 若加上 --print-color 參數,就會以彩色的方式輸出 DICOM 標籤,對於閱讀上相當有幫助:

# 彩色輸出 DICOM 標籤資訊
dcmdump --print-color image.dcm
彩色輸出 DICOM 標籤資訊
彩色輸出 DICOM 標籤資訊

搜尋 DICOM 標籤

若要搜尋 DICOM 檔案內指定的標籤內容,可以使用 --search 參數來指定要搜尋的標籤:

# 搜尋 0010,0010 這個 DICOM 標籤
dcmdump --search 0010,0010 image.dcm
(0010,0010) PN [Anonymized]                             #  10, 1 PatientName

我們也可以一次指定多個要搜尋的 DICOM 標籤:

# 搜尋 0010,0010 與 0010,0020 這兩個 DICOM 標籤
dcmdump --search 0010,0010 --search 0010,0020 image.dcm
(0010,0010) PN [Anonymized]                             #  10, 1 PatientName
(0010,0020) LO [0]                                     #   2, 1 PatientID

搜尋目錄下所有 DICOM 檔案

若要搜尋一個目錄之下所有 DICOM 檔案的標籤內容,可以使用 +sd 參數指定目錄,並加上 --print-filename 顯示每個檔案的名稱:

# 搜尋 series-000001 目錄下所有 DICOM 檔案的 0010,0010 與 0010,0020 標籤
dcmdump +sd series-000001 --print-filename --search 0010,0010 --search 0010,0020
# dcmdump (1/361): series-000001/image-000119.dcm
(0010,0010) PN [Anonymized]                             #  10, 1 PatientName
(0010,0020) LO [0]                                     #   2, 1 PatientID

# dcmdump (2/361): series-000001/image-000081.dcm
(0010,0010) PN [Anonymized]                             #  10, 1 PatientName
(0010,0020) LO [0]                                     #   2, 1 PatientID

# dcmdump (3/361): series-000001/image-000212.dcm
(0010,0010) PN [Anonymized]                             #  10, 1 PatientName
(0010,0020) LO [0]                                     #   2, 1 PatientID

這行指令對於檢查整個 series 的 DICOM 檔案相當方便。

DICOM 轉 BMP、PNG、TIFF

若需要將 DICOM 檔案轉為一般的圖片檔案,可以使用 dcm2pnm 這個指令工具:

# DICOM 轉 BMP 圖檔
dcm2pnm --write-bmp image.dcm output.bmp

# DICOM 轉 PNG 圖檔
dcm2pnm --write-png image.dcm output.png

# DICOM 轉 TIFF 圖檔
dcm2pnm --write-tiff image.dcm output.tiff

色階轉換

通常在將 DICOM 影像轉換為一般的圖片檔案時,會套用一些色階轉換演算法,例如套用 min-max 演算法轉換色階:

# 套用 min-max 演算法轉換色階
dcm2pnm --write-png --min-max-window image.dcm minmax1.png

若想要避免極端的離群值影響色階,可以改用以下方式:

# 忽略極端值(最大與最小值),套用 min-max 演算法轉換色階
dcm2pnm --write-png --min-max-window-n image.dcm minmax2.png

# 以直方圖估計分布,忽略前後 5% 極端值
dcm2pnm --write-png --histogram-window 5 image.dcm histwin.png

DICOM 轉 JSON

若要將 DICOM 檔案的標籤轉為 JSON 的格式輸出,可以使用 dcm2json 指令:

# 將 DICOM 標籤轉為 JSON 格式
dcm2json image.dcm
{
  "00080005": {
    "vr": "CS",
    "Value": [
      "ISO_IR 192"
    ]
  },
  "00080008": {
    "vr": "CS",
    "Value": [
      "ORIGINAL",
      "PRIMARY",
      "AXIAL",
      "HELIX"
    ]
  },
  [略]
  "00401001": {
    "vr": "SH",
    "Value": [
      "A10026177757"
    ]
  },
  "7fe00010": {
    "vr": "OB",
    "InlineBinary": ""
  }
}

DICOM 轉 XML

若要將 DICOM 檔案的標籤轉為 XML 的格式輸出,可以使用 dcm2xml 指令:

# 將 DICOM 標籤轉為 XML 格式
dcm2xml image.dcm
<?xml version="1.0" encoding="ISO-8859-1"?>
<file-format>
<meta-header xfer="1.2.840.10008.1.2.1" name="Little Endian Explicit">
<element tag="0002,0000" vr="UL" vm="1" len="4" name="FileMetaInformationGroupLength">230</element>
<element tag="0002,0001" vr="OB" vm="1" len="2" name="FileMetaInformationVersion" binary="hidden"></element>
<element tag="0002,0002" vr="UI" vm="1" len="26" name="MediaStorageSOPClassUID">1.2.840.10008.5.1.4.1.1.2</element>
[略]
<element tag="0040,1001" vr="SH" vm="1" len="12" name="RequestedProcedureID">A10026177757</element>
<sequence tag="7fe0,0010" vr="OB" card="2" name="PixelData">
<pixel-item len="4" binary="hidden"></pixel-item>
<pixel-item len="89124" loaded="no" binary="hidden"></pixel-item>
</sequence>
</data-set>
</file-format>

JPEG、BMP 圖片轉 DICOM 檔

如果要將一般的 JPEG 或 BMP 等圖片檔案轉為標準的 DICOM 檔案,可以使用 img2dcm 指令,最簡易的轉換方式為:

# 將 JPEG 圖片檔轉為 DICOM 檔案
img2dcm image.jpg output.dcm

# 將 BMP 圖片檔轉為 DICOM 檔案
img2dcm -i BMP image.bmp output.dcm

由於這樣的轉換方式並沒有加入任何圖片以外的資訊,所以會採用老舊的 Secondary Capture Image Storage SOP class 來儲存,所有的 type 1 與 type 2 的 DICOM 標籤都會由程式自動產生。

我們也可以加上 -vlp 或 --vl-photo 參數讓 img2dcm 以 VL Photographic Image Storage SOP class 來儲存影像,並以 -k 或 --key 參數指定特定的 DICOM 標籤內容:

# 採用 VL Photographic SOP 儲存影像,並指定 PatientName 內容
img2dcm -vlp -k 'PatientName=Bond^James' image.jpg output.dcm

一個完整的 DICOM 檔案中包含了許多標籤,通常不會逐一指定每一個 DICOM 標籤值,比較常見的做法是從其他既有的標準 DICOM 檔案中讀取 Patient、Study、Series 資訊,將這些資訊當成範本寫入新建立的 DICOM 檔案中,然後再修改少數特定的欄位值:

# 從 template.dcm 讀取 Patient、Study、Series 資訊,
# 並設定 PatientName 為 Bond^James
img2dcm --series-from template.dcm \
  -k 'PatientName=Bond^James' image.jpg output.dcm

修改 DICOM 標籤

若要修改 DICOM 檔案內的特定標籤內容,可以使用 dcmodify 指令,-i 或 --insert 參數可以用來新增 DICOM 標籤:

# 新增 PatientID 標籤
dcmodify -i "PatientID=123" image.dcm

# 新增 PatientID 標籤(亦可用十六進位碼指定標籤)
dcmodify -i "(0010,0020)=123" image.dcm

若要修改已經存在的 DICOM 標籤,則可使用 -m 或 --modify 參數:

# 修改 PatientID 標籤
dcmodify -m "PatientID=456" image.dcm

若要將既有的標籤移除,可以使用 -e 或 --erase 參數:

# 移除 PatientID 標籤
dcmodify -e "PatientID" image.dcm

若要移除 DICOM 檔案中所有的指定標籤,可以使用 -ea 或 --erase-all 參數:

# 移除 PatientName 標籤
dcmodify -ea "PatientName" image.dcm

若要移除所有的 DICOM 私有標籤(群組編號為奇數),可以使用 -ep 或 --erase-private 參數:

# 移除所有的 DICOM 私有標籤
dcmodify -ep image.dcm

若要為 DICOM 檔案產生各種新的 UID,可以使用以下指令與參數:

# 產生新的 StudyInstanceUID
dcmodify --gen-stud-uid image.dcm
dcmodify --gst image.dcm # 簡短寫法,作用相同

# 產生新的 SeriesInstanceUID
dcmodify --gen-ser-uid image.dcm
dcmodify --gse image.dcm # 簡短寫法,作用相同

# 產生新的 SOPInstanceUID,同時更新 MediaStorageSOPInstanceUID
dcmodify --gen-inst-uid image.dcm
dcmodify --gin image.dcm # 簡短寫法,作用相同

縮放 DICOM 影像

若要縮小 DICOM 的影像解析度,可以使用 dcmscale 指令:

# X 軸縮小為 0.5 倍,Y 軸自動依比例縮放
dcmscale --scale-x-factor 0.5 image.dcm small.dcm

# Y 軸縮小為 0.5 倍,X 軸自動依比例縮放
dcmscale --scale-y-factor 0.5 image.dcm small.dcm

# X 軸縮小為 256 像素,Y 軸自動依比例縮放
dcmscale --scale-x-size 256 image.dcm small.dcm

# Y 軸縮小為 256 像素,X 軸自動依比例縮放
dcmscale --scale-y-size 256 image.dcm small.dcm

dcmscale 指令除了處理影像像素資料之外,也會連同 Rows、Columns 與 PixelSpacing 等 DICOM 標籤一起更新。

分類:免費工具 標籤:DICOM

讀者互動方式

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

主要資訊欄

搜尋

近期文章

  • C++ 語言使用 Crypto++ 實作 RSA 數位簽章教學與範例
  • C++ 語言使用 Crypto++ 實作 RSA-OAEP 搭配 SHA256 加密教學與範例
  • C++ 語言使用 Crypto++ 實作 AES 加密、解密、認證加密教學與範例
  • C++ 語言使用 Crypto++ 實作 MD5、SHA1、SHA2、BLAKE2 雜湊教學與範例
  • Ubuntu Linux 安裝、使用 Crypto++ 加密函式庫教學與範例
  • C 語言使用 OpenSSL 實作橢圓曲線 ECDH 金鑰交換教學與範例
  • Python 以 eciespy 實作 ECC 非對稱式加密方法教學與範例
  • C 語言使用 OpenSSL 實作 PBKDF2 教學與範例

推薦網站

  • Udemy 線上教學課程
  • Coursera 線上教學課程

關注本站

  • 電子郵件
  • Facebook

公益

  • 家扶基金會
  • 台灣世界展望會
  • Yahoo 奇摩公益
  • igiving 公益網
  • 兒福聯盟

Copyright © 2021 · Office Guide