DICOM Cloud PACS 和 Teleradiology 在 C# 的匿名化

基于云的PACS(图像存档和通信系统)和电流学服务正在通过允许远程访问诊断图片来转化医学形象。 但是,将患者数据转移到云环境需要仔细关注隐私和安全。 这本指南展示了如何实施DICOM匿名化为云和电视工作流使用Aspose.Medical为 .NET。 為什麼匿名化為雲端和電視? 当 DICOM 图像离开医院网络用于云存储或远程阅读时,适用于额外的隐私考虑: 数据居住:患者数据可能跨越不同规则的地理界限 第三方访问:云提供商和电信服务是HIPAA业务合作伙伴 网络传输:通过互联网的数据需要额外的保护 多功能环境:云系统可以存储来自多个医疗保健组织的数据 远程放射学家:外部读者可能不需要访问患者识别器 匿名化创造了一个保护患者隐私的安全层,即使其他安全措施失败。 Cloud Upload 匿名化服务 在云上传之前创建一个匿名化DICOM文件的服务: using Aspose.Medical.Dicom; using Aspose.Medical.Dicom.Anonymization; public class CloudUploadAnonymizer { private readonly ConfidentialityProfile _profile; private readonly Dictionary<string, string> _studyIdMapping; private readonly string _organizationPrefix; public CloudUploadAnonymizer(string organizationPrefix) { _organizationPrefix = organizationPrefix; _studyIdMapping = new Dictionary<string, string>(); // Create profile optimized for cloud storage var options = ConfidentialityProfileOptions.BasicProfile | ConfidentialityProfileOptions.RetainDeviceIdentity | ConfidentialityProfileOptions.CleanDescriptions; _profile = ConfidentialityProfile.CreateDefault(options); } public CloudUploadResult AnonymizeForCloud(string inputPath, string outputPath) { var result = new CloudUploadResult { OriginalPath = inputPath, ProcessedAt = DateTime.UtcNow }; try { DicomFile dicomFile = DicomFile.Open(inputPath); var dataset = dicomFile.Dataset; // Capture original identifiers for mapping string originalStudyUid = dataset.GetString(DicomTag.StudyInstanceUID); string originalPatientId = dataset.GetString(DicomTag.PatientID); string originalAccession = dataset.GetString(DicomTag.AccessionNumber); // Generate cloud-safe identifiers string cloudStudyId = GetOrCreateCloudStudyId(originalStudyUid); result.OriginalStudyUID = originalStudyUid; result.CloudStudyId = cloudStudyId; result.OriginalPatientId = originalPatientId; // Apply anonymization var anonymizer = new Anonymizer(_profile); anonymizer.Anonymize(dataset); // Apply cloud-specific identifiers dataset.AddOrUpdate(DicomTag.PatientID, $"{_organizationPrefix}-{cloudStudyId}"); dataset.AddOrUpdate(DicomTag.PatientName, $"CloudStudy^{cloudStudyId}"); dataset.AddOrUpdate(DicomTag.AccessionNumber, cloudStudyId); // Add cloud tracking metadata dataset.AddOrUpdate(DicomTag.InstitutionName, _organizationPrefix); dicomFile.Save(outputPath); result.CloudPath = outputPath; result.Success = true; } catch (Exception ex) { result.Success = false; result.ErrorMessage = ex.Message; } return result; } private string GetOrCreateCloudStudyId(string originalStudyUid) { if (!_studyIdMapping.ContainsKey(originalStudyUid)) { string timestamp = DateTime.UtcNow.ToString("yyyyMMddHHmmss"); string random = Guid.NewGuid().ToString("N").Substring(0, 8); _studyIdMapping[originalStudyUid] = $"{timestamp}-{random}"; } return _studyIdMapping[originalStudyUid]; } public Dictionary<string, string> GetStudyMapping() { return new Dictionary<string, string>(_studyIdMapping); } } public class CloudUploadResult { public string OriginalPath { get; set; } public string CloudPath { get; set; } public string OriginalStudyUID { get; set; } public string CloudStudyId { get; set; } public string OriginalPatientId { get; set; } public DateTime ProcessedAt { get; set; } public bool Success { get; set; } public string ErrorMessage { get; set; } } Teleradiology 工作流集成 建立完整的无线电匿名化管道: ...

二月 25, 2025 · 8 分钟

临床试验的DICOM匿名化:完整的C#实施指南

涉及医学图像的临床试验需要仔细处理DICOM数据,以保护患者的隐私,同时维持监管提交的数据完整性。本指南涵盖如何实施使用Aspose.Medical for .NET的诊所试点DIKOM匿名化,包括主体ID地图、审计轨道和多场地协调。 临床试验匿名化要求 用于临床试验的匿名化DICOM文件不同于标准的识别。 监管机构如FDA要求: 一致的物体识别器:每个患者都必须获得一个独特的试验对象身份证,在所有图像会议中保持一致。 审计路径:关于什么被匿名化以及什么时的完整文档 数据完整性:医疗图像质量必须准确保留 ** 可再生性**:同一输入必须产生相同的匿名输出 21 CFR 第11部分遵守:电子记录必须符合FDA的真实性和完整性要求 制定匿名化框架 首先,创建一个临床试验匿名化服务,处理主题地图和审计登记: using Aspose.Medical.Dicom; using Aspose.Medical.Dicom.Anonymization; using System.Collections.Concurrent; using System.Security.Cryptography; using System.Text; public class ClinicalTrialAnonymizer { private readonly string _trialId; private readonly ConcurrentDictionary<string, string> _subjectMapping; private readonly string _mappingFilePath; private readonly string _auditLogPath; public ClinicalTrialAnonymizer(string trialId, string dataDirectory) { _trialId = trialId; _mappingFilePath = Path.Combine(dataDirectory, $"{trialId}_subject_mapping.json"); _auditLogPath = Path.Combine(dataDirectory, $"{trialId}_audit_log.csv"); _subjectMapping = LoadOrCreateMapping(); InitializeAuditLog(); } private ConcurrentDictionary<string, string> LoadOrCreateMapping() { if (File.Exists(_mappingFilePath)) { var json = File.ReadAllText(_mappingFilePath); var dict = JsonSerializer.Deserialize<Dictionary<string, string>>(json); return new ConcurrentDictionary<string, string>(dict); } return new ConcurrentDictionary<string, string>(); } private void InitializeAuditLog() { if (!File.Exists(_auditLogPath)) { File.WriteAllText(_auditLogPath, "Timestamp,OriginalFile,AnonymizedFile,SubjectID,Operator,Action\n"); } } public string GetOrCreateSubjectId(string originalPatientId) { return _subjectMapping.GetOrAdd(originalPatientId, _ => { int subjectNumber = _subjectMapping.Count + 1; return $"{_trialId}-{subjectNumber:D4}"; }); } public void SaveMapping() { var json = JsonSerializer.Serialize( _subjectMapping.ToDictionary(k => k.Key, v => v.Value), new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(_mappingFilePath, json); } } 实行 Subject ID 替代 临床试验需要在所有图像会议上进行一致的主题识别: ...

二月 18, 2025 · 6 分钟
 中文