Com crear un perfil d'anonimització de DICOM personalitzat des de CSV, JSON o XML

Com crear un perfil d'anonimització de DICOM personalitzat des de CSV, JSON o XML

Aquest tutorial demostra com crear perfils d’anonimatització de DICOM personalitzats utilitzant fitxers CSV, JSON o XML en C#. Els profils personals us permeten definir exactament quines etiquetes s’han de eliminar, reemplaçar o conservar segons les polítiques de privacitat específiques de la vostra institució.

Per què crear perfils personalitzats?

Els perfils predefinits DICOM PS3.15 poden no complir amb tots els requisits institucionals.

  • Mantenir identificadors institucionals específics per a la traçabilitat interna
  • Aplica les normes de privacitat específiques de l’organització
  • Complir els requisits regulatoris únics en la seva jurisdicció

Accions explicades

Les següents accions es poden aplicar a les etiquetes DICOM:

ActionCodeDescripció
DeleteDRetirar la etiqueta completament del conjunt de dades
ZeroZSubstituir el valor amb un valor buit o zero
RemoveXRemoveu si present (similar a Eliminar)
KeepKConserva el valor original sense canvi
CleanCneteja el valor eliminant informació d’identificació
Substituir amb UIDUSubstituir amb un nou UID generat

Previsió: Preparar el medi ambient

  • Instal·lació de Visual Studio o qualsevol compatible .NET IDE.
  • Crear un nou projecte d’aplicació .NET 8 consola.
  • Instal·la Aspose.Medical des del NuGet Package Manager.
  • Prepara el teu fitxer de definició de perfil.

Guia de pas a pas per crear perfils personalitzats

Pas 1: Instal·lació Aspose.Medical

Afegeix la biblioteca d’Aspose.Medical al teu projecte utilitzant NuGet.

Install-Package Aspose.Medical

Pas 2: Creació d’una definició de perfil CSV

Crea un arxiu CSV amb patrons de etiquetes i accions. Cada línia especifica una etiqueta i la seva acció.

El seu perfil.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=“Codi de còpia”

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

Aquest perfil:

  • Nom i identificació del pacient de Zeros
  • Eliminació de la data de naixement
  • El sexe de pacients
  • Replacen estudis, sèries i SOP Instance UIDs
  • Eliminar la informació de la institució
  • Descripció de l’estudi de Cleans

Pas 3: Creació d’una definició de perfil JSON (alternativa)

Crear un arxiu JSON amb les mateixes definicions de etiquetes.

  • El seu perfil és 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" }
]

Pas 4: Creació d’una definició de perfil XML (alternativa)

Crear un arxiu XML amb les mateixes definicions de etiquetes.

*Profil de 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>

Pas 5: Carregar el perfil personalitzat

Carregar el perfil personalitzat utilitzant el mètode adequat per al seu format de fitxers.

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

Pas 6: Apliqueu el perfil personalitzat

Crear un anònim amb el perfil carregat i aplicar-lo als arxius DICOM.

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

Exemple de codi complet amb el perfil CSV

Aquí teniu un exemple complet utilitzant un perfil personalitzat basat en CSV:

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

Exemples d’escenari pràctic

Escenari 1: Retain Institution ID per al seguiment intern

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

Escenari 2: Substituir tots els UIDs mentre mantenen relacions

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

Escenari 3: màxima privacitat per a la compartició externa

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

Validació: Testar el teu perfil personalitzat

Sempre valideu els perfils personalitzats abans d’utilitzar la producció:

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

Invalidació de fitxers

Si el fitxer de perfil no es troba:

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

Invalid Tag Pattern o Acció

Assegureu-vos que els patrons d’etiquetes segueixen el format (GGGG,EEEE) on GGGG és el grup i EEEE és l’element en hexadecimal. Accions vàlides són: D, Z, X, K, C, U.

Millors pràctiques per a perfils personalitzats

  • Control de versió: Emmagatzema els arxius de perfil en el control de versions per rastrejar els canvis al llarg del temps.
  • Documentació: Afegeix comentaris que expliquen per què es van triar accions específiques per a cada etiqueta.
  • Testament: Valida els perfils amb dades de prova abans d’aplicar-se a la producció de fitxers DICOM.
  • Backup: Mantenir sempre les backups dels arxius de perfil originals.
  • Revisió: Revisió periòdica dels perfils per assegurar-se que segueixen complint els requisits regulatoris.

Informació addicional

  • Considera crear múltiples perfils per a diferents casos d’ús (divisió interna, investigació externa, etc.).
  • Document que el perfil va ser utilitzat en l’anonimització de fitxers per a finalitats d’auditoria.
  • Els formats JSON i XML ofereixen una millor estructura per a perfils complexos amb definicions nestades.

Conclusió

Aquest tutorial ha demostrat com crear perfils d’anonimatització personalitzats DICOM utilitzant CSV, JSON, o fitxers XML en C# amb Aspose.Medical.

 Català