本篇介紹如何使用 Bio-Formats 生醫影像函式庫,讀取或轉換各種影像,並取出後設資料(metadata)。

Bio-Formats 是一套生醫影像讀取與寫入函式庫,其底層以 Java 語言撰寫,可以獨立使用,其支援的影像格式非常多(140 種以上),有提供指令界面的指令稿,也有提供現成的 ImageJ、Fiji、Matlab、Octave 等軟體套件。


Bio-Formats 主要的用途就是在不同軟體之間轉換不同格式的影像,其作法就是將各種影像轉換成 OME data model,例如 OME-TIFF

命令列工具

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: ORIGINAL\PRIMARY\AXIAL\HELIX
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,其中 xy 為切割區域的左上角座標,而 widthheight則為切割區域的寬度與高度,例如:

# 僅顯示部份區域
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,其中 xy 為切割區域的左上角座標,而 widthheight則為切割區域的寬度與高度,例如:

# 僅轉出部份影像區域
bfconvert -crop 0,0,256,256 input.dcm output.tiff

bfconvert 預設轉出的影像都是沒有壓縮的,所以檔案大小會非常大,若要壓縮影像可以加上 -compression 參數並指定壓縮格式,例如:

# 以 LZW 壓縮格式壓縮影像
bfconvert -compression LZW input.dcm output.tiff

ImageJ 套件

Bio-Formats 有提供非常方便的 ImageJ 套件,只要從 Bio-Formats 網站上下載 ImageJ 的 JAR 套件檔案,然後在 ImageJ 主選單的「Plugins」中選擇「Install」安裝之後,即可使用。

ImageJ 使用 Bio-Formats 套件

ImageJ 使用 Bio-Formats 套件

在 ImageJ 中以 Bio-Formats 匯入影像時,會先出現這個選項視窗,裡面有各種匯入選項可以調整。

ImageJ 使用 Bio-Formats 套件

ImageJ 使用 Bio-Formats 套件

這就是以 Bio-Formats 將 DICOM 影像匯入 ImageJ 的樣子。

ImageJ 使用 Bio-Formats 套件匯入的 DICOM 影像

ImageJ 使用 Bio-Formats 套件匯入的 DICOM 影像

記憶體不足錯誤

在處理比較大的影像時,有可能會出現記憶體不足的錯誤訊息:

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