定制的隐私资料 适应您的医院政策的DICOM匿名化

此指南展示了如何使用 CSV、JSON 或 XML 文件创建自定义的 DICOM 匿名化配置文件,以满足机构特定的隐私要求,同时保持其遵守。

十二月 8, 2025 · 3 分钟 · Babar Raza

为什么DICOM在 .NET 工作流中对 HIPAA 和 GDPR 的匿名化重要

这个全面的指南解释了为什么DICOM匿名化对医疗保健隐私法规很重要,并展示了如何在 .NET 应用程序中使用 Aspose.Medical DICOME Anonymizer 实施符合性匿名的方法。

十二月 8, 2025 · 2 分钟 · Babar Raza

在 ASP.NET Core 中构建 DICOM 匿名化微服务

这个全面的指南将通过使用 ASP.NET Core 和 Aspose.Medical 构建生产准备的 DICOM 匿名化微服务,包括建筑模式、代码示例和最佳实践。

十二月 8, 2025 · 4 分钟 · Babar Raza

准备 DICOM 数据集 AI 和机器学习与 Aspose.Medical

本指南展示了为人工智能研究准备医学图像数据集的完整工作流,包括包匿名化和转换为JSON格式,以便将其输入到ML管道。

十二月 8, 2025 · 3 分钟 · Babar Raza

存储 DICOM Metadata 在 SQL 和 NoSQL 数据库中使用 C#

