介紹如何使用 Python 的 OpenPhi 模組,讀取 PHILIPS iSyntax 格式的數位病理全玻片影像(WSI)。
PHILIPS iSyntax
iSyntax 是 PHILIPS 公司所使用的 WSI 影像格式,應用小波轉換技術加速 WSI 影像縮放與平移動作,並且也避免了「金字塔」格式在低倍率圖像的冗餘存儲,大幅降低影像檔案大小,降幅達 25%,除此之外 iSyntax 格式也沒有位元深度(bit-depths)與通道(channels)數上限,詳細的說明可以參考 PHILIPS Pathology SDK。
安裝 PHILIPS Pathology SDK
若要使用 Python 的 OpenPhi 模組讀取 PHILIPS iSyntax 格式的 WSI 影像,需要先安裝 PHILIPS Pathology SDK,請從 PHILIPS 網站 下載 Philips Pathology SDK 的安裝檔案 PathologySDK_2.0-L1_Packages.zip,解壓縮之後進行安裝。
Pathology SDK 對於 Python 的版本有嚴格的限制,以 Ubuntu Linux 20.04 來說,需要 Python 3.8 版,安裝前要先檢查 Python 的版本:
# 檢查 Python 版本
python3 --version
Python 3.8.10
其他作業系統與版本資訊請參考 Pathology SDK 的說明手冊。
解壓縮下載的 PathologySDK_2.0-L1_Packages.zip 壓縮檔:
# 解壓縮 ZIP 檔案
unzip PathologySDK_2.0-L1_Packages.zip
在 PathologySDK_2.0-L1_Packages 目錄中包含了各種作業系統的安裝檔,進入 Ubuntu20.04 目錄並解壓縮 python 的 research 版本:
# 進入對應的作業系統目錄
cd PathologySDK_2.0-L1_Packages/Ubuntu20.04/
# 解壓縮 ZIP 檔案
unzip philips-pathologysdk-2.0-L1-ubuntu20_04_py38_research.zip
進入安裝檔目錄,啟用安裝檔的執行權限後,以管理者權限執行安裝:
# 進入安裝檔目錄
cd philips-pathologysdk-2.0-L1-ubuntu20_04_py38_research/
# 啟用執行權限
chmod +x InstallPathologySDK.sh
# 以管理者權限執行安裝
sudo ./InstallPathologySDK.sh
安裝完成後,要確認是否有以下安裝成功的訊息:
PathologySDK2.0-L1 successfully installed
安裝 OpenPhi 模組
安裝完成 Philips Pathology SDK 之後,接著以 pip 安裝 OpenPhi 模組。
# 安裝 OpenPhi 模組
pip3 install openphi
安裝完成之後,即可使用 OpenPhi 模組撰寫 Python 指令稿讀取 PHILIPS iSyntax 的 WSI 影像了,詳細的說明可以參考 OpenPhi 的網站。
基本範例
下載 iSyntax 格式的 WSI 影像範例檔案:
# 下載 iSyntax 格式的 WSI 影像範例檔案
wget https://www.ectopic.eu/files/sample.isyntax
以下是一個使用 OpenPhi 模組讀取 PHILIPS iSyntax 的 WSI 影像的範例:
from openphi import OpenPhi
# 讀取 iSyntax 影像檔案
im = OpenPhi("sample.isyntax")
# 取得層級數,以及各層級解析度與降解析度因子
numlevels = im.level_count
dimensions = im.level_dimensions
downsamples = im.level_downsamples
# 取得一些後設資料
pixelsize = im.properties['openslide.mpp-x']
scanningtime = im.properties['DICOM_ACQUISITION_DATETIME']
# 取得標註與巨觀影像
labelim = im.associated_images['label']
macroim = im.associated_images['macro']
# 取得解析度不超過 2000x2000 的縮圖
thumbnail = im.get_thumbnail(size=(2000,2000))
# 讀取層級 3 的整張 WSI 影像,背景設為白色
wsi = im.read_wsi(level=3, bgvalue=255, channels="RGB")
# 讀取座標位置為 (4000,2000) 大小為 512x512 的一塊 tile 影像
tile = im.read_region(location=(4000,2000), level=0, size=(512,512))
# 關閉影像
im.close()
這裡讀取出來的影像都是 pillow 的 Image 類型,若要對影像作進一步處理或顯示,可以參考 pillow 的網站說明。
