Как да създадете персонализиран профил за анонимизация на DICOM от CSV, JSON или XML
Този урок показва как да се създадат персонализирани профили за анонимност на DICOM, като се използват CSV, JSON или XML файлове в C#. Custom Profiles ви позволяват да определите точно кои етикети трябва да бъдат премахнати, заменени или запазени в съответствие с конкретните политики за поверителност на вашата институция.
Защо да създаваме персонализирани профили?
Предефинирани профили на DICOM PS3.15 може да не отговарят на всички институционални изисквания.
- Съхраняване на специфични институционални идентификатори за вътрешна проследимост
- Прилагане на организационни правила за поверителност
- Свържете се с уникални регулаторни изисквания във вашата юрисдикция
Акции обяснени
Следните действия могат да се прилагат към етикетите DICOM:
| Action | Code | описание |
|---|---|---|
| Delete | D | Премахване на етикета изцяло от базата данни |
| Zero | Z | Заменете стойността с празна или нулева стойност |
| Remove | X | Премахване, ако е налице (подобно на Изтриване) |
| Keep | K | Запазете оригиналната стойност непроменена |
| Clean | C | Изчистване на стойността чрез премахване на идентифицираща информация |
| Замяна на UID | U | Заменете с нов генериран UID |
Предимства: Подготвяне на околната среда
- Visual Studio или всяка съвместима .NET IDE.
- Създаване на нов проект за .NET 8 конзола.
- Инсталирайте Aspose.Medical от NuGet Package Manager.
- Подгответе персонализирания файл за дефиниране на профила си.
Стъпка по стъпка ръководство за създаване на персонализирани профили
Стъпка 1: Инсталирайте Aspose.Medical
Добавете библиотеката Aspose.Medical към вашия проект с помощта на NuGet.
Install-Package Aspose.MedicalСтъпка 2: Създаване на дефиниция за CSV профил
Създайте CSV файл с шаблони за етикетиране и действия.Всяка линия посочва етикет и неговото действие.
- Профил .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=“Копиране на кода”
<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>
Този профил е:
- Името и идентификацията на пациента на Zeros
- Премахване на датата на раждане
- Пациентски секс
- Заменя проучване, серия и SOP Instance UIDs
- Изтриване на институционална информация
- Чисто описание на проучването
Стъпка 3: Създаване на JSON профилна дефиниция (Alternative)
Създаване на JSON файл с една и съща таг дефиниции.
- Профилът на 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" }
]Стъпка 4: Създаване на дефиниция за XML профил (Alternative)
Създаване на XML файл със същите обозначения за етикети.
• Профил 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: Изтеглете персонализирания профил
Изтеглете персонализирания профил, като използвате подходящия метод за вашия формат на файла.
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: Използвайте персонализирания профил
Създайте Anonymizer с заредения профил и го приложите към 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");Допълнителен код с CSV профил
Ето пълен пример с използване на персонализиран профил, базиран на 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!");Примери за практичен сценарий
Сценарий 1: Идентифициране на институцията за вътрешно проследяване
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KСценарий 2: Заменете всички UID, докато запазвате отношенията
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KСценарий 3: Максимална поверителност за външно споделяне
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Валидиране: Тестване на Вашия персонализиран профил
Винаги валидиране на персонализирани профили преди употреба на производството:
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
Инвалидни файлови пътеки
Ако профилът не може да бъде намерен:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid Tag Pattern или действие
Уверете се, че тегловите шаблони следват формата (GGGG,EEEE) където GGGG е групата и EEEE е елементът в hexadecimal. валидни действия са: D, Z, X, K, C, U.
Най-добрите практики за персонализирани профили
- Контрол на версии: Съхранявайте файловете на профила в контрола на версия, за да проследявате промените с течение на времето.
- Документация: Добавете коментари, които обясняват защо са избрани конкретни действия за всеки етикет.
- Тестиране: Валидирайте профилите с данни за тестване, преди да кандидатствате за производство на DICOM файлове.
- Backup: Винаги запазвайте резервни копия на оригинални профилни файлове.
- Ревизия: Профилите се проверяват периодично, за да се гарантира, че те все още отговарят на регулаторните изисквания.
Допълнителна информация
- Помислете за създаването на множество профили за различни случаи на употреба (вътрешно споделяне, външни изследвания и т.н.).
- Документ, чийто профил е бил използван при анонимизиране на файлове за одитни цели.
- JSON и XML формати предлагат по-добра структура за сложни профили с нежни дефиниции.
заключение
Този урок е показал как да се създадат персонализирани профили за анонимност на DICOM, като се използват CSV, JSON или XML файлове в C# с Aspose.Medical.