Hvordan man opretter en tilpasset DICOM-anonymiseringsprofil fra CSV, JSON eller XML

Hvordan man opretter en tilpasset DICOM-anonymiseringsprofil fra CSV, JSON eller XML

Denne tutorial viser, hvordan man opretter tilpassede DICOM anonymiseringsprofiler ved hjælp af CSV, JSON eller XML-filer i C#. Custom profiler giver dig mulighed for at definere præcis, hvilke tags der skal fjernes, erstattes eller bevares i henhold til din institutionens specifikke privatlivspolitik.

Hvorfor oprette personlige profiler?

Fordefinerede DICOM PS3.15 profiler kan ikke opfylde alle institutionelle krav. Tilpassede profiler giver dig mulighed for:

  • Opbevar specifikke institutionelle identifikatorer for intern sporbarhed
  • Anvend organisationspecifik privatlivsregler
  • Opfylde unikke reguleringsmæssige krav i din jurisdiktion

Tag Aktioner forklaret

Følgende handlinger kan anvendes til DICOM tags:

ActionCodeBeskrivelse
DeleteDFjern taggen helt fra dataset
ZeroZUdskift værdien med en tom eller nul værdi
RemoveXFjern, hvis der er (lignende til fjerne)
KeepKBevar den oprindelige værdi uændret
CleanCRengør værdien ved at fjerne identificerende oplysninger
Udskiftning af UIDUUdskiftning af en ny genereret UID

Forside: Forberedelse af miljøet

  • Indstill Visual Studio eller ethvert kompatibelt .NET IDE.
  • Skab et nyt .NET 8 applikationsprojekt.
  • Installere Aspose.Medical fra NuGet Package Manager.
  • Forbered din brugerdefinerede profilfil.

Step-by-step guide til at oprette tilpassede profiler

Trin 1: Installation af Aspose.Medical

Tilføj Aspose.Medicinsk bibliotek til dit projekt ved hjælp af NuGet.

Install-Package Aspose.Medical

Trin 2: Skab en CSV-profildefinition

Skab en CSV-fil med tagmønstre og handlinger. Hver linje angiver en tag og dens handling.

  • profil.csv på: *
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=“Kopierer kode”

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

Denne profil:

  • Zeros patient navn og ID
  • Fjern fødselsdato
  • Kæmper patient sex
  • Udskift Study, Series og SOP Instance UIDs
  • Fjerner institutionens oplysninger
  • Cleans undersøgelse beskrivelse

Trin 3: Skab en JSON Profile Definition (Alternativ)

Skab en JSON-fil med de samme tagdefinitioner.

  • Profil af 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" }
]

Trin 4: Skab en XML-profildefinition (alternativ)

Skab en XML-fil med de samme tagdefinitioner.

  • Profiler i 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>

Trin 5: Lade din personlige profil op

Lad den tilpassede profil op ved hjælp af den passende metode til dit 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
);

Trin 6: Anvende den tilpassede profil

Skab en Anonymiser med den opladte profil og anvende den til 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");

Fuld kodeksempel med CSV-profil

Her er et komplet eksempel ved hjælp af en CSV-baseret 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!");

Praktiske scenarier eksempler

Scenario 1: Retain Institution ID for intern sporing

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

Scenario 2: Udskift alle UID’er, mens du bevarer relationer

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

Scenario 3: Maximum privatliv for ekstern deling

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: Test din personlige profil

Altid validerer brugerdefinerede profiler før produktionsanvendelse:

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 filvej

Hvis filen ikke kan findes:

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

Invalid tag mønster eller handling

Sørg for at tagmønstre følger formatet (GGGG,EEEE) hvor GGGG er gruppen og EEEE er elementet i hexadecimal. gyldige handlinger er: D, Z, X, K, C, U.

Best Practices for Custom Profiles

  • Version Control: Lagre profilfiler i versionskontrol for at spore ændringer over tid.
  • Dokumentation: Tilføj kommentarer, der forklarer, hvorfor specifikke handlinger blev valgt for hver tag.
  • Testing: Validerer profiler med testdata, før du ansøger om at producere DICOM-filer.
  • Backup: Altid holde backup af originale profilfiler.
  • Review: Regelmæssigt gennemgå profiler for at sikre, at de stadig opfylder reguleringsmæssige krav.

Yderligere information

  • Overveje at oprette flere profiler til forskellige brugssager (intern deling, ekstern forskning osv.).
  • Dokument, hvis profil blev brugt til anonymisering af filer til revisionssyfte.
  • JSON og XML-formater giver bedre struktur til komplekse profiler med nestede definitioner.

Konklusion

Denne tutorial har vist, hvordan man opretter tilpassede DICOM anonymisering profiler ved hjælp af CSV, JSON, eller XML filer i C# med Aspose.Medical.

 Dansk