デジタル病理での Cloud Healthcare API の使用

このページでは、Cloud Healthcare API を使用してデジタル病理のスライド画像全体(WSI)を保存、アクセス、可視化、使用する方法について説明します。

概要

デジタル病理は、従来のガラス スライドをデジタル ワークフロー全体でアーカイブ、可視化、評価できるようにすることで、医療画像処理を変革しています。デジタル病理学には多くの利点がありますが、特に大きな利点は、迅速なコンサルテーション、患者のアクセスと理解の向上、病理画像が最先端の AI のデータソースになることで臨床ワークフローと研究ワークフローの強化を実現できることです。

全体スライド デジタル病理は、画像のコレクションとして表されます。通常、最も大きいものは数ギガバイトのサイズになります。DICOM は、デジタル病理学の相互運用可能な標準であり、全体スライド画像とその関連メタデータを効率的に保存し、電子カルテ(FHIR)で、パフォーマンスに優れたベンダー ニュートラルな API を介してアクセスされます。

デジタル病理学の DICOM 表現は、ギガピクセル画像全体をすばやくパンとズームできる機能を必要とする、高性能なインタラクティブ ユースケースをサポートするように設計されています。DICOM は、全体スライドのデジタル病理を画像ピラミッドとして表します。ピラミッドのレベルは、スライド全体のイメージングの倍率に対応しています。ピラミッド レベル内で表現される画像は、小さな画像(フレーム)のコレクションとして保存されます。この標準では、イメージの保存検索(利用可能なイメージングの検出)、メタデータの取得、イメージの取得ピラミッド レベル全体(拡大)、またはピラミッド レベル内のサブリージョン(フレーム)の選択を可能にする API を定義しています。

DICOM API は JSON と XML のメタデータ レスポンスをサポートしています。また、Cloud Healthcare API は BigQuery を介したメタデータ アクセスもサポートしており、DICOM メタデータと他のデータソースを結合する複雑なリレーショナル クエリを実行できます。画像は、保存された形式で返すことも、別の形式に変換(トランスコード)することもできます。

全体スライド DICOM 画像を生成する

デジタル病理スライド スキャナの多くは、スライド スキャナから DICOM 画像を直接生成することをサポートしています。多くの場合、スライド スキャナで生成された DICOM は、DICOMweb または DIMSE DICOM API を使用して Cloud Healthcare API に直接取り込むことができます。DICOM を生成するスライド スキャナが Laboratory Information System(LIS)に接続されていない場合は、DICOM の非ピクセル メタデータを拡張して、(患者などの)追加や(スライド ID などの)変更を行う必要がある場合があります。臨床画像処理 PACS で使用する前に、Study Instance UID)メタデータを削除します。

従来、スライド スキャナは独自の形式で画像を生成していました。変換パイプラインを使用すると、OpenSlide でサポートされている形式を DICOM に変換し、カスタム メタデータを生成された DICOM と統合して、生成された DICOM を Cloud Healthcare API に直接取り込むことができます。このソリューションは、マルチペタバイトのアーカイブを DICOM に変換するために使用されています。

デジタル病理画像処理を DICOM に変換するために使用できるツールは次のとおりです。

DICOM インスタンスは、DICOMwebDIMSECloud Storage を使用して Cloud Healthcare API にプログラムでインポートできます。

イメージ ストレージの階層化

Cloud Healthcare API は、DICOM インスタンスの粒度でストレージ階層化をサポートしています。ホールスライド イメージングの場合、デジタル病理画像ピラミッドの各倍率を、想定される用途に最適な階層に保存できます。DICOM インスタンスのストレージ ティアは、データの保存、取得、場合によっては削除の費用に影響します。ストレージの階層化は、データ アクセスのパフォーマンスに影響しません。デフォルトでは、すべての DICOM インスタンスは Standard ストレージ階層に保存されます。Cloud Healthcare API は、DICOM インスタンスのストレージ クラスを表示および変更するための API を提供します。また、イメージ ライフサイクル管理(ILM)ソリューションを使用して、ヒューリスティックに基づいてストレージ ティア間で DICOM インスタンスの移動を自動化することもできます。このソリューションでは、DICOM インスタンスのサイズ、経過時間、アクセス パターンに基づいて、ストレージ階層間の移行を自動化できます。

注: アーカイブ ストレージを使用すると、ピクセルデータの取得費用が増加します。データ取得料金は、保存されたデータのサイズではなく、取得されたデータのサイズに対して支払われます。全スライド イメージングでは、フレームレベルとインスタンス レベルの両方の API を使用してピクセルデータを取得できるため、この区別は重要です。フレーム API を使用してアーカイブ イメージングを取得することは、インスタンスのフレームのサブセットがデータとして必要な場合に、費用面で特に有利です。これは、データ取得の料金が、保存されたインスタンスのサイズではなく、返されたデータのサイズに基づいて請求されるためです。

インタラクティブな可視化

Cloud Healthcare API を使用すると、フットプリントのないウェブ ビューア(JavaScript)からスタンドアロン クライアント アプリケーションまで、さまざまなアプリケーションでスライド画像全体のインタラクティブな可視化をサポートできます。次のオープンソース ビューアは、Cloud Healthcare API との互換性がテストされています。

インタラクティブな可視化のパフォーマンスを改善する

