Bagaimana untuk mencipta profil anonim DICOM yang disesuaikan daripada CSV, JSON atau XML
Tutorial ini menunjukkan bagaimana untuk mencipta profil anonimiti DICOM yang disesuaikan menggunakan fail CSV, JSON, atau XML dalam C#. Profil yang dipersonalisasi membolehkan anda menentukan dengan tepat tag mana yang perlu dihapuskan, digantikan atau disimpan mengikut dasar privasi tertentu institusi anda.
Mengapa anda perlu membuat profil yang disesuaikan?
Profil DICOM PS3.15 mungkin tidak memenuhi semua keperluan institusi. profil tersuai membolehkan anda:
- Mengekalkan pengenalpastian institusi khusus untuk kebolehpercayaan dalaman
- Menguatkuasakan peraturan privasi khusus organisasi
- Memenuhi keperluan peraturan unik di bidang kuasa anda
Tag Aksi yang dijelaskan
Tindakan berikut boleh digunakan untuk tag DICOM:
| Action | Code | Description |
|---|---|---|
| Delete | D | Menghapuskan tag sepenuhnya daripada set data |
| Zero | Z | Menggantikan nilai dengan nilai kosong atau nol |
| Remove | X | Menghapus jika ada (seperti untuk menghapuskan) |
| Keep | K | Simpan nilai asal yang tidak berubah |
| Clean | C | Membersihkan nilai dengan menghapuskan maklumat pengenalan |
| Menggantikan UID | U | Menggantikan dengan UID yang baru dihasilkan |
Tag: persiapan persekitaran
- Menyediakan Visual Studio atau mana-mana .NET IDE yang kompatibel.
- Mencipta projek aplikasi .NET 8 baru.
- Instal Aspose.Medical daripada NuGet Package Manager.
- Sediakan fail definisi profil anda yang disesuaikan.
Langkah demi langkah panduan untuk mencipta profil yang disesuaikan
Langkah 1: Instal Aspose.Medical
Tambah perpustakaan Aspose.Medical kepada projek anda menggunakan NuGet.
Install-Package Aspose.MedicalLangkah 2: Mencipta definisi profil CSV
Mencipta fail CSV dengan corak dan tindakan tag. Setiap baris menentukan tag dan perbuatan.
- 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=“Kod salinan”
<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 pesakit Zeros
- Menghapuskan tarikh lahir
- Tag: seks pesakit
- Menggantikan Study, Series, dan SOP Instance UID
- Menghapuskan maklumat institusi
- Pembersihan kajian deskripsi
Langkah 3: Mencipta Definisi Profil JSON (Alternatif)
Mencipta fail 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: Mencipta Definisi Profil XML (Alternatif)
Mencipta fail 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: Muat turun profil yang disesuaikan
Muat turun profil tersuai menggunakan kaedah yang sesuai untuk format fail 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: Menggunakan profil yang disesuaikan
Mencipta Anonymizer dengan profil yang dimuat naik dan menerapkannya kepada fail 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 Kod Lengkap dengan Profil CSV
Berikut ialah contoh lengkap menggunakan profil tersuai berasaskan 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 skrip praktikal
Senario 1: Retain ID institusi untuk pengesanan dalaman
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KSkenario 2: Menggantikan Semua UID Semasa Mengekalkan Hubungan
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KSenario 3: Privasi maksimum untuk perkongsian luaran
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);XPengesahan: Menguji Profil Custom Anda
Sentiasa mengesahkan profil yang disesuaikan sebelum penggunaan pengeluaran:
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
Laluan fail yang tidak sah
Jika fail profil tidak boleh didapati:
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid Tag Pattern atau Tindakan
Pastikan pattern tag mengikuti format (GGGG,EEEE) di mana GGGG ialah kumpulan dan EEEE ialah elemen dalam hexadecimal. tindakan yang sah ialah: D, Z, X, K, C, U.
Praktik terbaik untuk profil yang disesuaikan
- Kawalan Versi: Simpan fail profil dalam kawalan versi untuk menjejaki perubahan sepanjang masa.
- Dokumen: Tambah komen yang menjelaskan mengapa tindakan tertentu dipilih untuk setiap tag.
- Testing: Mengesahkan profil dengan data ujian sebelum memohon untuk menghasilkan fail DICOM.
- Backup: Sentiasa menyimpan sandaran fail profil asal.
- Review: Meninjau profil secara berkala untuk memastikan mereka masih memenuhi keperluan peraturan.
Maklumat tambahan
- Pertimbangkan untuk mencipta pelbagai profil untuk kes penggunaan yang berbeza (perkongsian dalaman, penyelidikan luaran, dan lain-lain).
- Dokumen profil yang digunakan untuk menganonimkan fail untuk tujuan audit.
- Format JSON dan XML menawarkan struktur yang lebih baik untuk profil yang kompleks dengan definisi yang tertutup.
Conclusion
Tutorial ini telah membuktikan bagaimana untuk mencipta profil anonimiti DICOM disesuaikan menggunakan fail CSV, JSON, atau XML dalam C# dengan Aspose.Medical.Profiler tersuai menyediakan fleksibiliti untuk melaksanakan dasar privasi khusus institusi sambil mengekalkan pematuhan dengan peraturan penjagaan kesihatan.