医学图像应用程序往往需要有效地搜索和查询DICOM的代数据,而DicOM文件存储富有的代码,将其提取到数据库,可以快速查找,分析和与医院信息系统的整合。 为什么 DICOM 存储数据在数据库中? DICOM 文件包含大量的代数据,但搜索数千个文件是缓慢的。 快速查询:按患者、日期、模式或任何属性立即查找研究 分析:报告和统计数据集成 集成:将图像数据连接到EMR/EHR系统 Scalability:以适当的索引处理数百万项研究 全文本搜索:用描述关键词找到研究 DICOM Metadata Extraction 基金会 首先,创建一个将 DICOM 转换为数据库准备的对象的数据提取器: using Aspose.Medical.Dicom; public class DicomMetadataExtractor { public DicomStudyRecord ExtractStudyRecord(string filePath) { DicomFile dicomFile = DicomFile.Open(filePath); var dataset = dicomFile.Dataset; return new DicomStudyRecord { // Identifiers StudyInstanceUID = dataset.GetString(DicomTag.StudyInstanceUID), SeriesInstanceUID = dataset.GetString(DicomTag.SeriesInstanceUID), SOPInstanceUID = dataset.GetString(DicomTag.SOPInstanceUID), AccessionNumber = dataset.GetString(DicomTag.AccessionNumber), // Patient PatientID = dataset.GetString(DicomTag.PatientID), PatientName = dataset.GetString(DicomTag.PatientName), PatientBirthDate = ParseDicomDate(dataset.GetString(DicomTag.PatientBirthDate)), PatientSex = dataset.GetString(DicomTag.PatientSex), // Study StudyDate = ParseDicomDate(dataset.GetString(DicomTag.StudyDate)), StudyTime = dataset.GetString(DicomTag.StudyTime), StudyDescription = dataset.GetString(DicomTag.StudyDescription), ReferringPhysicianName = dataset.GetString(DicomTag.ReferringPhysicianName), // Series Modality = dataset.GetString(DicomTag.Modality), SeriesDescription = dataset.GetString(DicomTag.SeriesDescription), SeriesNumber = ParseInt(dataset.GetString(DicomTag.SeriesNumber)), BodyPartExamined = dataset.GetString(DicomTag.BodyPartExamined), // Image InstanceNumber = ParseInt(dataset.GetString(DicomTag.InstanceNumber)), Rows = ParseInt(dataset.GetString(DicomTag.Rows)), Columns = ParseInt(dataset.GetString(DicomTag.Columns)), // Equipment Manufacturer = dataset.GetString(DicomTag.Manufacturer), InstitutionName = dataset.GetString(DicomTag.InstitutionName), StationName = dataset.GetString(DicomTag.StationName), // File Info FilePath = filePath, FileSize = new FileInfo(filePath).Length, IndexedAt = DateTime.UtcNow }; } private DateTime? ParseDicomDate(string dicomDate) { if (string.IsNullOrEmpty(dicomDate) || dicomDate.Length != 8) return null; if (DateTime.TryParseExact(dicomDate, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out var date)) { return date; } return null; } private int? ParseInt(string value) { if (int.TryParse(value, out var result)) return result; return null; } } public class DicomStudyRecord { public string StudyInstanceUID { get; set; } public string SeriesInstanceUID { get; set; } public string SOPInstanceUID { get; set; } public string AccessionNumber { get; set; } public string PatientID { get; set; } public string PatientName { get; set; } public DateTime? PatientBirthDate { get; set; } public string PatientSex { get; set; } public DateTime? StudyDate { get; set; } public string StudyTime { get; set; } public string StudyDescription { get; set; } public string ReferringPhysicianName { get; set; } public string Modality { get; set; } public string SeriesDescription { get; set; } public int? SeriesNumber { get; set; } public string BodyPartExamined { get; set; } public int? InstanceNumber { get; set; } public int? Rows { get; set; } public int? Columns { get; set; } public string Manufacturer { get; set; } public string InstitutionName { get; set; } public string StationName { get; set; } public string FilePath { get; set; } public long FileSize { get; set; } public DateTime IndexedAt { get; set; } } SQL Server 集成 存储在 SQL Server 中使用 Entity Framework Core 的 DICOM 数据: ...

二月 28, 2025 · 12 分钟

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

在 C# 中构建 DICOM Metadata Viewer: Complete Tutorial

了解 DICOM 文件内容对医学图像开发、解决问题以及质量保证至关重要。本教程向您展示如何在 C# 中构建一个全面的 Dicom 数据浏览器,以提取和显示患者信息、研究细节和技术图形参数。 什么是DICOM Metadata? DICOM 文件包含两个主要组成部分:像素数据(实际图像)和代码信息(图形信息)。 病人人口学:姓名、身份证、出生日期、性别 研究信息:日期、时间、描述、参考医生 系列细节:模式、身体部分、图像协议 图像参数:尺寸、像素空间、窗口/级别设置 ** 设备信息**:制造商、模型、软件版本 一个数据视图可以帮助开发人员检查这些属性,以便进行解密、验证和数据分析。 基本数据提取 首先,提取常见的DICOM属性: using Aspose.Medical.Dicom; public class DicomMetadataViewer { public DicomMetadata ExtractMetadata(string filePath) { DicomFile dicomFile = DicomFile.Open(filePath); var dataset = dicomFile.Dataset; return new DicomMetadata { // Patient Information PatientName = dataset.GetString(DicomTag.PatientName), PatientID = dataset.GetString(DicomTag.PatientID), PatientBirthDate = dataset.GetString(DicomTag.PatientBirthDate), PatientSex = dataset.GetString(DicomTag.PatientSex), PatientAge = dataset.GetString(DicomTag.PatientAge), // Study Information StudyInstanceUID = dataset.GetString(DicomTag.StudyInstanceUID), StudyDate = dataset.GetString(DicomTag.StudyDate), StudyTime = dataset.GetString(DicomTag.StudyTime), StudyDescription = dataset.GetString(DicomTag.StudyDescription), AccessionNumber = dataset.GetString(DicomTag.AccessionNumber), ReferringPhysician = dataset.GetString(DicomTag.ReferringPhysicianName), // Series Information SeriesInstanceUID = dataset.GetString(DicomTag.SeriesInstanceUID), Modality = dataset.GetString(DicomTag.Modality), SeriesDescription = dataset.GetString(DicomTag.SeriesDescription), SeriesNumber = dataset.GetString(DicomTag.SeriesNumber), BodyPartExamined = dataset.GetString(DicomTag.BodyPartExamined), // Image Information SOPInstanceUID = dataset.GetString(DicomTag.SOPInstanceUID), SOPClassUID = dataset.GetString(DicomTag.SOPClassUID), InstanceNumber = dataset.GetString(DicomTag.InstanceNumber), ImageType = dataset.GetString(DicomTag.ImageType), // Technical Parameters Rows = dataset.GetString(DicomTag.Rows), Columns = dataset.GetString(DicomTag.Columns), BitsAllocated = dataset.GetString(DicomTag.BitsAllocated), BitsStored = dataset.GetString(DicomTag.BitsStored), PixelSpacing = dataset.GetString(DicomTag.PixelSpacing), SliceThickness = dataset.GetString(DicomTag.SliceThickness), // Equipment Information Manufacturer = dataset.GetString(DicomTag.Manufacturer), ManufacturerModelName = dataset.GetString(DicomTag.ManufacturerModelName), StationName = dataset.GetString(DicomTag.StationName), InstitutionName = dataset.GetString(DicomTag.InstitutionName), SoftwareVersions = dataset.GetString(DicomTag.SoftwareVersions) }; } } public class DicomMetadata { // Patient public string PatientName { get; set; } public string PatientID { get; set; } public string PatientBirthDate { get; set; } public string PatientSex { get; set; } public string PatientAge { get; set; } // Study public string StudyInstanceUID { get; set; } public string StudyDate { get; set; } public string StudyTime { get; set; } public string StudyDescription { get; set; } public string AccessionNumber { get; set; } public string ReferringPhysician { get; set; } // Series public string SeriesInstanceUID { get; set; } public string Modality { get; set; } public string SeriesDescription { get; set; } public string SeriesNumber { get; set; } public string BodyPartExamined { get; set; } // Image public string SOPInstanceUID { get; set; } public string SOPClassUID { get; set; } public string InstanceNumber { get; set; } public string ImageType { get; set; } // Technical public string Rows { get; set; } public string Columns { get; set; } public string BitsAllocated { get; set; } public string BitsStored { get; set; } public string PixelSpacing { get; set; } public string SliceThickness { get; set; } // Equipment public string Manufacturer { get; set; } public string ManufacturerModelName { get; set; } public string StationName { get; set; } public string InstitutionName { get; set; } public string SoftwareVersions { get; set; } } 浏览所有 DICOM 标签 列出所有标签在 DICOM 文件中进行完整检查: ...

二月 22, 2025 · 9 分钟

将 DICOM 转换为 XML 在 C#: 医疗保健系统集成指南

XML 仍然是医疗保健数据交换的核心,增强 HL7 消息,企业集成发动机和遗产医院信息系统。 将 DICOM 数据转换为 XML,可在医疗图像系统和更广泛的医疗 IT 基础设施之间进行无缝整合。 為什麼 XML 为健康保健整合? 虽然 JSON 占主导地位,但由于几个原因,XML 仍然在医疗保健方面至关重要: HL7标准:HL7 v2 和 v3 消息广泛使用基于 XML 的格式 企业集成:许多医疗保健集成的引擎(Mirth Connect,Rhapsody)主要使用XML。 Legacy 系统:设立的医院信息系统往往需要 XML 数据传输 文件标准:CDA(临床文档架构)和其他臨床文件使用XML ** 验证**:XML Schema(XSD)提供强大的数据认证能力 基本 DICOM 到 XML 转换 从 DICOM 到 XML 的最简单转换: using Aspose.Medical.Dicom; using Aspose.Medical.Dicom.Serialization; public class DicomXmlConverter { public string ConvertToXml(string dicomFilePath) { // Load DICOM file DicomFile dicomFile = DicomFile.Open(dicomFilePath); // Serialize to XML string string xml = DicomXmlSerializer.Serialize(dicomFile.Dataset); return xml; } public void ConvertToXmlFile(string dicomFilePath, string outputXmlPath) { DicomFile dicomFile = DicomFile.Open(dicomFilePath); using (var stream = new FileStream(outputXmlPath, FileMode.Create)) { DicomXmlSerializer.Serialize(stream, dicomFile.Dataset); } } } XML 输出格式 用于人类可读的产量和解体: ...

二月 20, 2025 · 6 分钟

临床试验的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 分钟

如何将 DICOM 转换为 JSON 在 Web 应用程序中的 C#

现代医疗保健应用越来越依赖于基于网络的界面,以查看和管理医学图像数据. 将 DICOM 文件转换为 JSON 可与 JavaScript 框架、 REST APIs 和云平台无缝集成。 為什麼要將 DICOM 轉換為 JSON? DICOM(Digital Imaging and Communications in Medicine)是医学图像的标准格式,但其二进制结构使其在网页应用中工作具有挑战性。 JavaScript兼容性:JSON是基于网页浏览器和前端框架,如React、Vue 和 Angular。 REST API 集成: JSON 是现代 Web APIs 的实际标准 ** 数据库存储**:像 MongoDB 这样的 NoSQL 資料庫以 JSON 文档為本 人文可读性:JSON与二进制DICOM相比易于检查和排泄 DICOM PS3.18 标准定义了 JSON 数据的代表性,确保医疗保健系统之间的互动性。 设置您的 .NET 项目 首先,安装 Aspose.Medical for .NET 并设置测量许可: using Aspose.Medical; using Aspose.Medical.Dicom; using Aspose.Medical.Dicom.Serialization; // Activate metered license Metered metered = new Metered(); metered.SetMeteredKey("your-public-key", "your-private-key"); 基本 DICOM 到 JSON 转换 将 DICOM 文件转换为 JSON 的最简单方法: ...

二月 15, 2025 · 4 分钟
 中文