Cum să creați un profil de anonimizare DICOM personalizat din CSV, JSON sau XML
Acest tutorial demonstrează modul de a crea profiluri personalizate de anonimizare DICOM folosind fișierele CSV, JSON sau XML în C#. Profile personalizat vă permit să definiți exact ce etichete ar trebui să fie îndepărtate, înlocuite sau păstrate în conformitate cu politicile specifice de confidențialitate ale instituției dvs.
De ce să creezi profiluri personalizate?
Profilurile predefinite DICOM PS3.15 pot să nu îndeplinească toate cerințele instituționale.
- Păstrați identificatori instituționali specifici pentru urmărirea internă
- Aplicați regulile de confidențialitate specifice organizației
- Întâlniți cerințele de reglementare unice în jurisdicția dvs.
Acțiuni explicate
Următoarele acțiuni pot fi aplicate etichetelor DICOM:
| Action | Code | Descriere |
|---|---|---|
| Delete | D | Îndepărtați complet eticheta din setul de date |
| Zero | Z | Înlocuiți valoarea cu o valoare goală sau zero |
| Remove | X | Îndepărtează dacă există (similar cu îndepărtarea) |
| Keep | K | Păstrați valoarea inițială nemodificată |
| Clean | C | Curățați valoarea prin eliminarea informațiilor de identificare |
| Înlocuirea cu UID | U | Înlocuirea cu un UID nou generat |
Etichetă: pregătirea mediului
- Instalați Visual Studio sau orice IDE compatibil .NET.
- Creați un nou proiect de aplicații .NET 8 console.
- Instalați Aspose.Medical de la NuGet Package Manager.
- Pregătiți fișierul dvs. personalizat de definiție a profilului.
Ghidul pas cu pas pentru a crea profiluri personalizate
Pasul 1: Instalați Aspose.Medical
Adăugați biblioteca Aspose.Medical la proiectul dvs. folosind NuGet.
Install-Package Aspose.MedicalPasul 2: Creați o definiție de profil CSV
Creați un fișier CSV cu modele și acțiuni de etichetă. Fiecare linie specifică un tag și actiunea sa.
• Profilul 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=“Copie codul”
<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>
Acest profil este:
- Numele și ID-ul pacientului Zeros
- Îndepărtează data naşterii
- Sexul pacienților
- Înlocuiește studii, serii și SOP Instance UID-uri
- Ștergeți informațiile instituției
- Descrierea studiului Cleans
Pasul 3: Creați o definiție de profil JSON (alternativă)
Creați un fișier JSON cu aceleași definiții de etichetă.
• Profilul lui 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" }
]Pasul 4: Creați o definiție de profil XML (alternativă)
Creați un fișier XML cu aceleași definiții de etichetă.
• Profișul 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>Pasul 5: Încărcați profilul personalizat
Încărcați profilul personalizat folosind metoda corespunzătoare pentru formatul de fișier.
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
);Pasul 6: Aplicați profilul personalizat
Creați un Anonymizator cu profilul încărcat și aplicați-l la fișierele 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");Exemplu complet de cod cu profilul CSV
Iată un exemplu complet folosind un profil personalizat bazat pe 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!");Exemple de scenariu practic
Scenariul 1: Retain Institution ID pentru urmărirea internă
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KScenariul 2: Înlocuiește toate UID-urile în timp ce păstrează relațiile
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KScenariul 3: Confidențialitatea maximă pentru partajarea externă
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);XValidare: testarea profilului dvs. personalizat
Verificați întotdeauna profilurile personalizate înainte de utilizarea producției:
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
Calea fișierului invalid
Dacă fișierul de profil nu poate fi găsit:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid Tag Pattern sau Acțiune
Asigurați-vă că modelele de etichetă urmează formatul (GGGG,EEEE) unde GGGG este grupul și EEEE este elementul în hexadecimal. acțiunile valide sunt: D, Z, X, K, C, U.
Cele mai bune practici pentru profiluri personalizate
- Control de versiune: stocarea fișierelor de profil în controlul versiunii pentru a urmări schimbările în timp.
- Documentație: Adăugați comentarii care explică de ce au fost selectate acțiuni specifice pentru fiecare etichetă.
- Testare: Validați profilurile cu datele de testare înainte de a aplica la producerea fișierelor DICOM.
- Backup: Întotdeauna păstrați backup-uri ale fișierelor de profil originale.
- Review: Revizuirea periodică a profilurilor pentru a se asigura că încă îndeplinesc cerințele de reglementare.
Informații suplimentare
- Gândiți-vă la crearea de profiluri multiple pentru diferite cazuri de utilizare (diviziune internă, cercetare externă etc.).
- Documentul în care profilul a fost utilizat în anonimizarea fișierelor în scopuri de audit.
- Formatele JSON și XML oferă o structură mai bună pentru profilurile complexe cu definiții nestate.
concluziile
Acest tutorial a arătat cum să se creeze profiluri personalizate de anonimizare DICOM folosind fișierele CSV, JSON sau XML în C# cu Aspose.Medical. Profili personalizati oferă flexibilitatea de a implementa politicile de confidențialitate specifice instituției, menținând în același timp respectarea normelor de sănătate.