Kaip sukurti pritaikytą DICOM anonimiškumo profilį iš CSV, JSON ar XML

Kaip sukurti pritaikytą DICOM anonimiškumo profilį iš CSV, JSON ar XML

Šis mokymas rodo, kaip sukurti pritaikytus DICOM anonimiškumo profilius naudojant CSV, JSON ar XML failus C#. Pritaikyti profiliai leidžia tiksliai apibrėžti, kurios žymės turėtų būti pašalintos, pakeistos arba išsaugotos pagal konkrečią jūsų įstaigos privatumo politiką.

Kodėl reikia sukurti pritaikytus profilius?

Iš anksto apibrėžti DICOM PS3.15 profiliai gali neatitikti visų institucinių reikalavimų.

  • Išsaugoti konkrečius institucinius identifikatorius vidaus atsekamumui
  • Taikykite organizacijos-specifines privatumo taisykles
  • Atitinka unikalius reguliavimo reikalavimus jūsų jurisdikcijoje

Veiksmai paaiškinti

Šie veiksmai gali būti taikomi DICOM žymėms:

ActionCodeDescription
DeleteDVisiškai pašalinti etiketę iš duomenų rinkinio
ZeroZVertę pakeiskite tuščią arba nulinę vertę.
RemoveXPašalinti, jei esate (pavyzdžiui, panašus į Pašalinti)
KeepKIšsaugokite originalią vertę nepakeista
CleanCIšvalyti vertę pašalinant identifikuojančią informaciją
Pakeiskite UIDUPakeiskite naują sukurtą UID

Žymos archyvas: paruošti aplinką

  • Įdiegti „Visual Studio“ arba bet kokį suderinamą .NET IDE.
  • Sukurkite naują .NET 8 konsolės programos projektą.
  • Įdiegti Aspose.Medical iš NuGet paketų valdytojo.
  • Paruoškite savo pritaikytą profilio apibrėžimo failą.

Žingsnis po žingsnio, kaip sukurti pritaikytus profilius

1 žingsnis: įdiegti Aspose.Medical

Pridėti Aspose.Medicinos biblioteką į savo projektą naudojant NuGet.

Install-Package Aspose.Medical

2 žingsnis: sukurkite CSV profilio apibrėžimą

Sukurkite CSV failą su žymėjimo pavyzdžiais ir veiksmais. Kiekviena eilutė nurodo ženklą ir jo veiksmus.

  • Pranešimas apie CV: *
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=“Kopijuoti kodą”

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

Šis profilis:

  • Zeros paciento vardas ir tapatybė
  • Pašalinti gimimo datą
  • Pacientų seksas
  • Studijos, serijos ir SOP instance UID pakeitimas
  • Ištrina institucijos informaciją
  • Mokslinių tyrimų aprašymas

3 žingsnis: sukurkite JSON profilio apibrėžimą (alternatyvią)

Sukurkite JSON failą su tuo pačiu žymėjimo apibrėžimu.

Žymos archyvas: 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 žingsnis: XML profilio apibrėžimas (alternatyvus)

Sukurkite XML failą su tuo pačiu žymėjimo apibrėžimu.

• XML profilis: *

<?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 žingsnis: atsisiųskite pritaikytą profilį

Atsisiųskite pritaikytą profilį naudodami tinkamą jūsų failų formato metodą.

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 žingsnis: Įdiegti pritaikytą profilį

Sukurkite Anonymizatorių su įkeltu profilu ir taikykite jį DICOM failams.

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

Išsamus kodo pavyzdys su CSV profiliu

Štai pilnas pavyzdys, naudojant CSV pagrindu pritaikytą 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!");

Praktiniai scenarijų pavyzdžiai

1 scenarijus: išlaikyti institucijos ID vidiniam stebėjimui

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

2 scenarijus: pakeisti visus UID išlaikant santykius

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

3 scenarijus: maksimalus privatumas išoriniam pasidalijimui

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

Validavimas: išbandykite savo asmeninį profilį

Visada patvirtinkite pritaikytus profilius prieš naudojant gamybą:

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

Neteisingas failo kelias

Jei profilio failą negalima rasti:

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

Invalid Tag Pattern arba Veiksmas

Įsitikinkite, kad pažymėjimo modeliai sekia formatą (GGGG,EEEE) kur GGGG yra grupė ir EEEE yra elementas hexadecimal. galiojantys veiksmai yra: D, Z, X, K, C, U.

Geriausios praktikos pritaikytam profiliui

  • Versijos kontrolė: Profilo failus saugokite versijos valdyme, kad laikui bėgant stebėtumėte pokyčius.
  • Dokumentacija: Pridėkite komentarus, paaiškinančius, kodėl kiekvienam žymui buvo pasirinkti konkretūs veiksmai.
  • Testing: Įvertinkite profilius su bandymų duomenimis prieš kreipdamiesi į DICOM failus.
  • Backup: visada saugokite originalių profilio failų atsargines kopijas.
  • Apžvalga: Reguliariai peržiūrėkite profilį, kad jie vis dar atitiktų reguliavimo reikalavimus.

Papildoma informacija

  • Apsvarstykite įvairių profilių kūrimą skirtingiems naudojimo atvejams (vidinis pasidalijimas, išoriniai tyrimai ir tt).
  • Dokumentas, kurio profilis buvo naudojamas anonimizuojant failus audito tikslais.
  • JSON ir XML formatai siūlo geresnę struktūrą sudėtingoms profiliams, turintiems apibrėžtį.

Conclusion

Šis mokymas parodė, kaip sukurti pritaikytus DICOM anonimiškumo profilius naudojant CSV, JSON ar XML failus C# su Aspose.Medical.

 Lietuvių