Hướng dẫn how to extract metadata from dicom image python - cách trích xuất siêu dữ liệu từ python hình ảnh dicom

Khi trình xem hình ảnh của tôi sẽ tải một bộ dữ liệu CT cụ thể, tôi đã bị ảnh hưởng bởi các lỗi nói với tôi rằng tôi đã thiếu thông tin hình học, nhìn vào siêu dữ liệu liên quan đến hình ảnh DICOM hoàn toàn áp đảo tôi. Đối với những người không quen thuộc, số lượng các trường siêu dữ liệu theo ủy ban tiêu chuẩn DICOM chính thức có khoảng 3700, không bao giờ các trường tùy chỉnh mà bất kỳ ai khác có thể thêm vào! Như một giảng viên tôi nhớ lại đã nói:

Hình ảnh của Dic Dicom có ​​tên bệnh nhân, ngày quét, độ phân giải hình ảnh, tên bác sĩ và những gì bác sĩ có cho bữa sáng.

Tuy nhiên, một số trong số này thực sự được yêu cầu/yêu cầu có điều kiện để đủ điều kiện là tệp DICOM và tải thành công vào trình xem DICOM.

Trên hết, trong thế kỷ 21, chúng ta rất có thể sử dụng các kỹ thuật chụp cắt lớp cung cấp cho chúng ta dữ liệu 3 chiều trở lên, vì các tệp DICOM chỉ đại diện Trong số các trường siêu dữ liệu này phải tương quan với nhau!

PYDICOM

Pydicom là gói bạn muốn cho tất cả các chỉnh sửa trường siêu dữ liệu DICOM của bạn (có thể nhiều hơn nhưng tôi đã không cần nó cho bất cứ điều gì khác). Vì vậy, hãy tiếp tục và bắt đầu với một bản cài đặt PIP nhanh:

$ pip install pydicom

Giống như bất kỳ gói Python nào khác, chúng tôi cần nhập nó để sử dụng nó:

>>> import pydicom

Tải dữ liệu DICOM (DS):

>>> ds = pydicom.filereader.dcmread(filepath)

In tất cả siêu dữ liệu: (ví dụ)

>>> print(ds)
(0008, 0008) Image Type CS: ['DERIVED', 'SECONDARY']
(0008, 0015) Instance Coercion DateTime DT: ''
(0008, 0016) SOP Class UID UI: Secondary Capture Image Storage
(0008, 0020) Study Date DA: '20190405'
(0008, 0030) Study Time TM: '150613'
(0008, 0050) Accession Number SH: ''
(0008, 0060) Modality CS: ''
(0008, 0070) Manufacturer LO: ''
(0008, 0090) Referring Physician's Name PN: "Referring Physician's Name"
(0008, 1030) Study Description LO: ''
(0008, 103e) Series Description LO: 'CT'
(0010, 0010) Patient's Name PN: 'Name'
(0010, 0020) Patient ID LO: 'ID'
(0010, 0030) Patient's Birth Date DA: ''
(0010, 0040) Patient's Sex CS: ''
(0018, 0050) Slice Thickness DS: "1.000000"
(0018, 0088) Spacing Between Slices DS: "1.000000"
(0018, 1030) Protocol Name LO: ''
(0020, 0010) Study ID SH: ''
(0020, 0011) Series Number IS: ''
(0020, 0032) Image Position (Patient) DS: ['0.000000', '0.000000', '0.000000']
...

Xem các trường riêng lẻ và các trường cài đặt thành các giá trị mới:

# Viewing Field
>>> print(ds.PatientName)
'Name'
# Setting field to new value
>>> ds.PatientName = 'NewName'
>>> print(ds.PatientName)
'NewName'

Thẻ DICOM

Có thể lưu ý rằng mọi trường đều có mã riêng lẻ (0000, 0000), được gọi là thẻ. Bốn số đầu tiên biểu thị nhóm trường (ví dụ: 0010 = bệnh nhân) và bốn thứ 2 biểu thị ‘phần tử. Các số riêng lẻ của 4 thẻ được đánh số là thập lục phân, vì vậy thay vì nhận các giá trị từ 0 Nott9 đến trung bình 0 ,9, chúng có thể mở rộng ra để đảm nhận các giá trị lên đến 15 bằng cách bao gồm 6 chữ cái đầu tiên của bảng chữ cái. Bạn có thể tra cứu các thẻ tiêu chuẩn này.

Chúng ta có thể sử dụng các thẻ này thay vì tên để thay đổi các trường trong đó 0x trong Python biểu thị việc chuyển đổi giá trị thành thập lục phân.

