การจัดเก็บข้อมูล DICOM ในฐานข้อมูล SQL และ NoSQL ด้วย C#

การประยุกต์ใช้ภาพทางการแพทย์มักจําเป็นต้องค้นหาและสอบถามข้อมูลโลหะ DICOM อย่างมีประสิทธิภาพ ในขณะที่ไฟล์ DIKOM เก็บ metadata ที่อุดมไปด้วยการสกัดไปยังฐานข้อมูลช่วยให้คําถามที่รวดเร็วการวิเคราะห์และการบูรณาการกับระบบข้อมูลโรงพยาบาล คู่มือนี้แสดงให้เห็นว่าวิธีการบันทึกข้อมูลโครงสร้างพื้นฐานใน SQL และ NoSQL โดยใช้ Aspose.Medical สําหรับ .NET ทําไม DICOM เก็บ metadata ในฐานข้อมูล DICOM ไฟล์มีข้อมูลโลหะที่กว้างขวาง แต่การค้นหาผ่านหลายพันไฟล์นั้นช้า การจัดเก็บฐานข้อมูลให้: คําถามที่รวดเร็ว: ค้นหาการศึกษาตามผู้ป่วยวันที่รูปแบบหรือคุณสมบัติใด ๆ ได้ทันที วิเคราะห์: ข้อมูลรวมสําหรับการรายงานและสถิติ การบูรณาการ: การเชื่อมต่อข้อมูลภาพกับระบบ EMR/EHR Scalability: การจัดการการศึกษาหลายล้านด้วยการดัชนีที่เหมาะสม การค้นหาข้อความเต็ม: ค้นหาการศึกษาโดยคําอธิบาย DICOM Metadata Extraction Foundation ก่อนอื่นสร้างเครื่องสกัด metadata ที่แปลง 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 การจัดเก็บข้อมูล DICOM ใน SQL Server ด้วย Entity Framework Core: ...

กุมภาพันธ์ 28, 2025 · 12 นาที
 Thai