Як створити персоналізований профіль анонімності DICOM з CSV, JSON або XML

Як створити персоналізований профіль анонімності DICOM з CSV, JSON або XML

Цей урок показує, як створити персоналізовані профілі анонімності DICOM за допомогою CSV, JSON або XML-файлів в C#. Пристосовані профилі дозволяють точно визначити, які теги повинні бути видалені, замінені або збережені відповідно до конкретної політики конфіденційності вашої організації.

Чому потрібно створювати персоналізовані профілі?

Заздалегідь визначені профілі DICOM PS3.15 можуть не відповідати всім інституційним вимогам.

  • Зберігати конкретні інституційні ідентифікатори для внутрішньої відстежуваності
  • Використання організаційно-специфічних правил конфіденційності
  • Виконання унікальних нормативних вимог у вашій юрисдикції

Поясніть акції

Для ознак DICOM можна застосовувати наступні дії:

АкціяКодОпис
ЗнятиDВидалити таг повністю з набору даних
з нуляZЗамінити вартість порожньою або нульовою
ЗнятиXУсунути, якщо присутній (подібний до видалити)
KeepKЗберегти оригінальну вартість без змін
CleanCОчистити вартість, видаляючи ідентифікаційну інформацію
Замінити з UIDUЗамінити новим генеруваним 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>

Цей профіль:

  • Ім’я і ідентифікація пацієнта ЗЕРОС
  • Зняти дату народження
  • Секс пацієнта
  • Заміна студії, серії та 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;
}

Invalid Tag Pattern або Діяльність

Забезпечити ознаки шаблонів дотримуватися формату (GGGG,EEEE) де GGGG є групою і EEEE є елементом в хексадецималі. діючі дії є: D, Z, X, K, C, U.

Найкращі практики для персоналізованих профілів

  • Контроль версії: Зберігайте файли профілю в контролі версій для відстеження змін з часом.
  • Документація: Додайте коментарі, які пояснюють, чому для кожної теги були обрані конкретні дії.
  • Тестинг: Провірити профілі з даними тестування, перш ніж застосовувати до виробництва файлів DICOM.
  • Backup: завжди зберігати резервні копії оригінальних профільних файлів.
  • Рецензія: Регулярні перевірки профілів для того, щоб вони досі відповідали нормативно-правовим вимогам.

Додаткова інформація

  • Розглянемо створення кількох профілів для різних випадків використання (внутрішнє поділ, зовнішні дослідження і т.д.).
  • Документ, профіль якого використовувався при анонімності файлів для аудиторських цілей.
  • Формати JSON і XML пропонують кращу структуру для складних профілів з закріпленими визначеннями.

Заключення

Цей урок показав, як створити персоналізовані профілі анонімності DICOM за допомогою CSV, JSON або XML-файлів в C# з Aspose.Medical.

 Українська