CSV、JSON、XMLからカスタマイズされたDICOM匿名化プロファイルを作成する方法

CSV、JSON、XMLからカスタマイズされたDICOM匿名化プロファイルを作成する方法

このチュートリアルでは、C#でCSV、JSON、またはXMLファイルを使用してカスタマイズされたDICOM匿名化プロファイルを作成する方法を示しています。

なぜカスタマイズされたプロフィールを作るのか?

既定の DICOM PS3.15 プロファイルは、すべての機関の要件を満たすことはできません。

  • 内部追跡性のための特定の機関識別を保持する
  • 組織特定のプライバシー規則の適用
  • あなたの管轄区域における独特の規制要件を満たす

Tag 行動説明

DICOM タグに以下のアクションが適用されます。

アクションコード説明
削除Dデータセットからタグを完全に削除する
ゼロZ値を空の値またはゼロ値に置き換える
削除X既存の場合(削除に似ている)
KeepKオリジナルの価値を変えずに保存する
CleanC識別情報を削除することによって値を清める
UIDに置き換えるU新しく生成された UID を置き換える

原題: Preparing the Environment

  • Visual Studio または 互換性のある .NET IDE を設定します.
  • 新しい .NET 8 コンソールアプリケーションプロジェクトを作成します。
  • NuGet Package Manager から Aspose.Medical をインストールします。
  • あなたのカスタマイズされたプロフィール定義ファイルを準備します。

Step-by-step プロフィールを作成するためのガイド

ステップ1:インストール Aspose.Medical

NuGet を使用してプロジェクトに Aspose.Medical ライブラリを追加します。

Install-Package Aspose.Medical

ステップ2: CSV プロフィールの定義を作成する

タグパターンおよびアクションを含む CSV ファイルを作成します. 各行はタブとその行動を指定します。

プロフィール.csv:**

TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0010,0030);X
(0010,0040);K
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0080);D
(0008,0081);D
(0008,1030);C

<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“コピーコード”

<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>

このプロフィール:

  • Zeros 患者名とID
  • 生年月日削除
  • 病気のセックス
  • 研究、シリーズ、およびSOPインスタンスUIDを置き換える
  • 機関情報の削除
  • クリーン研究の説明

ステップ3: JSON プロフィールの定義を作成する(代替)

同じタグの定義を持つJSONファイルを作成します。

プロフィール・JSON:

[
  { "TagPattern": "(0010,0010)", "Action": "Z" },
  { "TagPattern": "(0010,0020)", "Action": "Z" },
  { "TagPattern": "(0010,0030)", "Action": "X" },
  { "TagPattern": "(0010,0040)", "Action": "K" },
  { "TagPattern": "(0020,000D)", "Action": "U" },
  { "TagPattern": "(0020,000E)", "Action": "U" },
  { "TagPattern": "(0008,0018)", "Action": "U" },
  { "TagPattern": "(0008,0080)", "Action": "D" },
  { "TagPattern": "(0008,0081)", "Action": "D" },
  { "TagPattern": "(0008,1030)", "Action": "C" }
]

ステップ4: XML プロフィールの定義を作成する(代替)

同じタグの定義を持つ XML ファイルを作成します。

プロフィール.xml:**

<?xml version="1.0" encoding="utf-8"?>
<ConfidentialityProfile>
  <TagAction TagPattern="(0010,0010)" Action="Z" />
  <TagAction TagPattern="(0010,0020)" Action="Z" />
  <TagAction TagPattern="(0010,0030)" Action="X" />
  <TagAction TagPattern="(0010,0040)" Action="K" />
  <TagAction TagPattern="(0020,000D)" Action="U" />
  <TagAction TagPattern="(0020,000E)" Action="U" />
  <TagAction TagPattern="(0008,0018)" Action="U" />
  <TagAction TagPattern="(0008,0080)" Action="D" />
  <TagAction TagPattern="(0008,0081)" Action="D" />
  <TagAction TagPattern="(0008,1030)" Action="C" />
</ConfidentialityProfile>

ステップ5:カスタムプロフィールをアップロード

ファイル形式の適切な方法を使用してカスタマイズされたプロフィールをアップロードします。

using Aspose.Medical.Dicom.Anonymization;

// Load from CSV
ConfidentialityProfile profileFromCsv = ConfidentialityProfile.LoadFromCsvFile(
    "profile.csv", 
    ConfidentialityProfileOptions.All
);

