Hur man skapar en anonyma DICOM-profil från CSV, JSON eller XML
Denna tutorial visar hur man skapar anpassade DICOM-anonymiseringsprofiler med hjälp av CSV, JSON eller XML-filer i C#. Personliga profiler låter dig definiera exakt vilka taggar som ska tas bort, ersättas eller bevaras i enlighet med din institutionens specifika integritetspolicy.
Varför skapa anpassade profiler?
Fördefinierade DICOM PS3.15-profiler kan inte uppfylla alla institutionella krav. Anpassade profiler gör att du kan:
- Hålla specifika institutionella identifierare för intern spårbarhet
- Tillämpa organisationsspecifika sekretessregler
- Uppfyller unika regulatoriska krav i din jurisdiktion
Tag åtgärder förklaras
Följande åtgärder kan tillämpas på DICOM-taggarna:
| åtgärd | koden | Beskrivning |
|---|---|---|
| Ta bort | D | Ta bort taggen helt från dataset |
| noll | Z | Ersätta värdet med ett tomt eller nollvärde |
| avlägsna | X | Ta bort om närvarande (liknande att ta bort) |
| Keep | K | Håll originalvärdet oförändrat |
| Clean | C | Rengör värdet genom att ta bort identifierande information |
| Ersätt med UID | U | Ersätt med en ny genererad UID |
Förutsättningar: Förbereda miljön
- Installera Visual Studio eller någon kompatibel .NET IDE.
- Skapa ett nytt .NET 8 konsolprogram.
- Installera Aspose.Medical från NuGet Package Manager.
- Förbered din anpassade profil definition fil.
Steg för steg guide för att skapa anpassade profiler
Steg 1: Installera Aspose.Medical
Lägg till Aspose.Medicinska biblioteket till ditt projekt med NuGet.
Install-Package Aspose.MedicalSteg 2: Skapa en CSV-profils definition
Skapa en CSV-fil med tagmönster och åtgärder. Varje rad anger ett tag och dess handling.
- Profil och 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=“Kopiera koden”
<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>
Den här profilen:
- Zeros patientnamn och ID
- Ta bort födelsedatum
- Keeps patient sex
- Ersätter Study, Series och SOP Instance UIDs
- Ta bort institutionell information
- Cleans studie beskrivning
Steg 3: Skapa en JSON Profile Definition (alternativ)
Skapa en JSON-fil med samma tagdefinitioner.
- Profiler för 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" }
]Steg 4: Skapa en XML-profils definition (alternativ)
Skapa en XML-fil med samma tagdefinitioner.
*profil.xml för: *
<?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>Steg 5: Ladda upp den anpassade profilen
Ladda upp den anpassade profilen med hjälp av den lämpliga metoden för ditt filformat.
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
);Steg 6: Applicera den anpassade profilen
Skapa en anonymiserare med den laddade profilen och tillämpa den på DICOM-filer.
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");Komplett kodexempel med CSV-profil
Här är ett komplett exempel med en CSV-baserad anpassad 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!");Exempel på praktiska scenarier
Scenario 1: Retain Institution ID för intern spårning
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KScenario 2: Ersätt alla UID medan du behåller relationer
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KScenario 3: Maximal integritet för extern delning
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);XValidering: Testa din anpassade profil
Validerar alltid anpassade profiler innan produktion används:
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
Invalid filvägen
Om profilfilen inte kan hittas:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid tag mönster eller åtgärd
Säkerhets tagmönster följer formatet (GGGG,EEEE) där GGGG är gruppen och EEEE är elementet i hexadecimal. giltiga åtgärder är: D, Z, X, K, C, U.
Bästa praxis för anpassade profiler
- Version Control: Förvara profilfiler i versionskontroll för att spåra förändringar över tiden.
- Dokumentation: Lägg till kommentarer som förklarar varför specifika åtgärder valdes för varje tag.
- Testning: Validerar profiler med testdata innan du ansöker om att producera DICOM-filer.
- Backup: Håll alltid säkerhetskopior av originalprofilfiler.
- Review: Periodiskt granskning av profiler för att säkerställa att de fortfarande uppfyller regleringskraven.
Ytterligare information
- Tänk på att skapa flera profiler för olika användningsfall (intern delning, extern forskning, etc.).
- Dokument vars profil användes vid anonymisering av filer för revisionssyfte.
- JSON och XML-format ger bättre struktur för komplexa profiler med nötade definitioner.
slutsatser
Denna tutorial har visat hur man skapar anpassade DICOM anonymiseringsprofiler med hjälp av CSV, JSON eller XML-filer i C# med Aspose.Medical.