Digital Pathology DICOM Proxy は、インタラクティブな全体スライド画像アプリケーションのフレーム サービングのパフォーマンスを向上させるために使用できる Google Research ソリューションです。デプロイすると、デジタル病理 DICOM プロキシは Cloud Healthcare API をラップし、ジャストインタイム フレーム キャッシュ保存を実行して、インメモリの Memorystore for Redis キャッシュからフレーム画像を優先的に提供します。

全体スライド イメージングの色正規化

DICOM 標準では、WSI に、画像を取得したスライド スキャナの色空間を定義する ICC カラー プロファイルを含めることが求められています。この色空間は、ディスプレイや他のスライド スキャナで使用される色空間とは大きく異なる場合があります。埋め込み ICC プロファイルなしで視覚化すると、画像の彩度が想定よりも大幅に高くなったり低くなったりすることがよくあります。Cloud Healthcare API は、DICOM インスタンスに埋め込まれた ICC プロファイルを取得し、取得した画像をリファレンス カラー空間に変換する API を提供します。

  • DICOM インスタンスに埋め込まれた ICC プロファイルは、一括データ API またはインスタンス取得 API を使用して取得できます。スライド スキャナの色空間で取得した画像を、Little-CMS(C++ で記述)や Pillow(Python で記述)などのライブラリを使用して変換できます。

  • EZ-WSI DICOMweb Python ライブラリは、画像取得と ML エンベディング生成 API の一部として ICC プロファイル変換をサポートしています。

機械学習

Path Foundation は、デジタル病理学における ML 開発を加速するために Google Research が開発した基盤モデルです。

このモデルは、病理画像のパッチ(サブリージョン)をエンベディング(浮動小数点数のリスト)に変換します。このエンベディングは、画像の機械学習表現として機能します。画像エンベディングを入力データとして使用すると、効果的な ML モデルの開発に必要なデータとコンピューティング リソースの総量を削減できます。

Path Foundation は、Model Garden から Google Cloud にデプロイできます。Hugging Face でオープン ウェイトのオープンソースとしても利用できます。

エンベディングの生成を支援するため、EZ-WSI DICOMweb オープンソース Python ライブラリには、Cloud Healthcare API に保存されているイメージングをエンベディングに変換するプロセスを簡素化するインターフェース(病理学エンベディングの生成に関する Colab ノートブックのスタートガイドを参照)が含まれています。EZ-WSI DICOMweb と Pathology Foundations を使用して全体スライド DICOM 画像から線形分類子をトレーニングする方法については、DICOM Colab ノートブックに保存された画像からデジタル病理線形分類子をトレーニングするをご覧ください。

メタデータとピクセル イメージングをプログラムで取得する

このセクションでは、Cloud Healthcare API からデジタル病理のメタデータと画像を取得する方法について説明します。

DICOM 情報モデル

DICOM は、3 つの Unique Identifier(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

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

次のような 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

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

次のような JSON レスポンスが返されます。

全体スライド イメージングのピクセルデータを取得する

DICOMweb を使用して、全体スライド イメージングのピクセルデータをプログラムで取得できます。Cloud Healthcare API は、DIMSE プロトコルを使用する DICOM アダプタを介した取得もサポートしています。

ほとんどの全体スライド画像はマルチフレーム画像です。これらの場合、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: スタディ インスタンスの一意の識別子
  • SERIES_INSTANCE_UID: シリーズ インスタンスの一意の識別子
  • INSTANCE_UID: インスタンスの一意の識別子
  • 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"

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

OUTPUT_FILE ファイルにコンテンツを入力する必要があります

DICOMweb フレーム API

DICOMweb フレーム API を使用すると、DICOM インスタンスから 1 つ以上のフレームを取得できます。API を使用して取得したピクセルデータは、DICOM ストアにネイティブに保存されている形式以外の形式にトランスコードされることがあります。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID
  • STUDY_INSTANCE_UID: スタディ インスタンスの一意の識別子
  • SERIES_INSTANCE_UID: シリーズ インスタンスの一意の識別子
  • INSTANCE_UID: インスタンスの一意の識別子
  • 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

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

リクエストされたイメージングをエンコードするマルチパート レスポンスが返されます。

DICOMweb レンダリング フレーム API

DICOMweb レンダリング フレーム API を使用すると、フレームを 標準画像形式(JPEG と PNG)。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID
  • STUDY_INSTANCE_UID: スタディ インスタンスの一意の識別子
  • SERIES_INSTANCE_UID: シリーズ インスタンスの一意の識別子
  • INSTANCE_UID: インスタンスの一意の識別子
  • 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

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

リクエストされたイメージングをエンコードするバイナリ レスポンスが返されます。

バルクデータ取得を使用して DICOM インスタンスに埋め込まれた ICC プロファイルを取得する

DICOMweb retrieve bulkdata を使用すると、DICOM インスタンス内に埋め込まれた ICC(International Color Consortium)プロファイル バイトを直接取得できます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID
  • STUDY_INSTANCE_UID: スタディ インスタンスの一意の識別子
  • SERIES_INSTANCE_UID: シリーズ インスタンスの一意の識別子
  • INSTANCE_UID: インスタンスの一意の識別子
  • 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"

API Explorer

メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。

OUTPUT_FILE ファイルにコンテンツを入力する必要があります