Bagaimana untuk mencipta profil anonim DICOM yang disesuaikan daripada CSV, JSON atau XML

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:

ActionCodeDescription
DeleteDMenghapuskan tag sepenuhnya daripada set data
ZeroZMenggantikan nilai dengan nilai kosong atau nol
RemoveXMenghapus jika ada (seperti untuk menghapuskan)
KeepKSimpan nilai asal yang tidak berubah
CleanCMembersihkan nilai dengan menghapuskan maklumat pengenalan
Menggantikan UIDUMenggantikan 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.Medical

Langkah 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);K

Skenario 2: Menggantikan Semua UID Semasa Mengekalkan Hubungan

TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);K

Senario 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);X

Pengesahan: 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.

 Melayu