DICOMの基本概念DICOM(Digital Imaging and Communications in Medicine:医療におけるデジタル画像および通信)は、デジタル医用画像および通信に関する国際標準規格です。医用画像および関連するテキスト情報やデータ情報の記述、伝送、保存、取得、印刷、表示に使用されます。米国電機工業会(NEMA)と医療機器工業会(MITA)によって開発されたDICOM規格は、医用画像処理および管理における世界標準となっています。 DICOM規格は、異なるデバイスやシステム間での医用画像とデータのシームレスな相互運用性を定義します。これは、画像と関連情報の完全性と正確性を確保しながら、異なるメーカーのデバイス間で画像を転送・共有できることを意味します。#dicom#規格は、CT、MRI、X線、超音波、核医学など、様々な医用画像診断法をサポートしています。 DICOM規格は、ファイル形式、データ要素、サービスクラス、ネットワークプロトコルなど、様々な側面を網羅しており、様々なプログラミング言語やソフトウェアライブラリを用いて実装・適用できます。一般的なDICOMソフトウェアライブラリには、fo-dicom、dcmtk、GDCM、dcm4che、pydicomなどがあります。 2023年12月現在、DICOMの最新バージョンはDICOM 3.0です。DICOM規格は、医療画像および通信技術の発展に合わせて、リリース以来継続的に更新・改訂されており、新機能の追加や既存機能の改良が行われています。そのため、DICOMのバージョンは時間の経過とともに変更される可能性があります。 fo-dicom は DICOM 標準の基本要件をどのように満たしていますか?fo-dicomは、DICOM規格に準拠したC#実装ライブラリです。DICOM規格の基本要件を満たしており、以下の要件を満たしています。
開発を始める前に、fo-dicom 構築の基本的な概念をいくつか理解しましょう。 1. DicomElement: fo-dicomにおいて、DicomElementはDICOMデータセット内の単一の要素を表すために使用されるクラスです。各DICOM要素は、タグ、値、およびその他の属性で構成されます。 タグ: DICOMタグは、DICOMデータセット内の各要素を識別するために使用される、2つの16ビット数値で構成される一意の識別子です。タグは「XXXX,XXXX」という形式で表されます。ここで、「XXXX」は16ビットの16進数値です。タグは、ピクセル値、画像の位置、患者情報など、データのさまざまな属性を表すことができます。 例えば、Tag.SOPClassUIDはSOPクラスを表すラベルです。その値は0008,0016であり、すべてのDICOMデータセットには、データセット内のSOPカテゴリを指定するためにこのラベルが含まれている必要があることを示しています。 値: DicomElementクラスのValueプロパティは、DICOM要素の値を保持します。この値は単一の値、または複数の値のシーケンスになります。複数の値のシーケンスの場合は、DicomSequenceクラスを使用してシーケンス内の各要素を表すことができます。 たとえば、 DICOM 要素の値が文字列の場合、 DicomElement.GetString()メソッドを使用して文字列値を取得できます。 VR (値表現): VR プロパティは、DICOM 要素の値のデータ型を示します。 たとえば、DicomVR.PN は人の名前の表現方法を表します。 VM (値の多重度): VM 属性は、DICOM 要素に許可される値の数を示します。 たとえば、DicomVR.PN の VM プロパティは1 です。これは、Person Name に許可される値が 1 つだけであることを意味します。 長さ (値の長さ): 長さ属性は、DICOM 要素値の長さをバイト単位で示します。 例えば、 DICOMデータセットに患者名を表す要素があり、ラベルは0010,0010 、値は「John Doe」であるとします。fo-dicomでは、この要素は以下の方法で作成およびアクセスできます。 DicomElement を使用すると、DICOM データセット内の各要素のラベル、値、その他の属性に簡単にアクセスして操作できます。 2. Dicomデータセット:fo-dicomにおいて、DicomDatasetは完全なDICOMデータセットを表すために使用されるクラスです。DICOMデータセットは複数のDICOM要素で構成され、各要素は固有のタグと対応する値を持ちます。DicomDatasetは、DICOMデータセットの処理、読み取り、および書き込み機能を提供します。 DicomDataset クラスには、次の機能と関数があります。
例えば、患者名と患者IDを含むDICOMデータセットがあるとします。DicomDatasetクラスを使用して、これらの要素を作成し、アクセスできます。 DicomDatasetを使用すると、DICOMデータセット内の要素を簡単に作成、アクセス、操作できます。この機能により、fo-dicomにおけるDICOMデータ処理がよりシンプルかつ効率的になります。 3. Dicomファイル:fo-dicomにおいて、DicomFile(DICOMファイル)はDICOMファイルを表すクラスです。DICOMファイルは通常、拡張子.dcmまたは.dicomで保存され、完全なDICOMデータセットを含んでいます。DicomFileクラスは、DICOMファイルの読み書き機能を提供します。 DicomFile クラスには、次の特性と機能があります。
たとえば、患者の名前と患者 ID を含む DICOM データセットがあるとします。この場合、DicomFile クラスを使用してそれをディスクに保存できます。 あるいは、ディスクから DICOM ファイルを読み取り、DicomDataset オブジェクトに変換することもできます。 DicomFileを使用すると、DICOMファイルを簡単に読み書きし、その内容をDicomDatasetオブジェクトに変換できます。この機能により、fo-dicomにおけるDICOMデータ処理がよりシンプルかつ効率的になります。 4. ディコムタグ:fo-dicomにおいて、DicomTagはDICOMデータセット内の要素識別子を表すために使用されるクラスです。各DICOM要素には、要素の型、値、長さ、位置などの情報を指定する一意のタグが付与されます。 DicomTag クラスには、次の特性と機能があります。
例えば、患者名と患者IDを含むDICOMデータセットがあるとします。DicomTagクラスを使用して、これらの要素を作成し、アクセスできます。 DicomTagを使用すると、DICOMデータセット内の要素識別子を簡単に作成、アクセス、操作できます。この機能により、fo-dicomにおけるDICOMデータ処理がよりシンプルかつ効率的になります。 DICOM規格の新しいバージョンには、新しいDICOMラベルの追加や古いラベルの削除が含まれる場合があることに特に注意が必要です。DICOM規格は、医療分野のニーズと技術の進歩に合わせて常に進化しています。DICOM規格は、国際電気標準会議(IEC)と国際標準化機構(ISO)によって共同で開発・管理されており、業界の幅広い参加と専門家によるレビューを受けています。DICOM規格の新しいバージョンはそれぞれ、医療現場のニーズと技術開発に基づいて更新・拡張されています。DICOM規格の新しいバージョンでは通常、新しい画像、測定値、機能などをサポートするために新しいラベルが導入されています。これらの新しいラベルは、新しい医療機器、新しい画像処理アルゴリズム、または新しいデータ要件を説明するために使用できます。 同時に、古いバージョンのDICOMラベルは削除または廃止される可能性があります。一部のラベルは、時代遅れになったり、現在の医療慣行に適合しなくなったりしたため、新しいバージョンでは使用できなくなる場合があります。このような変更により、DICOM規格の正確性、一貫性、および適応性が確保されます。 したがって、DICOMデータセットを正しく解釈・処理するには、最新のDICOM規格を理解し、常に最新の状態を維持することが重要です。開発者とユーザーは、DICOM規格の最新バージョンを常に把握し、使用するライブラリやツールがそのバージョンをサポートしていることを確認して、最適な互換性と機能性を確保する必要があります。 5. DicomServiceClass(DICOMサービスクラス) :fo-dicomにおいて、DicomServiceはDICOMネットワーク通信に関連するサービスを表す抽象クラスです。DICOM接続の確立、DICOM操作の実行、およびDICOMデータの処理のための一連のメソッドとプロパティを提供します。 DicomService には次の基本概念が含まれています。
例えば、DicomServerクラスはfo-dicomの具象クラスであり、DICOMサーバーを実装するために使用されます。以下にサンプルコードを示します。 上記の例では、DicomServerインスタンスを作成し、AEタイトルやリスニングポートなどのサーバーパラメータを設定しました。次に、OnConnectionRequestイベントをサブスクライブして、受信した接続要求を処理しました。接続要求を受信すると、対応するメッセージを出力し、接続を承認しました。また、OnCStoreRequestイベントをサブスクライブしてストレージ要求を処理しました。ストレージ要求を受信すると、患者名を出力し、ストレージ応答を送信しました。最後に、サーバーを起動し、接続のリッスンを開始しました。 DicomServerなどのDicomServiceの特定の実装を使用することで、カスタムDICOMサーバーまたはクライアントを容易に実装し、DICOM通信に関連する様々な操作やイベントを処理できます。これにより、fo-dicomにおけるDICOMネットワーク通信はより柔軟でカスタマイズ可能になります。 これはDICOM通信において非常に重要な部分です。この部分については後ほど詳しく分析し、皆さんに共有したいと思います。 6. ディコムイメージ:fo-dicomにおいて、DicomImageはDICOM画像データを表すために使用されるクラスです。DICOM画像の読み込み、表示、操作のための一連のメソッドとプロパティを提供します。 DicomImage には次の基本概念が含まれています。
たとえば、 DicomImage クラスを使用する場合のサンプル コードは次のようになります。 上記の例では、まずDicomFileクラスを使用してDICOMファイルから画像データセットを読み取り、次にDicomImageインスタンスを作成し、データセットをパラメータとして渡します。次に、GetPixelDataメソッドを使用してピクセルデータの配列を取得し、pixelData変数に格納します。最後に、WpfImageViewerコントロールを使用して画像を表示します。 DicomImageクラスを使用すると、DICOM画像データの読み込み、表示、処理が簡単に行えます。これにより、fo-dicomにおけるDICOM画像処理がより便利かつ効率的になります。 要約上記で紹介した基本概念は、扱われる多くのトピックのほんの一部に過ぎません。しかし、これらの概念はfo-dicomの使用時に頻繁に参照されるため、DICOMデータを正常に処理するには、その意味と使用方法を理解することが重要です。 |