本篇介紹如何使用 Bio-Formats 生醫影像函式庫,讀取或轉換各種影像,並取出後設資料(metadata)。
Bio-Formats 是一套生醫影像讀取與寫入函式庫,其底層以 Java 語言撰寫,可以獨立使用,其支援的影像格式非常多(140 種以上),有提供指令界面的指令稿,也有提供現成的 ImageJ、Fiji、Matlab、Octave 等軟體套件。
Bio-Formats 所提供的命令列工具(command line tools)可以讓使用者以指令的方式執行。
showinf
指令可以用來顯示影像內容與後設資料(metadata):
# 顯示影像內容與後設資料(metadata)
showinf image.dcm
[略] Reading metadata 0002,0002 Media Storage SOP Class UID #1: 1.2.840.10008.5.1.4.1.1.2 0002,0003 Media Storage SOP Instance UID #1: 1.2.826.0.1.3680043.8.1055.1.20111102150758591.03296050.69180943 0002,0010 Transfer Syntax UID #1: 1.2.840.10008.1.2.4.91 0002,0012 Implementation Class UID #1: 1.2.826.0.1.3680043.8.1055.1 0002,0013 Implementation Version Name #1: dicomlibrary-100 0002,0016 Source Application Entity Title #1: DICOMLIBRARY 0008,0005 Specific Character Set #1: ISO_IR 100 0008,0008 Image Type #1: ORIGINALPRIMARYAXIALHELIX 0008,0012 Instance Creation Date #1: 20061012 0008,0013 Instance Creation Time #1: 091605.000000 0008,0016 SOP Class UID #1: 1.2.840.10008.5.1.4.1.1.2 0008,0018 SOP Instance UID #1: 1.2.826.0.1.3680043.8.1055.1.20111102150758591.03296050.69180943 0008,0020 Study Date #1: 20061012 0008,0022 Acquisition Date #1: 20061012 0008,0023 Content Date #1: 20061012 0008,0030 Study Time #1: 090258.000000 0008,0032 Acquisition Time #1: 085229.000000 0008,0033 Content Time #1: 085229.719000 0008,0060 Modality #1: CT 0008,0100 Code Value #1: CTABDOM 0008,0102 Coding Scheme Designator #1: XPLORE [略]
大部分的生醫影像在觀看時,都需要調整影像的色階,否則會看不出來實際的內容,若要自動調整影像色階,可以加上 -autoscale
參數:
# 自動調整影像色階 showinf -autoscale image.dcm
如果只需要查看影像的後設資料(metadata),而不需要觀看實際的影內容,可以加上 -nopix
參數,可以跳過讀取影像資料的過程,加速執行速度:
# 僅顯示後設資料(metadata),不讀取影像內容 showinf -nopix image.dcm
如果影像太大時,可以僅顯示其中部份的截面影像,節省記憶體與讀取時間:
# 僅顯示第 0 張到第 5 張截面影像 showinf -range 0 5 image.dcm
如果影像解析度很高,也可以用 -crop
切割影像區域,只顯示部份影像,切割區域的設定方式為 x,y,width,height
,其中 x
與 y
為切割區域的左上角座標,而 width
與 height
則為切割區域的寬度與高度,例如:
# 僅顯示部份區域 showinf -crop 0,0,256,256 image.dcm
有些影像會使用比較多的位元來儲存像素,加上 -fast
參數可以將影像轉為 8 位元的 RGB 影像,增加預覽速度(但精確度會下降):
# 快速預覽模式(轉為 8 位元 RGB 影像) showinf -fast image.dcm
bfconvert
指令可用來轉換各種影像格式,執行時直接指定輸入與輸出的檔案名稱即可,他會自動判斷檔案類型,轉換檔案格式:
# 轉換影像格式
bfconvert input.dcm output.tiff
若只需要轉出特定時間點的影像,可以使用 -timepoint
參數並指定時間:
# 僅轉出時間 0 的影像 bfconvert -timepoint 0 input.dcm output.tiff
若只需要轉出特定頻道的影像,可以使用 -channel
參數並指定頻道編號:
# 僅轉出頻道 0 的影像 bfconvert -channel 0 input.dcm output.tiff
若只需要轉出特定截面的影像,可以使用 -z
參數並指定截面編號:
# 僅轉出第 0 張截面影像 bfconvert -z 0 input.dcm output.tiff
若要轉出部份的截面影像,可以使用 -range
參數並指定開始與結束的截面編號:
# 僅轉出第 0 張到第 4 張截面影像 bfconvert -range 0 4 input.dcm output.tiff
若要切割影像區域,可以使用 -crop
參數,切割區域的設定方式為 x,y,width,height
,其中 x
與 y
為切割區域的左上角座標,而 width
與 height
則為切割區域的寬度與高度,例如:
# 僅轉出部份影像區域 bfconvert -crop 0,0,256,256 input.dcm output.tiff
bfconvert
預設轉出的影像都是沒有壓縮的,所以檔案大小會非常大,若要壓縮影像可以加上 -compression
參數並指定壓縮格式,例如:
# 以 LZW 壓縮格式壓縮影像 bfconvert -compression LZW input.dcm output.tiff
Bio-Formats 有提供非常方便的 ImageJ 套件,只要從 Bio-Formats 網站上下載 ImageJ 的 JAR 套件檔案,然後在 ImageJ 主選單的「Plugins」中選擇「Install」安裝之後,即可使用。
在 ImageJ 中以 Bio-Formats 匯入影像時,會先出現這個選項視窗,裡面有各種匯入選項可以調整。
這就是以 Bio-Formats 將 DICOM 影像匯入 ImageJ 的樣子。
在處理比較大的影像時,有可能會出現記憶體不足的錯誤訊息:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space [略]
遇到這種狀況,可以調整 Bio-Formats 的記憶體上限值環境變數 BF_MAX_MEM
的設定,將這個值調高一些(預設為 512m
):
# 調整 Bio-Formats 的記憶體上限值 export BF_MAX_MEM=1024m
實務上可以將這一行設定直接寫在指令稿的開頭,這樣就可以讓整個指令稿都套用該設定。如果想要針對個別指令調整記憶體上限值,可以加在指令的開頭,例如:
# 針對個別指令調整記憶體上限值 BF_MAX_MEM=1024m showinf -autoscale image.dcm