Jak utworzyć profil anonimowy DICOM z CSV, JSON lub XML
Ten tutorial pokazuje, jak utworzyć profily anonimowości DICOM przy użyciu plików CSV, JSON lub XML w C#. Profily przystosowane pozwalają określić dokładnie, które etykiety należy usunąć, zastąpić lub zachować zgodnie z konkretną polityką prywatności Twojej instytucji.
Dlaczego tworzymy personalizowane profily?
Wstępnie zdefiniowane profily DICOM PS3.15 mogą nie spełniać wszystkich wymogów instytucjonalnych.
- Utrzymanie konkretnych identyfikatorów instytucjonalnych dla wewnętrznej śledzalności
- Przepisy dotyczące prywatności specyficzne dla organizacji
- spełnienie unikalnych wymogów regulacyjnych w Twojej jurysdykcji
Tag Akcje wyjaśnione
Następujące działania można zastosować do etykiet DICOM:
| Akcja | Kod | Opis |
|---|---|---|
| usunięcie | D | Usuń etykietę całkowicie z zestawu danych |
| Zero | Z | Zastąpić wartość pustą lub zero wartością |
| usunąć | X | Usunąć, jeśli istnieje (podobny do usunięcia) |
| Keep | K | Zachowaj oryginalną wartość niezmienioną |
| Clean | C | Wyczyścić wartość poprzez usunięcie informacji identyfikacyjnych |
| Zastąpić UID | U | Zastąpić nowym generowanym UID |
Wymagania: przygotowanie środowiska
- Zainstaluj program Visual Studio lub dowolny kompatybilny .NET IDE.
- Stwórz nowy projekt aplikacji konsoli .NET 8.
- Instaluj Aspose.Medical z programu NuGet Package Manager.
- Przygotuj ustawiony profil definicji pliku.
Przewodnik krok po kroku do tworzenia profilów
Krok 1: Instalacja Aspose.Medical
Dodaj do projektu bibliotekę Aspose.Medical za pomocą NuGet.
Install-Package Aspose.MedicalKrok 2: Tworzenie definicji profilu CSV
Stwórz plik CSV z wzorami tagów i działaniami.Każda linia określa tag i jego działanie.
- profil .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=“Kopia kodów”
<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>
Ten profil to:
- Nazwa i identyfikacja pacjenta Zeros
- Usunąć datę urodzenia
- Seks z pacjentem
- Zastąpić Study, Seria i SOP Instance UID
- Usunąć informacje o instytucji
- Opis czystych badań
Krok 3: Tworzenie definicji profilu JSON (alternatywne)
Tworzenie pliku JSON z identycznymi definicjami tagów.
- profil .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" }
]Krok 4: Tworzenie definicji profilu XML (alternatywne)
Tworzenie pliku XML z identycznymi definicjami tagów.
- Profil 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>Krok 5: Pobierz profil indywidualny
Pobierz profil dostosowany przy użyciu odpowiedniej metody do formatu pliku.
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
);Krok 6: Zastosuj personalizowany profil
Stwórz Anonymizator z załadowanym profilem i zastosować go do plików 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");Pełny przykład kodu z profilem CSV
Oto kompletny przykład za pomocą profilu opartego na 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!");Przykłady praktycznych scenariuszy
Scenariusz 1: Utrzymuj identyfikator instytucji dla śledzenia wewnętrznego
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KScenariusz 2: Wymiana wszystkich UID podczas utrzymania relacji
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KScenariusz 3: Maksymalna prywatność dla zewnętrznego udostępniania
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);XValidacja: Testowanie Twojego indywidualnego profilu
Zawsze weryfikuj indywidualne profile przed użyciem produkcji:
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
Nieprawidłowy ścieżka plików
Jeśli nie można znaleźć pliku profilu:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid Tag Pattern lub akcja
Upewnij się, że wzorce tagowe podążają za formatem (GGGG,EEEE) gdzie GGGG jest grupą i EEEE jest elementem w hexadecimal. ważne działania są: D, Z, X, K, C, U.
Najlepsze praktyki dla personalizowanych profili
- Kontrola wersji: przechowuj pliki profilu w sterowaniu wersją, aby śledzić zmiany z czasem.
- Dokumentacja: Dodaj komentarze wyjaśniające, dlaczego określone działania zostały wybrane dla każdej etykiety.
- Testowanie: weryfikuj profile z danymi testowymi przed zastosowaniem do produkcji plików DICOM.
- Backup: Zawsze trzymaj kopie zapasowe oryginalnych plików profilowych.
- Review: okresowe przeglądy profilów, aby upewnić się, że nadal spełniają wymagania regulacyjne.
Dodatkowe informacje
- Zastanów się nad tworzeniem wielu profilów dla różnych przypadków użytkowania (podział wewnętrzny, badania zewnętrzne itp.).
- Dokument, którego profil został wykorzystany podczas anonimowania plików do celów audytu.
- Formaty JSON i XML oferują lepszą strukturę dla złożonych profili z definicjami.
konkluzja
Ten tutorial wykazał, jak utworzyć profily anonimowości DICOM przy użyciu plików CSV, JSON lub XML w C# z Aspose.Medical.