本頁說明如何使用 Cloud Healthcare API 儲存、存取、顯示及使用數位病理學全玻片影像 (WSI)。
總覽
數位病理學可將傳統玻璃片歸檔、視覺化呈現及評估,並整合至數位工作流程,徹底改變醫療影像技術。數位病理學的優點眾多,包括加快諮詢速度、讓病患更容易取得資訊並瞭解自身狀況,以及提升臨床和研究工作流程的效率,因為病理學影像可做為最先進 AI 的資料來源。
全玻片數位病理學是以一系列圖片呈現,其中最大的通常有數 GB。DICOM 是數位病理學的互通標準,可有效儲存全玻片成像和相關中繼資料,並從電子病歷 (例如 FHIR),並透過高效能的廠商中立 API 存取。
數位病理學的 DICOM 表示法旨在支援高效能的互動式用途,這類用途需要能夠快速平移和縮放十億像素的影像。DICOM 會以影像金字塔的形式呈現全玻片數位病理學。金字塔的層級對應於整張玻片成像的放大倍率。金字塔層級中呈現的影像會儲存為較小的圖片或影格集合。這項標準定義的 API 可用於圖片儲存、搜尋 (探索可用的影像)、中繼資料擷取,以及圖片擷取 整個金字塔層級 (放大) 或選取金字塔層級內的子區域 (影格)。
DICOM API 支援 JSON 和 XML 格式的中繼資料回應,Cloud Healthcare API 則額外支援透過 BigQuery 存取中繼資料,以便進行複雜的關聯查詢,將 DICOM 中繼資料與其他資料來源聯結。影像可以儲存或轉換 (轉碼) 為其他格式。
生成整張玻片的 DICOM 影像
越來越多數位病理學玻片掃描器支援直接從玻片掃描器生成 DICOM 影像。在許多情況下,您可以使用 DICOMweb 或 DIMSE DICOM API,將玻片掃描器產生的 DICOM 直接擷取到 Cloud Healthcare API。如果產生 DICOM 的玻片掃描器未連線至實驗室資訊系統 (LIS),可能需要擴增 DICOM 中的非像素中繼資料,以新增 (例如病患) 或修改 (例如Study Instance UID) 中繼資料,再用於臨床影像 PACS。
過去,投影片掃描器會以專有格式生成影像。轉換管道可用於將 OpenSlide 支援的格式轉換為 DICOM、將自訂中繼資料與產生的 DICOM 合併,以及將產生的 DICOM 直接匯入 Cloud Healthcare API。這項解決方案已用於支援將多 PB 封存資料轉換為 DICOM 格式。
可用於將數位病理學影像轉換為 DICOM 的工具包括:
您可以使用 DICOMweb、DIMSE 和 Cloud Storage,以程式輔助方式將 DICOM 執行個體匯入 Cloud Healthcare API。
映像檔儲存空間分層
Cloud Healthcare API 支援 DICOM 執行個體精細度的儲存層級。以全玻片成像為例,這表示數位病理圖像金字塔的每個放大倍率,都可以儲存在最符合預期用途的層級。DICOM 執行個體的儲存空間層級會影響資料儲存、擷取和刪除 (在某些情況下) 的費用。儲存層級不會影響資料存取效能。根據預設,所有 DICOM 執行個體都會儲存在標準儲存層。Cloud Healthcare API 提供 API,可供查看及變更 DICOM 執行個體的儲存空間類別。此外,您也可以使用影像生命週期管理 (ILM) 解決方案,根據啟發式方法自動在儲存層之間移動 DICOM 執行個體。這項解決方案可根據 DICOM 執行個體的大小、存在時間和存取模式,自動將其從一個儲存層移至下一個儲存層。
注意:封存儲存空間會增加像素資料的擷取成本。資料擷取費用是根據擷取的資料大小計算,而非儲存的資料大小。對於全玻片成像而言,這是重要的區別,因為可以使用影格和例項層級的 API 擷取像素資料。從成本角度來看,使用影格 API 擷取封存的影像特別有利,因為系統會根據傳回的資料大小計費,而非儲存的執行個體大小,因此如果只需要執行個體影格的子集,就能節省費用。
互動式視覺化
Cloud Healthcare API 可用於支援全玻片影像的互動式視覺化,適用於從零足跡網頁檢視器 (JavaScript) 到獨立用戶端應用程式等各種應用程式。我們測試過下列開放原始碼檢視器,確認與 Cloud Healthcare API 相容:
Open Source Google Viewer:由 Google Research 建立的開放原始碼數位病理檢視器,不佔用任何空間。
Slim (MGH):開放原始碼的零足跡數位病理檢視器,支援 NIH Imaging Data Commons。
QuPath:開放原始碼的電腦應用程式。
提升互動式視覺化效果的效能
數位病理 DICOM Proxy 是 Google Research 解決方案,可提升互動式全玻片成像應用程式的影格服務效能。部署後,Digital Pathology DICOM Proxy 會包裝 Cloud Healthcare API,並執行即時影格快取,優先從記憶體內 Memorystore for Redis 快取提供影格圖片。
全玻片成像色彩正規化
根據 DICOM 標準,WSI 必須包含定義影像擷取幻燈片掃描器色域的 ICC 色彩設定檔。這個色彩空間與螢幕或其他投影片掃描器使用的色彩空間明顯不同。如果沒有內嵌 ICC 設定檔就進行視覺化,圖片的色彩通常會比預期飽和或不飽和。Cloud Healthcare API 提供相關 API,可擷取 DICOM 執行個體內嵌的 ICC 設定檔,並將擷取的圖片轉換為參考色域。
您可以使用大量資料 API 或執行個體擷取 API,擷取 DICOM 執行個體內嵌的 ICC 設定檔。接著,您可以使用 Little-CMS(以 C++ 編寫) 和 Pillow (以 Python 編寫) 等程式庫,轉換在投影片掃描器色彩空間中擷取的圖片。
EZ-WSI DICOMweb Python 程式庫支援 ICC 設定檔轉換,這是圖像擷取和機器學習嵌入生成 API 的一部分。
機器學習
Path Foundation 是 Google 研究團隊開發的基礎模型,可加速數位病理學的機器學習 (ML) 開發作業。
模型會將病理影像的圖塊 (子區域) 轉換為嵌入內容,也就是浮點數清單。這項嵌入內容會做為圖片的機器學習表示法。使用圖片嵌入做為輸入資料,有助於減少開發有效 ML 模型所需的資料總量和運算資源。
您可以從 Model Garden 部署 Path Foundation。 Google Cloud 您也可以在 Hugging Face 上取得開放原始碼和開放權重的版本。
為協助生成嵌入內容,EZ-WSI DICOMweb 開放原始碼 Python 程式庫包含介面 (請參閱生成病理學嵌入內容的 Colab 筆記本入門指南),可簡化 Cloud Healthcare API 中儲存的影像轉換為嵌入內容的程序。如要瞭解如何使用 EZ-WSI DICOMweb 和 Pathology Foundations,從整張玻片 DICOM 影像訓練線性分類器,請參閱 Train a Digital Pathology Linear Classifier From Images Stored on DICOM Colab notebook。
以程式輔助方式擷取中繼資料和像素成像
本節說明如何從 Cloud Healthcare API 擷取數位病理學中繼資料和影像。
DICOM 資訊模型
DICOM 使用三種唯一 ID (UID) 來明確識別影像:
- 研究執行個體 UID:識別從單一病患檢查取得或產生的所有影像。
- 系列執行個體 UID:識別該檢查中的每項醫學影像擷取作業 (例如病理切片掃描)。
- SOP 執行個體 UID:識別擷取或生成為擷取作業一部分的每張圖片。
舉例來說,幻燈片掃描器通常會生成多張圖片,以擷取完整的玻璃幻燈片。這類圖片包括:
- 不同放大倍率下的組織成像區域。
- 投影片標籤。
- 整張投影片的圖片。
- 描述投影片掃描作業的資料。
列出數位病理學 DICOM 系列
如要找出玻片顯微鏡影像,請搜尋 Modality 標記 (0008,0060) 為 SM
的 DICOM 系列。您可以使用 dicomStores.searchForSeries
方法進行這項搜尋。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- LOCATION:資料集位置
- DATASET_ID:DICOM 儲存庫的父項資料集
- DICOM_STORE_ID:DICOM 儲存庫 ID
如要傳送要求,請選擇以下其中一個選項:
curl
執行下列指令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/series?Modality=SM"
PowerShell
執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/series?Modality=SM" | Select-Object -Expand Content
APIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
您應該會收到如下的 JSON 回應:
擷取數位病理學 DICOM 中繼資料
全玻片成像的 DICOM 系列通常包含多個檢查實例。這些 DICOM 執行個體可代表影像金字塔的不同層級,或成像投影片的其他區域。
如要查看研究中執行個體的執行個體中繼資料,請呼叫 dicomStores.searchForInstances
方法:
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- LOCATION:資料集位置
- DATASET_ID:DICOM 儲存庫的父項資料集
- DICOM_STORE_ID:DICOM 儲存庫 ID
- STUDY_INSTANCE_UID:研究例項專屬 ID (UID)
如要傳送要求,請選擇以下其中一個選項:
curl
執行下列指令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID"
PowerShell
執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID" | Select-Object -Expand Content
APIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
您應該會收到如下的 JSON 回應:
擷取全玻片成像像素資料
您可以使用 DICOMweb,以程式輔助方式擷取整張玻片影像的像素資料。Cloud Healthcare API 也支援透過 DICOM 轉接程式,使用 DIMSE 通訊協定擷取資料。
大多數全玻片影像都是多畫格影像。對於這些資料,Cloud Healthcare API 可透過 DICOM 影格和算繪影格 API 直接存取像素資料。
或者,您也可以擷取整個 DICOM 例項,然後以程式輔助方式解碼該例項中的編碼影格,間接擷取像素資料。
擷取影格的效能注意事項:
- 相較於批次擷取影格,擷取整個執行個體通常每個影格的速度較快。
- 一般來說,批次擷取影格的速度會比擷取個別影格更快。
EZ-WSI DICOMweb
EZ-WSI DICOMweb 是開放原始碼 Python 程式庫。這項工具會將基礎 DICOMweb 呼叫作業抽象化,簡化從 Cloud Healthcare API 擷取數位病理學像素資料的程序。在許多情況下,這個程式庫可將連續的圖片要求轉換為批次要求,有助於加快影格擷取速度。批次擷取影格資料通常可減少總時間和 DICOM 儲存庫配額。
我們提供展示程式庫的 Colab 筆記本。
DICOMweb 執行個體擷取 API
DICOMweb 執行個體擷取 API 會傳回二進位 DICOM 執行個體。這個執行個體包含儲存在其中的所有中繼資料和像素資料。
您可以使用各種程式庫解碼傳回的二進位資料,例如:
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- LOCATION:資料集位置
- DATASET_ID:DICOM 儲存庫的父項資料集
- DICOM_STORE_ID:DICOM 儲存庫 ID
- STUDY_INSTANCE_UID:研究執行個體的專屬 ID
- SERIES_INSTANCE_UID:系列執行個體的專屬 ID
- INSTANCE_UID:執行個體專屬 ID
- OUTPUT_FILE:要將 DICOM 執行個體寫入的檔案。
如要傳送要求,請選擇以下其中一個選項:
curl
執行下列指令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/dicom" \
--output OUTPUT_FILE \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"
PowerShell
執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "application/dicom" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-OutFile OUTPUT_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"
APIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
OUTPUT_FILE
檔案應填入內容
DICOMweb 影格 API
DICOMweb 影格 API 可從 DICOM 執行個體擷取一或多個影格。使用 API 擷取的 Pixel 資料可要求轉碼為 DICOM 存放區原生儲存格式以外的格式。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- LOCATION:資料集位置
- DATASET_ID:DICOM 儲存庫的父項資料集
- DICOM_STORE_ID:DICOM 儲存庫 ID
- STUDY_INSTANCE_UID:研究執行個體的專屬 ID
- SERIES_INSTANCE_UID:系列執行個體的專屬 ID
- INSTANCE_UID:執行個體專屬 ID
- FRAMES:要擷取像素資料的影格編號
如要傳送要求,請選擇以下其中一個選項:
curl
執行下列指令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAMES"
PowerShell
執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAMES" | Select-Object -Expand Content
APIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
DICOMweb 算繪影格 API
DICOMweb 算繪影格 API 可在伺服器端將影格轉換為標準圖片格式 (例如 JPEG 和 PNG)。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- LOCATION:資料集位置
- DATASET_ID:DICOM 儲存庫的父項資料集
- DICOM_STORE_ID:DICOM 儲存庫 ID
- STUDY_INSTANCE_UID:研究執行個體的專屬 ID
- SERIES_INSTANCE_UID:系列執行個體的專屬 ID
- INSTANCE_UID:執行個體專屬 ID
- FRAME:要擷取像素資料的影格編號
如要傳送要求,請選擇以下其中一個選項:
curl
執行下列指令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: image/png" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAME/rendered"
PowerShell
執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "image/png" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAME/rendered" | Select-Object -Expand Content
APIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
使用擷取大量資料功能,擷取內嵌於 DICOM 執行個體中的 ICC 設定檔
您可以透過 DICOMweb 擷取大量資料,直接擷取內嵌在 DICOM 執行個體中的 ICC (國際色彩聯盟) 設定檔位元組。
REST
使用任何要求資料之前,請先替換以下項目:
- PROJECT_ID:您的 Google Cloud 專案 ID
- LOCATION:資料集位置
- DATASET_ID:DICOM 儲存庫的父項資料集
- DICOM_STORE_ID:DICOM 儲存庫 ID
- STUDY_INSTANCE_UID:研究執行個體的專屬 ID
- SERIES_INSTANCE_UID:系列執行個體的專屬 ID
- INSTANCE_UID:執行個體專屬 ID
- OUTPUT_FILE:要將 icc 設定檔例項寫入的檔案。
如要傳送要求,請選擇以下其中一個選項:
curl
執行下列指令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/octet-stream; transfer-syntax=*" \
--output OUTPUT_FILE \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/00480105/0/00282000"
PowerShell
執行下列指令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "application/octet-stream; transfer-syntax=*" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-OutFile OUTPUT_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/00480105/0/00282000"
APIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
OUTPUT_FILE
檔案應填入內容