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:
| Aktion | Code | Beschreibung |
|---|---|---|
| Entfernen | D | Entfernen Sie das Etikett vollständig aus dem Datensatz |
| Null | Z | Ersetzen Sie den Wert mit einem leeren oder null-Wert |
| Entfernen | X | Entfernen, wenn vorhanden (im gleichen wie Löschung) |
| Keep | K | Bewahren Sie den ursprünglichen Wert unverändert |
| Clean | C | Reinigen Sie den Wert, indem Sie identifizierende Informationen entfernen |
| Ersatz mit UID | U | Ersatz 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.MedicalSchritt 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);KSzenario 2: Ersatz aller UIDs während der Erhaltung von Beziehungen
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KSzenario 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);XValidierung: 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.