Kako stvoriti prilagođeni DICOM anonimni profil iz CSV, JSON ili XML

Kako stvoriti prilagođeni DICOM anonimni profil iz CSV, JSON ili XML

Ovaj tutorial pokazuje kako stvoriti prilagođene profile anonimnosti DICOM-a pomoću CSV, JSON ili XML datoteka u C#. Prilagođeni profili omogućuju vam da točno definirate koje oznake treba ukloniti, zamijeniti ili zadržati u skladu s posebnim politikama privatnosti vaše institucije.

Zašto napraviti prilagođene profile?

Predefinirani DICOM PS3.15 profili možda ne zadovoljavaju sve institucionalne zahtjeve.

  • Održavanje specifičnih institucionalnih identifikacija za unutarnju praćenost
  • Primjenjujte pravila privatnosti posebne za organizaciju
  • Usklađivanje jedinstvenih regulatornih zahtjeva u vašoj jurisdikciji

Tag akcije objašnjeno

Sljedeće mjere mogu se primjenjivati na DICOM oznake:

ActionCodeOpis
DeleteDUklanjanje oznake u potpunosti iz zbirke podataka
ZeroZZamijenite vrijednost praznom ili nula vrijednošću
RemoveXUklanjanje ako je prisutno (sličan uklanjanju)
KeepKOdržavanje originalne vrijednosti nepromijenjene
CleanCČišćenje vrijednosti uklanjanjem identifikacijskih informacija
Zamjena s UIDUZamjena s novim generiranim UID-om

Predviđanja: Priprema za okoliš

  • Sastavite Visual Studio ili bilo koji kompatibilni .NET IDE.
  • Stvorite novi .NET 8 konzol aplikacijski projekt.
  • Instalirajte Aspose.Medical iz upravitelja paketa NuGet.
  • Pripremite svoj prilagođeni profil definicije datoteke.

Korak po korak vodič za stvaranje prilagođenih profila

Korak 1: Instalirati Aspose.Medical

Dodajte Aspose.Medical knjižnicu u svoj projekt pomoću NuGeta.

Install-Package Aspose.Medical

Korak 2: Stvorite definiciju CSV profila

Stvorite CSV datoteku s oznakama i akcijama. svaka linija određuje oznaku i njezinu akciju.

  • Profil i 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=“kopiranje koda”

<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>

Ovaj profil:

  • Zeros ime i identifikacija pacijenta
  • Uklanjanje datuma rođenja
  • Pacijentski seks
  • Umjesto studija, serije i SOP instance UID-a
  • Uklanjanje institucijskih informacija
  • Čišćenje studija opis

Korak 3: Stvorite definiciju JSON profila (alternativno)

Stvorite JSON datoteku s istim definicijama oznake.

  • Profil.json i dalje: *
[
  { "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" }
]

Korak 4: Kreirajte definiciju XML profila (alternativna)

Stvorite XML datoteku s istim definicijama oznake.

  • 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>

Korak 5: Preuzmite prilagođeni profil

Preuzmite prilagođeni profil pomoću odgovarajuće metode za vaš format datoteke.

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

Korak 6: Primijenite prilagođeni profil

Stvorite Anonimizator s preuzimanim profilom i primijenite ga na DICOM datoteke.

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");

Cjeloviti primjer koda s CSV profilom

Ovdje je potpuni primjer pomoću prilagođenog profila koji se temelji na CSV-u:

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!");

Primjeri praktičnog scenarija

Scenarij 1: zadržavanje institucijskog ID-a za unutarnje praćenje

TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);K

Scenarij 2: Zamijenite sve UID-ove dok održavate odnose

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

Scenarij 3: Maksimalna privatnost za vanjsko dijeljenje

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

Validacija: testiranje vašeg personaliziranog profila

Uvijek provjerite prilagođene profile prije upotrebe proizvodnje:

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

Invalidni put datoteke

Ako se profilni datoteka ne može pronaći:

string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
    Console.WriteLine($"Profile file not found: {profilePath}");
    return;
}

Invalid Tag Pattern ili akcija

Sigurna oznaka uzoraka slijede formatu (GGGG,EEEE) gdje je GGGG skupina i EEEE je element u hexadecimal. valjane akcije su: D, Z, X, K, C, U.

Najbolje prakse za prilagođene profile

  • Version Control: Skladišite datoteke profila u verziji za praćenje promjena s vremenom.
  • Dokumentacija: Dodajte komentare koji objašnjavaju zašto su za svaku oznaku odabrane određene akcije.
  • Testing: Validirati profile s testnim podacima prije podnošenja zahtjeva za proizvodnju DICOM datoteke.
  • Backup: Uvijek sačuvajte kopiju originalnih profilnih datoteka.
  • Review: Periodično pregledavanje profila kako bi se osiguralo da i dalje ispunjavaju regulatorne zahtjeve.

Dodatne informacije

  • Razmislite o stvaranju više profila za različite slučajeve korištenja ( unutarnje dijeljenje, vanjske istraživanja, itd.).
  • Dokument koji je profil koristio za anonimizaciju datoteka u svrhu revizije.
  • JSON i XML formati pružaju bolju strukturu za složene profile s nestiranim definicijama.

zaključak

Ovaj tutorial je pokazao kako stvoriti prilagođene DICOM anonimizacije profila pomoću CSV, JSON, ili XML datoteke u C# s Aspose.Medical.

 Hrvatski