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:
| Action | Code | Descripció |
|---|---|---|
| Delete | D | Retirar la etiqueta completament del conjunt de dades |
| Zero | Z | Substituir el valor amb un valor buit o zero |
| Remove | X | Removeu si present (similar a Eliminar) |
| Keep | K | Conserva el valor original sense canvi |
| Clean | C | neteja el valor eliminant informació d’identificació |
| Substituir amb UID | U | Substituir 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.MedicalPas 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);KEscenari 2: Substituir tots els UIDs mentre mantenen relacions
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KEscenari 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);XValidació: 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.