Как создать персонализированный профиль анонимизации DICOM из CSV, JSON или XML
Этот урок показывает, как создать персонализированные профили анонимности DICOM с использованием файлов CSV, JSON или XML в C#. Каждая профиль позволяет точно определить, какие теги следует удалить, заменить или сохранить в соответствии с конкретными политиками конфиденциальности вашей организации.
Зачем создавать персонализированные профили?
Предефинированные профили DICOM PS3.15 могут не соответствовать всем институциональным требованиям.
- Сохранение конкретных институциональных идентификаторов для внутренней прослеживаемости
- Применение организационно-специальных правил конфиденциальности
- Соответствует уникальным нормативным требованиям в вашей юрисдикции
Tag Акции объяснены
Следующие действия могут применяться к тегам DICOM:
| Действие | Код | описание |
|---|---|---|
| Удалить | D | Удаление знака полностью из набора данных |
| 0 нуля | Z | Заменить стоимость пустой или нулевой стоимостью |
| Удаление | X | Удаление, если присутствует (подобно удалению) |
| Keep | K | Сохранить оригинальную ценность неизменной |
| Clean | C | Очистить ценность путем удаления идентификационной информации |
| Заменить UID | U | Замена новым генерируемым УИД |
Преимущества: Подготовка к окружающей среде
- Настройка Visual Studio или любой совместимый .NET IDE.
- Создайте новый проект приложения .NET 8 для консоли.
- Инсталляция Aspose.Medical из NuGet Package Manager.
- Подготовьте свой персонализированный файл определения профиля.
Step-by-Step Guide для создания персонализированных профилей
Шаг 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 UID
- Изъятие институциональной информации
- Чистый опис исследования
Шаг 3: Создание JSON Profile Definition (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 (альтернативный)
Создайте 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: Применение персонализированного профиля
Создайте анонимизатор с загруженным профилем и нанесете его на файлы 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: Замена всех УИД во время сохранения отношений
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;
}Инвалидный шаблон или действие
Убедитесь, что шаблоны маркировки следуют формату (GGGG,EEEE) где GGGG является группой и EEEE является элементом в hexadecimal. валидными действиями являются: D, Z, X, K, C, U.
Лучшие практики для персонализированных профилей
- Контроль версии: хранить файлы профиля в контроле версии для отслеживания изменений со временем.
- Документация: Добавьте комментарии, объясняющие, почему для каждой теги были выбраны конкретные действия.
- Тестирование: Проверьте профили с данными тестирования, прежде чем применять к производству файлов DICOM.
- Backup: всегда сохраняйте резервные копии оригинальных файлов профиля.
- Рецензия: периодически проверяют профили, чтобы убедиться, что они все еще соответствуют нормативным требованиям.
Дополнительная информация
- Рассмотрим создание множественных профилей для различных случаев использования (внутреннее деление, внешние исследования и т.д.).
- Документ, профиль которого использовался при анонимизации файлов в целях аудита.
- JSON и XML-форматы предлагают лучшее строение для сложных профилей с настойчивыми определениями.
Заключение
Этот урок показал, как создать персонализированные профили анонимности DICOM с использованием CSV, JSON или XML файлов в C# с Aspose.Medical.