Cara membuat profil anonim DICOM yang disesuaikan dari CSV, JSON atau XML
Tutorial ini menunjukkan cara membuat profil anonimitas DICOM yang disesuaikan menggunakan file CSV, JSON, atau XML dalam C#.Profil yang tersuai memungkinkan Anda untuk menentukan dengan tepat tag apa yang harus dihapus, digantikan atau disimpan sesuai dengan kebijakan privasi spesifik institusi Anda.
Mengapa membuat profil yang disesuaikan?
Profil DICOM PS3.15 tidak dapat memenuhi semua persyaratan institusi. profil tersuai memungkinkan Anda:
- Mengekalkan identifikasi institusi khusus untuk traceability internal
- Mengaplikasikan peraturan privasi khusus organisasi
- Memenuhi persyaratan regulasi yang unik di yurisdiksi Anda
Tag Aksi yang dijelaskan
Tindakan berikut dapat diterapkan pada tag DICOM:
| Aksi | kode | deskripsi |
|---|---|---|
| menghapus | D | Menghapus tag sepenuhnya dari data set |
| 0 0 0 | Z | Mengganti nilai dengan nilai kosong atau nol |
| Menghapus | X | Menghapus jika ada (sama dengan menghapus) |
| Keep | K | Simpan nilai asli yang tidak berubah |
| Clean | C | Membersihkan nilai dengan menghapus informasi identifikasi |
| Mengganti dengan UID | U | Mengganti dengan UID yang baru diproduksi |
Persyaratan: Persiapan Lingkungan
- Menginstal Visual Studio atau IDE .NET yang kompatibel.
- Mencipta aplikasi .NET 8 baru.
- Instal Aspose.Medical dari NuGet Package Manager.
- Siapkan file definisi profil yang disesuaikan.
Panduan langkah demi langkah untuk membuat profil yang disesuaikan
Langkah 1: Instalasi Aspose.Medical
Tambahkan perpustakaan Aspose.Medical ke proyek Anda menggunakan NuGet.
Install-Package Aspose.MedicalLangkah 2: Mencipta Definisi Profil CSV
Mencipta file CSV dengan pola tag dan tindakan.Setiap baris mendefinisikan label dan aksi.
- Profil dan CV : *
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=“Kopi kode”
<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>
Profil ini :
- Nama dan ID pasien Zeros
- Menghapus tanggal lahir
- Perbedaan Seks Pacient
- Menggantikan Study, Series, dan SOP Instance UID
- Menghapus informasi institusi
- Pembersihan studi deskripsi
Langkah 3: Membuat Definisi Profil JSON (Alternatif)
Buat file JSON dengan definisi tag yang sama.
- Profil dan 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" }
]Langkah 4: Membuat Definisi Profil XML (Alternatif)
Buat file XML dengan definisi tag yang sama.
- 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>Langkah 5: Mengisi Profil Custom
Download profil yang disesuaikan menggunakan metode yang sesuai untuk format file Anda.
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
);Langkah 6: Gunakan profil yang disesuaikan
Mencipta Anonymizer dengan profil yang dimuat dan menerapkannya ke file 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");Contoh kode lengkap dengan profil CSV
Berikut adalah contoh lengkap menggunakan profil tersuai berdasarkan 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!");Contoh skenario praktis
Skenario 1: Retain Institution ID untuk Tracking Internal
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KSkenario 2: Mengganti semua UID saat mempertahankan hubungan
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KSkenario 3: Privasi maksimum untuk berbagi eksternal
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);XValidasi: Menguji Profil Custom Anda
Selalu validasi profil yang disesuaikan sebelum penggunaan produksi:
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
Penyalahgunaan File Path
Jika file profil tidak dapat ditemukan:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid tag pattern atau tindakan
Memastikan pola tag mengikuti format (GGGG,EEEE) di mana GGGG adalah kelompok dan EEEE adalah elemen dalam hexadecimal. tindakan yang sah adalah: D, Z, X, K, C, U.
Praktik terbaik untuk profil tersuai
- Kontrol versi: Simpan file profil dalam kontrol versi untuk memantau perubahan dari waktu ke waktu.
- Dokumentasi: Tambahkan komentar yang menjelaskan mengapa tindakan spesifik dipilih untuk setiap tag.
- Testing: Validasi profil dengan data tes sebelum memohon untuk menghasilkan file DICOM.
- Backup: Selalu menyimpan backup dari file profil asli.
- Review: Periodis revisi profil untuk memastikan mereka masih memenuhi persyaratan regulasi.
Informasi Tambahan
- Pertimbangkan untuk membuat profil berbilang untuk kasus penggunaan yang berbeda (perkongsian internal, penelitian eksternal, dll).
- Dokumen profil yang digunakan ketika anonimkan file untuk tujuan audit.
- Format JSON dan XML menawarkan struktur yang lebih baik untuk profil yang kompleks dengan definisi yang tertutup.
Kesimpulan
Tutorial ini telah menunjukkan bagaimana untuk membuat profil anonimitas DICOM yang disesuaikan menggunakan CSV, JSON, atau XML file dalam C# dengan Aspose.Medical.