DICOM メタデータを SQL と NoSQL データベースで C# で保存する
メディカルイメージアプリケーションは、頻繁に検索し、効率的にDICOMのメタデータを検索する必要がありますが、DicOMファイルは豊富なメタルデータで保存され、データベースに抽出すると、迅速なリクエスト、分析、および病院情報システムとの統合が可能になります。このガイドでは、Aspose.Medical for .NET を使用して SQL および NoSQL データバックに DICOのメンタル情報を保存する方法を示しています。 なぜDICOMメタデータをデータベースに保存するのか? DICOM ファイルには幅広いメタデータが含まれていますが、数千のファイルを検索することは遅いです。 Fast queries: 患者、日付、モデル、またはいずれかの属性による研究を直ちに検索する アナリティクス:報告と統計のための統合データ 統合:画像データをEMR/EHRシステムに接続する スカラビリティ:適切なインデックスで数百万の研究を処理する フルテキスト検索:説明キーワードで研究を見つける DICOM メタデータ抽出財団 まず、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 に DICOM メタデータを保存する: ...