Hur man skapar en anonyma DICOM-profil från CSV, JSON eller XML

Hur man skapar en anonyma DICOM-profil från CSV, JSON eller XML

Denna tutorial visar hur man skapar anpassade DICOM-anonymiseringsprofiler med hjälp av CSV, JSON eller XML-filer i C#. Personliga profiler låter dig definiera exakt vilka taggar som ska tas bort, ersättas eller bevaras i enlighet med din institutionens specifika integritetspolicy.

Varför skapa anpassade profiler?

Fördefinierade DICOM PS3.15-profiler kan inte uppfylla alla institutionella krav. Anpassade profiler gör att du kan:

  • Hålla specifika institutionella identifierare för intern spårbarhet
  • Tillämpa organisationsspecifika sekretessregler
  • Uppfyller unika regulatoriska krav i din jurisdiktion

Tag åtgärder förklaras

Följande åtgärder kan tillämpas på DICOM-taggarna:

åtgärdkodenBeskrivning
Ta bortDTa bort taggen helt från dataset
nollZErsätta värdet med ett tomt eller nollvärde
avlägsnaXTa bort om närvarande (liknande att ta bort)
KeepKHåll originalvärdet oförändrat
CleanCRengör värdet genom att ta bort identifierande information
Ersätt med UIDUErsätt med en ny genererad UID

Förutsättningar: Förbereda miljön

  • Installera Visual Studio eller någon kompatibel .NET IDE.
  • Skapa ett nytt .NET 8 konsolprogram.
  • Installera Aspose.Medical från NuGet Package Manager.
  • Förbered din anpassade profil definition fil.

Steg för steg guide för att skapa anpassade profiler

Steg 1: Installera Aspose.Medical

Lägg till Aspose.Medicinska biblioteket till ditt projekt med NuGet.

Install-Package Aspose.Medical

Steg 2: Skapa en CSV-profils definition

Skapa en CSV-fil med tagmönster och åtgärder. Varje rad anger ett tag och dess handling.

  • Profil och 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=“Kopiera koden”

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

Den här profilen:

  • Zeros patientnamn och ID
  • Ta bort födelsedatum
  • Keeps patient sex
  • Ersätter Study, Series och SOP Instance UIDs
  • Ta bort institutionell information
  • Cleans studie beskrivning

Steg 3: Skapa en JSON Profile Definition (alternativ)

Skapa en JSON-fil med samma tagdefinitioner.

  • Profiler för 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" }
]

Steg 4: Skapa en XML-profils definition (alternativ)

Skapa en XML-fil med samma tagdefinitioner.

*profil.xml för: *

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

Steg 5: Ladda upp den anpassade profilen

Ladda upp den anpassade profilen med hjälp av den lämpliga metoden för ditt filformat.

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

Steg 6: Applicera den anpassade profilen

Skapa en anonymiserare med den laddade profilen och tillämpa den på DICOM-filer.

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 kodexempel med CSV-profil

Här är ett komplett exempel med en CSV-baserad anpassad 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!");

Exempel på praktiska scenarier

Scenario 1: Retain Institution ID för intern spårning

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

Scenario 2: Ersätt alla UID medan du behåller relationer

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

Scenario 3: Maximal integritet för extern delning

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

Validering: Testa din anpassade profil

Validerar alltid anpassade profiler innan produktion används:

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 filvägen

Om profilfilen inte kan hittas:

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

Invalid tag mönster eller åtgärd

Säkerhets tagmönster följer formatet (GGGG,EEEE) där GGGG är gruppen och EEEE är elementet i hexadecimal. giltiga åtgärder är: D, Z, X, K, C, U.

Bästa praxis för anpassade profiler

  • Version Control: Förvara profilfiler i versionskontroll för att spåra förändringar över tiden.
  • Dokumentation: Lägg till kommentarer som förklarar varför specifika åtgärder valdes för varje tag.
  • Testning: Validerar profiler med testdata innan du ansöker om att producera DICOM-filer.
  • Backup: Håll alltid säkerhetskopior av originalprofilfiler.
  • Review: Periodiskt granskning av profiler för att säkerställa att de fortfarande uppfyller regleringskraven.

Ytterligare information

  • Tänk på att skapa flera profiler för olika användningsfall (intern delning, extern forskning, etc.).
  • Dokument vars profil användes vid anonymisering av filer för revisionssyfte.
  • JSON och XML-format ger bättre struktur för komplexa profiler med nötade definitioner.

slutsatser

Denna tutorial har visat hur man skapar anpassade DICOM anonymiseringsprofiler med hjälp av CSV, JSON eller XML-filer i C# med Aspose.Medical.

 Svenska