// Or load from JSON
ConfidentialityProfile profileFromJson = ConfidentialityProfile.LoadFromJsonFile(
    "profile.json", 
    ConfidentialityProfileOptions.All
);

// Or load from XML
ConfidentialityProfile profileFromXml = ConfidentialityProfile.LoadFromXmlFile(
    "profile.xml", 
    ConfidentialityProfileOptions.All
);

ステップ6:カスタムプロフィールを適用

アップロードされたプロフィールを含む Anonymizer を作成し、DICOM ファイルに適用します。

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;

// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
    "profile.csv", 
    ConfidentialityProfileOptions.All
);

// Create anonymizer with custom profile
Anonymizer anonymizer = new(profile);

// Load and anonymize DICOM file
DicomFile dcm = DicomFile.Open("patient_study.dcm");
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);
anonymizedDcm.Save("anonymized_study.dcm");

CSV プロフィールで完全なコード サンプル

以下は、CSVベースのカスタマイズプロファイルを使用する完全な例です。

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;

// Load custom confidentiality profile from CSV
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
    "hospital_privacy_profile.csv",
    ConfidentialityProfileOptions.All
);

// Create anonymizer with the custom profile
Anonymizer anonymizer = new(profile);

// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");

// Anonymize using custom profile
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);

// Save result
anonymizedDcm.Save("anonymized_scan.dcm");

Console.WriteLine("Anonymization completed with custom profile!");

実用的なシナリオ例

シナリオ1:内部トラッキングのためのRetain Institution ID

TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);K

シナリオ2:関係を維持しながらすべてのUIDを置き換える

TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);K

シナリオ3:外部共有のための最大限のプライバシー

TagPattern;Action
(0010,0010);X
(0010,0020);X
(0010,0030);X
(0010,0040);X
(0008,0080);X
(0008,0081);X
(0008,1030);X
(0008,103E);X

認証:あなたのカスタムプロフィールをテストする

生産使用前に常にカスタマイズされたプロフィールを確認する:

using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;

// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
    "test_profile.csv",
    ConfidentialityProfileOptions.All
);

Anonymizer anonymizer = new(profile);

// Test with sample files
string[] testFiles = Directory.GetFiles("test_samples", "*.dcm");

foreach (string filePath in testFiles)
{
    try
    {
        DicomFile dcm = DicomFile.Open(filePath);
        DicomFile anonymized = anonymizer.Anonymize(dcm);
        
        string outputPath = Path.Combine("test_output", Path.GetFileName(filePath));
        anonymized.Save(outputPath);
        
        Console.WriteLine($"✓ Processed: {Path.GetFileName(filePath)}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"✗ Failed: {Path.GetFileName(filePath)} - {ex.Message}");
    }
}

Console.WriteLine("\nValidation complete. Review output files in DICOM viewer.");

Troubleshooting

無効ファイルパス

プロフィールファイルが見つからない場合:

string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
    Console.WriteLine($"Profile file not found: {profilePath}");
    return;
}

Invalid Tag パターンまたはアクション

タグパターンはフォーマットに従う (GGGG,EEEE) GGGGはグループであり、EEEEはヘクサデシマルの要素です。有効な行動は:D、Z、X、K、C、U。

カスタマイズされたプロフィールのための最良の実践

  • バージョンコントロール: 時間の経過とともに変更を追跡するために、バジョンのコードにプロフィールファイルを保存します。
  • ドキュメンタリー: 各タグに特定のアクションが選ばれた理由を説明するコメントを追加します。
  • テスト: DICOM ファイルの生産に適用する前に試験データを含むプロフィールを確認します。
  • バックアップ:常にオリジナルのプロフィールファイルのバッグを保存します。
  • レビュー:規制要件をまだ満たしていることを確認するために定期的にプロフィールを検討します。

追加情報

  • さまざまな使用ケース(内部共有、外部研究など)のための複数のプロファイルを作成することを検討します。
  • プロフィールが監査目的でファイルを匿名化する際に使用された文書。
  • JSON と XML フォーマットは、複雑なプロファイルのためのより良い構造を提供します。

結論

このチュートリアルは、C#でCSV、JSON、またはXMLファイルを使用してカスタマイズされたDICOM匿名化プロファイルを作成する方法を示しています。

 日本語