# Viewing Tag
>>> print(ds[0x10,0x10])
'Name'
# Setting tag to new value
>>> ds[0x10,0x10].value = 'NewName'
>>> print(ds[0x100010])
'NewName'

Lưu ý các cách khác nhau mà tham chiếu thập lục phân có thể được thực hiện.

Đôi khi bạn có thể muốn thêm một thẻ, chúng tôi có thể tự thêm các trường mới bằng cách sử dụng hàm được chỉ định dataset.add_new(tag, VR, value). Tại thời điểm này, chúng ta cần hiểu thêm một chút về các yếu tố DICOM của chúng ta, cụ thể là ‘VR, viết tắt của biểu diễn giá trị, cho độ phân giải không gian, những điều này mang lại phao và do đó có VR của DS (chuỗi thập phân). Luôn luôn chắc chắn để tìm kiếm thẻ của bạn!look up your tags!

>>> ds.add_new('0x181050', 'DS', ['1.000000', '1.000000', '1.000000'])
>>> ds[0x181050]
(0018, 1050) Spatial Resolution DS: ['1.000000', '1.000000', '1.000000']

Ví dụ trường hợp: Thiếu vị trí lát cắt

Vì vậy, trong trường hợp của tôi, tôi đã có các vấn đề về hình học trong đó tệp DICOM đầu tiên của chuỗi hình ảnh 3D của tôi bị thiếu thẻ vị trí lát cắt lát (0020,) mà mọi trường khác đã có và dẫn đến khối lượng của tôi được tải sai. Trên hết, nó dường như cũng thiếu một thẻ định hướng hình ảnh (bệnh nhân) (0020, 0037) không thay đổi cho mỗi hình ảnh và vẫn ổn khi duy trì giá trị [1, 0, 0, 0, 1 , 0]. Vì vậy, tóm tắt:

  1. Vị trí lát cần phải được thêm vào hình ảnh DICOM đầu tiên.
  2. Định hướng hình ảnh (bệnh nhân) cho mỗi hình ảnh DICOM trong chuỗi với giá trị cố định.

Rất cám ơn những người sáng tạo và người đóng góp của Pydicom! Đây không phải là cách thay thế tài liệu Pydicom có ​​thể được tìm thấy tại https://pydicom.github.io/pydicom/stable/pydicom_user_guide.html

Làm thế nào để tôi có được siêu dữ liệu dicom?

Để đọc siêu dữ liệu từ tệp DICOM, hãy sử dụng hàm dicominfo. Dicominfo trả về thông tin trong cấu trúc MATLAB® trong đó mọi trường chứa một phần siêu dữ liệu DICOM cụ thể.use the dicominfo function. dicominfo returns the information in a MATLAB® structure where every field contains a specific piece of DICOM metadata.

Làm cách nào để đọc một tiêu đề DICOM trong Python?

Dir sẽ trả về bất kỳ tên thẻ DICOM nào trong tập dữ liệu có chuỗi được chỉ định ở bất cứ đâu trong tên (trường hợp không nhạy cảm).Lưu ý: Gọi Dir không có chuỗi sẽ liệt kê tất cả các tên thẻ có sẵn trong tập dữ liệu.Bạn cũng có thể thấy tất cả các tên mà Pydicom biết về bằng cách xem tệp _dicom_dict.py. (case insensitive). NOTE: Calling dir with no string will list all tag names available in the dataset. You can also see all the names that pydicom knows about by viewing the _dicom_dict.py file.

Làm cách nào để đọc một tệp DICOM trong Python?

Có một số tùy chọn:..
Sử dụng bất kỳ chương trình người xem DICOM nào có sẵn ..
Sử dụng pydicom với matplotlib ..
Sử dụng pydicom với mô -đun stdlib tkinter của Python ..
Sử dụng PYDICOM với Thư viện hình ảnh Python (PIL).
Sử dụng pydicom với wxpython ..

Làm cách nào để chỉnh sửa siêu dữ liệu dicom?

Để chỉnh sửa thông tin thẻ DICOM..
Mở hình ảnh DICOM ..
Nhấp vào hình ảnh> Thuộc tính> Chế độ xem tiêu đề.Hộp thoại Thông tin mở ra (Hình 21) ..
Trong hộp thoại, tô sáng thẻ mà bạn muốn chỉnh sửa, sau đó nhấn nút Chỉnh sửa thẻ.....
Nhấp vào Chỉnh sửa thẻ.....
Nhập giá trị mới vào hộp văn bản giá trị thẻ mới.....
Bấm OK ..