CSV, JSON 또는 XML에서 사용자 지정 DICOM 익명화 프로필을 만드는 방법

CSV, JSON 또는 XML에서 사용자 지정 DICOM 익명화 프로필을 만드는 방법

이 튜토리얼은 C#에서 CSV, JSON 또는 XML 파일을 사용하여 사용자 지정 DICOM 익명화 프로필을 만드는 방법을 보여줍니다.

왜 사용자 지정 프로필을 만드는가?

사전 설정된 DICOM PS3.15 프로파일은 모든 기관 요구 사항을 충족하지 못할 수 있습니다.

  • 내부 추적을 위한 특정 기관 식별자를 유지
  • 조직-특별 개인 정보 보호 규칙 적용
  • 귀하의 관할권 내에서 독특한 규제 요구 사항을 충족

Tag 행동 설명

다음 행동은 DICOM 태그에 적용될 수 있습니다 :

행동코드설명
삭제D데이터 세트에서 태그를 완전히 제거합니다.
0 0 0Z가치를 빈 또는 0 가치로 대체하십시오.
제거X삭제할 경우 (제거와 비슷한 경우)
KeepK원본 가치를 변함없이 유지하십시오.
CleanC식별 정보를 제거함으로써 가치를 청소합니다.
UID를 대체합니다.U새로 생성된 UID로 교체

원제 : Environment Preparation

  • Visual Studio 또는 모든 호환되는 .NET IDE를 설정합니다.
  • 새로운 .NET 8 콘솔 애플리케이션 프로젝트를 만드십시오.
  • NuGet 패키지 관리자에서 Aspose.Medical을 설치합니다.
  • 사용자 지정 프로필 정의 파일을 준비하십시오.

단계별로 사용자 지정 프로필 만들기 가이드

단계 1 : Aspose.Medical 설치

NuGet을 사용하여 프로젝트에 Aspose.Medical 도서관을 추가합니다.

Install-Package Aspose.Medical

2단계: CSV 프로파일 정의 만들기

태그 패턴과 행동을 포함한 CSV 파일을 만드십시오. 각 라인은 태그와 그 작업을 지정합니다.

  • 프로파일.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=“코드 복사”

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

이 프로필 :

  • Zeros 환자 이름 및 ID
  • 출생 날짜 삭제
  • 키프스 환자 섹스
  • 연구, 시리즈 및 SOP 인스턴스 UID를 대체합니다.
  • 기관 정보 삭제
  • 클라이언트 연구 설명

단계 3 : JSON 프로필 정의를 만들기 (대체)

동일한 태그 정의를 가진 JSON 파일을 만듭니다.

  • 프로파일.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" }
]

단계 4 : XML 프로필 정의를 만들기 (대체)

동일한 태그 정의를 가진 XML 파일을 만듭니다.

  • 프로파일 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>

5단계: 사용자 지정 프로필을 업로드합니다.

사용자 지정 프로필을 파일 형식에 적합한 방법을 사용하여 업로드합니다.

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

단계 6 : 사용자 지정 프로필을 적용

업로드된 프로필을 가진 애니메이터를 만들고 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");

CSV 프로필을 가진 전체 코드 예제

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

실용적인 시나리오 예제

시나리오 1 : 내부 추적을위한 기관 ID를 유지

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

시나리오 2 : 관계를 유지하는 동안 모든 UID를 대체

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

시나리오 3 : 외부 공유에 대한 최대 개인 정보 보호

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

인증: 사용자 지정 프로필을 테스트

항상 생산 사용 전에 사용자 지정 프로파일을 확인하십시오 :

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

무효 파일 경로

프로필 파일이 찾을 수 없는 경우:

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

Invalid Tag 패턴 또는 행동

안전 태그 패턴은 포맷을 따르십시오 (GGGG,EEEE) GGGG는 그룹이며 EEEE는 hexadecimal의 요소입니다. 유효한 행동은 D, Z, X, K, C, U입니다..

사용자 지정 프로필을 위한 최상의 관행

  • 버전 컨트롤: 버전 제어에서 프로필 파일을 저장하여 시간이 지남에 따라 변경 사항을 추적합니다.
  • Documentation: 각 태그에 대해 특정 행동이 선택된 이유를 설명하는 코멘트를 추가합니다.
  • ** 테스트** : DICOM 파일을 생성하기 전에 시험 데이터로 프로파일을 검증합니다.
  • Backup: 항상 원본 프로필 파일의 백업을 유지합니다.
  • 평가: 정기적으로 프로필을 검토하여 규제 요구 사항을 여전히 충족시키는 것을 보장합니다.

추가 정보

  • 다양한 사용 사례 (내부 공유, 외부 연구 등)에 대한 여러 프로필을 만드는 것을 고려하십시오.
  • 프로필이 검토 목적으로 파일을 익명화하는 데 사용되는 문서.
  • JSON 및 XML 형식은 복잡한 프로파일에 대한 더 나은 구조를 제공합니다.

결론

이 튜토리얼은 C#에서 CSV, JSON 또는 XML 파일을 사용하여 사용자 지정 DICOM 익명화 프로파일을 만드는 방법을 보여 주었습니다.Custom Profiles는 기관 특정 개인 정보 보호 정책을 구현하는 유연성을 제공하며 건강 관리 규정 준수를 유지합니다.

 한국어