Đọc tệp DICOM trong C# | Trình xem tệp DCM trong C#

Trong bài viết trước, chúng tôi đã chỉ cho bạn cách tạo và lưu một tệp DICOM trong C# sử dụng Aspose.Medical for .NET. Bước tiếp theo là đọc tệp DICOM đã lưu theo cách lập trình trong C#. Trong bài viết blog này, bạn sẽ học cách tải, mở và đọc các tệp DICOM sử dụng C#. Bạn có thể sử dụng hướng dẫn này như một điểm khởi đầu để tạo ứng dụng trình xem tệp DCM của riêng bạn.

Bài viết này đề cập đến các chủ đề sau:

Aspose.Medical—Trình xem tệp DCM

Để tải, đọc và xem các tệp DICOM, chúng tôi sẽ sử dụng Aspose.Medical for .NET.Nó cung cấp một API thân thiện với nhà phát triển để đọc, phân tích và trích xuất dữ liệu DICOM một cách dễ dàng. Đối tượng Dataset bên trong lớp DicomFile của API giúp dễ dàng làm việc với siêu dữ liệu y tế.

Trước khi chúng ta bắt đầu, hãy đảm bảo những điều sau:

  • Tải xuống SDK từ releases hoặc cài đặt gói thông qua NuGet Package Manager bằng cách sử dụng lệnh sau:
Install-Package Aspose.Medical
  • Bạn đã có một tệp DICOM được lưu (ví dụ: sample.dcm) từ hướng dẫn trước.

Cách Đọc Tệp DICOM: Hướng Dẫn Từng Bước

Tải tệp DICOM lên

Bạn có thể tải tệp .dcm vào đối tượng DicomFile và truy cập tập dữ liệu của nó, như được minh họa bên dưới:

// Load an existing DICOM file
DicomFile dicomFile = new DicomFile("sample.dcm");
Aspose.Medical.Dicom.Dataset dataset = dicomFile.Dataset;

Đọc giá trị từ tệp DICOM

Khi tệp được tải lên, bạn có thể truy cập vào siêu dữ liệu chính bằng cách sử dụng các thẻ DICOM:

string patientName = dataset.GetSingleValue<string>(Tag.PatientName);
Console.WriteLine($"Patient Name: {patientName}");

Bạn có thể đọc hàng trăm thẻ DICOM theo cách này tùy thuộc vào thông tin bạn cần.

Truy cập dữ liệu Pixel

Nếu bạn muốn lấy dữ liệu hình ảnh từ tệp DICOM, hãy sử dụng:

byte[] pixelData = dataset.GetValues<byte>(Tag.PixelData).ToArray(); // Use ToArray() for display
Console.WriteLine($"Pixel Data Length: {pixelData.Length} bytes");

Bạn có thể sử dụng mảng byte này để hiển thị hình ảnh hoặc đưa vào các thuật toán xử lý tiếp theo.

Lấy Giá Trị Mặc Định nếu Một Thẻ Thiếu

Khi thẻ là tùy chọn, bạn có thể muốn cung cấp giá trị dự phòng. Sử dụng GetSingleValueOrDefault để truy xuất dữ liệu hoặc trả về một giá trị mặc định nếu thẻ không có.

string institutionName = dataset.GetSingleValueOrDefault<string>(Tag.InstitutionName, "Unknown");

Console.WriteLine("Institution Name: " + institutionName);

Điều này rất phù hợp cho các kịch bản mà sự xuất hiện của thẻ là không thể đoán trước.

Truy xuất một giá trị cụ thể từ một thẻ đa giá trị

Nếu một thẻ chứa nhiều giá trị, nhưng bạn chỉ cần một giá trị, hãy sử dụng GetValue với một biểu thức chỉ mục hoặc phạm vi.

double imagePositionX = dataset.GetValue<double>(Tag.ImagePositionPatient, ^1);

Console.WriteLine("First Image Position X: " + imagePositionX);

Lưu ý: Phương pháp này sẽ ném ra một ngoại lệ nếu thẻ bị thiếu.

