Wie man ein benutzerdefiniertes DICOM-Anonymisierungsprofil aus CSV, JSON oder XML erstellen kann

Wie man ein benutzerdefiniertes DICOM-Anonymisierungsprofil aus CSV, JSON oder XML erstellen kann

Dieses Tutorial zeigt, wie man benutzerdefinierte DICOM-Anonymisierungsprofile mit CSV, JSON oder XML-Dateien in C# erstellen kann.

Warum benutzerdefinierte Profile erstellen?

Vordefinierte DICOM PS3.15 Profile erfüllen möglicherweise nicht alle institutionellen Anforderungen.

  • Speichern Sie spezifische institutionelle Identifikatoren für die interne Traceability
  • Anwendung von Organisationsspezifischen Datenschutzregeln
  • Erfüllen Sie einzigartige regulatorische Anforderungen in Ihrer Zuständigkeit

Tag Aktionen erklärt

Die folgenden Maßnahmen können auf die DICOM-Tags angewendet werden:

AktionCodeBeschreibung
EntfernenDEntfernen Sie das Etikett vollständig aus dem Datensatz
NullZErsetzen Sie den Wert mit einem leeren oder null-Wert
EntfernenXEntfernen, wenn vorhanden (im gleichen wie Löschung)
KeepKBewahren Sie den ursprünglichen Wert unverändert
CleanCReinigen Sie den Wert, indem Sie identifizierende Informationen entfernen
Ersatz mit UIDUErsatz mit einem neuen generierten UID

Voraussetzungen: Umwelt vorbereiten

  • Installieren Sie Visual Studio oder eine kompatible .NET IDE.
  • Erstellen Sie ein neues .NET 8-Konsole-Anwendungsprojekt.
  • Installieren Sie Aspose.Medical vom NuGet Package Manager.
  • Bereiten Sie Ihre benutzerdefinierte Profil-Definitiondatei vor.

Schritt für Schritt Guide zum Erstellen von personalisierten Profilen

Schritt 1: Installieren Aspose.Medical

Fügen Sie die Aspose.Medical Bibliothek zu Ihrem Projekt mit NuGet hinzu.

Install-Package Aspose.Medical

Schritt 2: Erstellen Sie eine CSV-Profildefinition

Erstellen Sie eine CSV-Datei mit Tagmustern und Aktionen. Jede Zeile spezifiziert einen Tag und seine Aktion.

  • Profil .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=“Kopieren Code”

<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>

Dieses Profil:

  • Zeros Patient Name und ID
  • Geburtsdatum entfernen
  • Keeps Patient Sex
  • Ersatz Studien, Serien und SOP Instance UIDs
  • Entfernen von Institutionsinformationen
  • Cleans Studie Beschreibung

Schritt 3: Erstellen Sie eine JSON-Profildefinition (alternative)

Erstellen Sie eine JSON-Datei mit den gleichen Tag-Definitionen.

  • Profile.json auf: *
[
  { "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" }
]

Schritt 4: Erstellen einer XML-Profildefinition (alternative)

Erstellen Sie eine XML-Datei mit den gleichen Tag-Definitionen.

  • Profil .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>

Schritt 5: Laden Sie das benutzerdefinierte Profil hoch

Laden Sie das benutzerdefinierte Profil mit der entsprechenden Methode für Ihr Dateiformat.

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
);

Schritt 6: Verwenden Sie das Custom Profile

Erstellen Sie einen Anonymizer mit dem hochgeladenen Profil und verwenden Sie es auf DICOM-Dateien.

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");

Komplett Code Example mit CSV-Profil

Hier ein vollständiges Beispiel mit einem CSV-basierten benutzerdefinierten Profil:

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!");

Praktisches Szenario Beispiele

Szenario 1: Retain Institution ID für Internal Tracking

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

Szenario 2: Ersatz aller UIDs während der Erhaltung von Beziehungen

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

Szenario 3: Maximale Privatsphäre für äußere Teile

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

Validierung: Testen Sie Ihr Custom Profile

Validieren Sie immer benutzerdefinierte Profile vor der Produktionsanwendung:

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

Invalid Datei Path

Wenn die Profildatei nicht gefunden werden kann:

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

Invalid Tag Pattern oder Aktion

Garantierte Tagmuster folgen dem Format (GGGG,EEEE) wo GGGG die Gruppe ist und EEEE das Element in hexadecimal ist. gültige Aktionen sind: D, Z, X, K, C, U.

Best Practices für benutzerdefinierte Profile

  • Version Control: Speichern Sie Profile in Version-Control, um Änderungen im Laufe der Zeit zu verfolgen.
  • Dokumentation: Fügen Sie Kommentare hinzu, die erklären, warum für jeden Tag bestimmte Aktionen ausgewählt wurden.
  • Testing: Validieren Sie Profile mit Testdaten, bevor Sie für die Herstellung von DICOM-Dateien anmelden.
  • Backup: Bewahren Sie immer Backups der ursprünglichen Profildateien.
  • Review: Periodisch überprüfen Sie die Profile, um sicherzustellen, dass sie immer noch den gesetzlichen Anforderungen entsprechen.

Zusätzliche Informationen

  • Betrachten Sie die Erstellung von mehreren Profilen für verschiedene Nutzungsfälle (interne Teilen, externe Forschung usw.).
  • Dokument, in dem das Profil bei der Anonymisierung von Dateien zu Auditzwecken verwendet wurde.
  • JSON und XML-Formate bieten eine bessere Struktur für komplexe Profile mit niested Definitionen.

Schlussfolgerungen

Dieses Tutorial hat gezeigt, wie man benutzerdefinierte DICOM-Anonymisierungsprofile mit CSV, JSON oder XML-Dateien in C# mit Aspose.Medical erstellt.

 Deutsch