Kā izveidot personalizētu DICOM anonimizācijas profilu no CSV, JSON vai XML

Kā izveidot personalizētu DICOM anonimizācijas profilu no CSV, JSON vai XML

Šajā apmācībā parādās, kā izveidot personalizētus DICOM anonimizācijas profilus, izmantojot CSV, JSON vai XML failus C#. personalizētie profili ļauj precīzi noteikt, kuras tags jānoņem, jāaizstāj vai jāuzglabā saskaņā ar jūsu institūcijas īpašo privātuma politiku.

Kāpēc izveidot personalizētus profilus?

Predefinēti DICOM PS3.15 profili var neatbilst visām institucionālajām prasībām.

  • Uzglabāt konkrētus institucionālos identifikatorus iekšējai izsekojamībai
  • Pielietojiet organizācijas specifiskos privātuma noteikumus
  • Atbilst unikālajām regulatīvajām prasībām jūsu jurisdikcijā

Tag Akcijas izskaidrots

Šie pasākumi var tikt piemēroti DICOM tags:

ActionCodeDescription
DeleteDIzņemt etiķeti pilnībā no datu kopas
ZeroZAizstāt vērtību ar tukšu vai nulles vērtības
RemoveXIzņemt, ja pastāv (līdzīgi kā dzēst)
KeepKsaglabāt sākotnējo vērtību nemainīgu
CleanCNoslēdziet vērtību, noņemot identificējošo informāciju
Aizstāt ar UIDUAizstāt ar jaunu ģenerēto UID

Priekšnoteikumi: Vides sagatavošana

  • Iestatīt Visual Studio vai jebkuru saderīgu .NET IDE.
  • Izveidojiet jaunu .NET 8 konsoles lietojumprogrammu projektu.
  • Instalējiet Aspose.Medical no NuGet Package Manager.
  • Sagatavojiet savu personalizēto profila definīcijas failu.

Pakāpeniski ceļvedis, lai izveidotu personalizētus profilus

1. solis: instalēt Aspose.Medical

Pievienojiet Aspose.Medicīnas bibliotēku savam projektam, izmantojot NuGet.

Install-Package Aspose.Medical

2. solis: izveidot CSV profila definīciju

Izveidojiet CSV failu ar etiķetes modeļiem un darbībām. katra līnija nosaka etiķi un tā darbību.

** profils.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=“Kopijas kods”

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

  • Zeros pacienta vārds un identifikācija
  • Izslēdz dzimšanas datumu
  • Pacientu sekss
  • Aizstāj Study, Series un SOP Instance UID
  • Izdzēš iestādes informāciju
  • Cleans pētījuma apraksts

3. solis: izveidojiet JSON profila definīciju (alternatīvu)

Izveidojiet JSON failu ar tām pašām etiķetes definīcijām.

  • profils.jsons ir: *
[
  { "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. solis: izveidojiet XML profila definīciju (alternatīvu)

Izveidojiet XML failu ar tādiem pašiem etiķetes definīcijām.

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

5. solis: Lejupielādēt personalizēto profilu

Lejupielādējiet pielāgotu profilu, izmantojot atbilstošu metodi jūsu faila formātā.

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. solis: Pielietojiet personalizēto profilu

Izveidojiet anonimizatoru ar lādēto profilu un piemērojiet to DICOM failiem.

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

Pilns koda piemērs ar CSV profilu

Šeit ir pilns piemērs, izmantojot CSV balstītu personalizēto profilu:

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

Praktiskā scenārija piemēri

1. scenārijs: Iestādes ID saglabāšana iekšējai uzraudzībai

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

2. scenārijs: aizstāt visus UID, saglabājot attiecības

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

3. scenārijs: Maksimālais privātums ārējai dalībai

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

Validācija: Jūsu personalizētā profila pārbaude

Vienmēr validējiet pielāgotus profilus pirms ražošanas lietošanas:

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

Invalīdu failu maršruts

Ja profila failu nevar atrast:

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

Invalid Tag Pattern vai rīcība

Pārliecinieties, ka etiķetes veidnes seko formātā (GGGG,EEEE) kur GGGG ir grupa un EEEE ir hexadecimal elements. derīgas darbības ir: D, Z, X, K, C, U.

Labākās prakses personalizētiem profiliem

  • Version Control: Uzglabājiet profilu failus versijas kontrolē, lai laika gaitā izsekotu izmaiņas.
  • Dokumentācija: Pievienojiet komentārus, kas izskaidro, kāpēc katrai marķējumam tika izvēlēti konkrēti pasākumi.
  • Testēšana: validējiet profili ar testēšanas datiem pirms pieteikšanās DICOM failu ražošanai.
  • Backup: Vienmēr saglabā oriģinālu profila failus.
  • Review: Periodiski pārskatiet profili, lai pārliecinātos, ka tie joprojām atbilst regulatīvajām prasībām.

Papildu informācija

  • Apsveriet vairāku profilu izveidi dažādiem lietojuma gadījumiem (interna dalīšana, ārējie pētījumi utt.).
  • Dokuments, kuru profils tika izmantots, anonimizējot failus revīzijas nolūkos.
  • JSON un XML formāti piedāvā labāku struktūru sarežģītiem profiliem ar nested definīcijām.

Conclusion

Šis tutorial ir parādījis, kā izveidot pielāgotus DICOM anonimizācijas profili, izmantojot CSV, JSON vai XML failus C# ar Aspose.Medical.

 Latviski