DCM File Viewer: Mã hoàn chỉnh

Đây là một mã hoàn chỉnh cho thấy cách tải một tệp DICOM và đọc thông tin của các thẻ có sẵn:

// Tải tệp DICOM đã lưu
Aspose.Medical.Dicom.DicomFile dicomFile = DicomFile.Open("sample.dcm");
Aspose.Medical.Dicom.Dataset dataset = dicomFile.Dataset;

// Đọc thông tin liên quan đến bệnh nhân
string patientID = dataset.GetSingleValue<string>(Tag.PatientID);
string patientName = dataset.GetSingleValue<string>(Tag.PatientName);
string birthDateStr = dataset.GetSingleValue<string>(Tag.PatientBirthDate);
DateTime birthDate = DateTime.ParseExact(birthDateStr, "yyyyMMdd", null);

// Đọc thông tin nghiên cứu
string studyDateStr = dataset.GetSingleValue<string>(Tag.StudyDate);
DateTime studyDate = DateTime.ParseExact(studyDateStr, "yyyyMMdd", null);
string studyID = dataset.GetSingleValue<string>(Tag.StudyID);

// Đọc siêu dữ liệu hình ảnh
int rows = dataset.GetSingleValue<int>(Tag.Rows);
int columns = dataset.GetSingleValue<int>(Tag.Columns);
int bitsAllocated = dataset.GetSingleValue<int>(Tag.BitsAllocated);
string modality = dataset.GetSingleValue<string>(Tag.Modality);
byte[] pixelData = dataset.GetValues<byte>(Tag.PixelData).ToArray(); // Use ToArray() for display

// Hiển thị thông tin
Console.WriteLine($"Patient ID: {patientID}");
Console.WriteLine($"Patient Name: {patientName}");
Console.WriteLine($"Birth Date: {birthDate:yyyy-MM-dd}");
Console.WriteLine($"Study Date: {studyDate:yyyy-MM-dd}");
Console.WriteLine($"Study ID: {studyID}");
Console.WriteLine($"Image Rows: {rows}");
Console.WriteLine($"Image Columns: {columns}");
Console.WriteLine($"Bits Allocated: {bitsAllocated}");
Console.WriteLine($"Modality: {modality}");
Console.WriteLine($"Pixel Data Length: {pixelData.Length} bytes");

Output

Patient ID: JD123456
Patient Name: John Doe
Birth Date: 1985-07-20
Study Date: 2025-07-07
Study ID: Study001
Image Rows: 256
Image Columns: 256
Bits Allocated: 8
Modality: OT
Pixel Data Length: 65536 bytes

Thử nó ngay tại đây

Bạn có thể sử dụng bất kỳ tệp .dcm nào, bất kể được tạo ra bằng Aspose hay nhận được từ thiết bị chụp ảnh. Chỉ cần tải tệp và đọc các thẻ, và bạn đã sẵn sàng.

Nhận Giấy phép Miễn Phí

Bạn có thể get a free temporary license để khám phá đầy đủ chức năng của Aspose.Medical for .NET mà không có bất kỳ hạn chế nào. Nó nhanh chóng, dễ dàng và chỉ mất một phút.

Trình xem tệp DICOM: Tài nguyên miễn phí

Bạn có thể cải thiện trải nghiệm phát triển của mình với những tài nguyên quý giá này:

Kết luận

Trong bài viết này, chúng ta đã thấy cách đọc và trích xuất dữ liệu từ một tệp DICOM trong C#. Là một nhà phát triển, bạn có thể sử dụng Aspose.Medical for .NET để làm việc với các tệp DICOM (.dcm) và xây dựng ứng dụng trình xem tệp DCM của riêng bạn.

Nếu bạn có câu hỏi hoặc gặp vấn đề trong quá trình làm việc với các tệp DICOM, đừng ngần ngại hỏi trên diễn đàn Aspose.Đội ngũ hỗ trợ luôn sẵn sàng giúp đỡ.

Xem Thêm