Hướng dẫn read dicom header python - đọc tiêu đề dicom python

Bộ dữ liệu

Bộ dữ liệu là đối tượng chính bạn sẽ làm việc trực tiếp. Bộ dữ liệu có nguồn gốc từ Python, Dict, vì vậy nó kế thừa (và ghi đè một số) các phương thức của Dict. Nói cách khác, nó là một tập hợp các cặp khóa: giá trị, trong đó giá trị khóa là thẻ DICOM (nhóm, phần tử) (dưới dạng đối tượng thẻ, được mô tả bên dưới) và giá trị là một thể hiện dữ liệu (cũng được mô tả bên dưới).dict, so it inherits (and overrides some of) the methods of dict. In other words it is a collection of key:value pairs, where the key value is the DICOM (group,element) tag (as a Tag object, described below), and the value is a DataElement instance (also described below).

Một bộ dữ liệu có thể được tạo trực tiếp, nhưng bạn thường sẽ nhận được một bản bằng cách đọc tệp DICOM hiện có (nó có thể là tệp .dcm hoặc .img):

import dicom
ds = dicom.read_file("1111.img")

Bạn có thể hiển thị toàn bộ bộ dữ liệu bằng cách chỉ đơn giản là in giá trị chuỗi (str hoặc repr) của nó:

ds
(0008, 0000) Group Length             UL: 482
(0008, 0005) Specific Character Set   CS: 'ISO_IR 100'
(0008, 0008) Image Type               CS: ['ORIGINAL', 'PRIMARY']
(0008, 0012) Instance Creation Date   DA: '20150710'
(0008, 0013) Instance Creation Time   TM: '152456'
(0008, 0014) Instance Creator UID     UI: 1.2.840.113619.1.131
(0008, 0016) SOP Class UID            UI: Positron Emission Tomography Image Storage
(0008, 0018) SOP Instance UID         UI: 1.2.840.113619.2.131.1611270158.1436534696
(0008, 0020) Study Date               DA: '20150702'
(0008, 0021) Series Date              DA: '20150702'
(0008, 0022) Acquisition Date         DA: '20150702'
(0008, 0023) Content Date             DA: '20150710'
(0008, 0030) Study Time               TM: '090706'
(0008, 0031) Series Time              TM: '091216'
(0008, 0032) Acquisition Time         TM: '094216'
(0008, 0033) Content Time             TM: '152456'
(0008, 0050) Accession Number         SH: '120.116962'
(0008, 0060) Modality                 CS: 'PT'
(0008, 0070) Manufacturer             LO: 'GE MEDICAL SYSTEMS'
(0008, 0080) Institution Name         LO: 'FTGM'
(0008, 0090) Referring Physician Name PN: ''
(0008, 1010) Station Name             SH: 'pet94ct'
(0008, 1030) Study Description        LO: ''
(0008, 103e) Series Description       LO: 'e+1 NEUROTOTEM'
    ...

Bạn có thể truy cập các thành phần dữ liệu cụ thể theo tên (DICOM ‘Từ khóa) hoặc bằng số thẻ DICOM:

ds.ManufacturerModelName
'Discovery RX'
ds[0x0008,0x1090].value
'Discovery RX'

Trong trường hợp sau (sử dụng trực tiếp số thẻ), một thể hiện dữ liệu được trả về, do đó, giá trị phải được sử dụng để nhận giá trị.

Bạn cũng có thể đặt các giá trị theo tên (từ khóa DICOM) hoặc số thẻ:

ds.PatientID = "12345"
ds.SeriesNumber = 5
ds[0x10,0x10].value = 'Test'

Việc sử dụng tên là có thể vì PYDICOM chặn các yêu cầu cho các biến thành viên và kiểm tra xem chúng có ở trong Từ điển DICOM không. Nó dịch từ khóa thành số (nhóm, phần tử) và trả về giá trị tương ứng cho khóa đó nếu nó tồn tại.

Nếu bạn không nhớ hoặc biết tên thẻ chính xác, DataSet cung cấp phương thức Dir () tiện dụng, hữu ích trong các phiên tương tác tại dấu nhắc Python:

ds.dir("pat")
['AdditionalPatientHistory',
 'ImageOrientationPatient',
 'ImagePositionPatient',
 'PatientAge',
 'PatientBirthDate',
 'PatientGantryRelationshipCodeSequence',
 'PatientID',
 'PatientName',
 'PatientOrientationCodeSequence',
 'PatientOrientationModifierCodeSequence',
 'PatientPosition',
 'PatientSex',
 'PatientSize',
 'PatientWeight']

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. Bạn có thể> sửa đổi tệp đó để thêm các thẻ mà Pydicom không biết về. 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. You could >modify that file to add tags that pydicom doesn’t already know about.

Dưới mui xe, dữ liệu lưu trữ một đối tượng DataEuity cho mỗi mục, nhưng khi được truy cập bằng tên (ví dụ: ds.patientName) Chỉ có giá trị của dữ liệu đó được trả về. Nếu bạn cần toàn bộ DataEuity (xem Thảo luận lớp DataEuity), bạn có thể sử dụng phương thức Dataset Data Data_element () hoặc truy cập mục bằng số thẻ:

ds
0
ds
1

DataElement

Lớp DataEuity thường không được sử dụng trực tiếp trong mã người dùng, nhưng được sử dụng rộng rãi bởi bộ dữ liệu. DataEuity là một đối tượng đơn giản lưu trữ những điều sau:

  • TAG - TAG DICOM (dưới dạng đối tượng thẻ) – a DICOM tag (as a Tag object)
  • VR - Đại diện giá trị DICOM - Các định dạng số và số khác nhau, v.v. – DICOM value representation – various number and string formats, etc
  • VM - Đa bội giá trị. Đây là 1 đối với hầu hết các thẻ DICOM, nhưng có thể là nhiều, ví dụ: cho tọa độ. Bạn không phải chỉ định điều này, lớp DataEuity theo dõi nó dựa trên giá trị. – value multiplicity. This is 1 for most DICOM tags, but can be multiple, e.g. for coordinates. You do not have to specify this, the DataElement class keeps track of it based on value.
  • Giá trị - giá trị thực tế. Một giá trị thông thường như một số hoặc chuỗi (hoặc danh sách của chúng) hoặc một chuỗi. – the actual value. A regular value like a number or string (or list of them), or a Sequence.

Để kiểm tra sự tồn tại của một thẻ cụ thể trước khi sử dụng nó, hãy sử dụng từ khóa:

ds
2
ds
3

Để xóa phần tử dữ liệu khỏi bộ dữ liệu, hãy sử dụng DEL:

ds
4
ds
5

NHÃN

Sử dụng từ khóa DICOM là cách được đề xuất để truy cập các yếu tố dữ liệu, nhưng bạn cũng có thể sử dụng trực tiếp các số thẻ. Lớp thẻ có nguồn gốc từ Python từ Int, vì vậy thực tế, nó chỉ là một con số có một số hành vi bổ sung:

  • TAG thực thi rằng thẻ DICOM phù hợp với 4 byte dự kiến ​​(nhóm, phần tử)
  • Một thể hiện thẻ có thể được tạo từ int hoặc từ một tuple chứa (nhóm, phần tử) riêng biệt
  • Tag có nhóm thuộc tính và phần tử (hoặc ELEM) để trả về các phần nhóm và phần tử
  • Thuộc tính IS_Private kiểm tra xem thẻ có đại diện cho thẻ riêng không (nghĩa là nếu số nhóm là lẻ).
ds
6
ds
7

Truy cập dữ liệu hình ảnh

Trình tự DICOM được biến thành danh sách Python hoặc chuỗi. Các mục trong chuỗi được tham chiếu theo số, bắt đầu tại INDEX 0 theo quy ước Python. Kiểu dữ liệu của chuỗi trình tự có nguồn gốc từ danh sách Python. Chức năng được thêm vào duy nhất là làm cho các biểu diễn chuỗi đẹp hơn. Mặt khác, tất cả các phương thức thông thường của danh sách như lựa chọn mục, nối, vv đều có sẵn. Để làm việc với dữ liệu pixel, các byte thô có sẵn thông qua thẻ thông thường:make string representations prettier. Otherwise all the usual methods of list like item selection, append, etc. are available. To work with pixel data, the raw bytes are available through the usual tag:

ds
8
ds
9

Sau đó, chúng tôi tính toán tổng kích thước của mảng numpy bằng (số lượng hàng pixel trong một lát) x (số cột pixel trong một lát) x (số lát) dọc theo các trục x, y và z cartesian. Trong ví dụ này, chúng tôi đang xử lý chỉ một tệp DICOM lát, do đó z = 1.

Cuối cùng, chúng tôi sử dụng các thuộc tính pixelSpaces và drocethickness để tính khoảng cách giữa các pixel trong ba trục. Chúng tôi lưu trữ các kích thước mảng trong ConstpixelDim và khoảng cách trong cấu thành.

(0008, 0000) Group Length             UL: 482
(0008, 0005) Specific Character Set   CS: 'ISO_IR 100'
(0008, 0008) Image Type               CS: ['ORIGINAL', 'PRIMARY']
(0008, 0012) Instance Creation Date   DA: '20150710'
(0008, 0013) Instance Creation Time   TM: '152456'
(0008, 0014) Instance Creator UID     UI: 1.2.840.113619.1.131
(0008, 0016) SOP Class UID            UI: Positron Emission Tomography Image Storage
(0008, 0018) SOP Instance UID         UI: 1.2.840.113619.2.131.1611270158.1436534696
(0008, 0020) Study Date               DA: '20150702'
(0008, 0021) Series Date              DA: '20150702'
(0008, 0022) Acquisition Date         DA: '20150702'
(0008, 0023) Content Date             DA: '20150710'
(0008, 0030) Study Time               TM: '090706'
(0008, 0031) Series Time              TM: '091216'
(0008, 0032) Acquisition Time         TM: '094216'
(0008, 0033) Content Time             TM: '152456'
(0008, 0050) Accession Number         SH: '120.116962'
(0008, 0060) Modality                 CS: 'PT'
(0008, 0070) Manufacturer             LO: 'GE MEDICAL SYSTEMS'
(0008, 0080) Institution Name         LO: 'FTGM'
(0008, 0090) Referring Physician Name PN: ''
(0008, 1010) Station Name             SH: 'pet94ct'
(0008, 1030) Study Description        LO: ''
(0008, 103e) Series Description       LO: 'e+1 NEUROTOTEM'
    ...
0
(0008, 0000) Group Length             UL: 482
(0008, 0005) Specific Character Set   CS: 'ISO_IR 100'
(0008, 0008) Image Type               CS: ['ORIGINAL', 'PRIMARY']
(0008, 0012) Instance Creation Date   DA: '20150710'
(0008, 0013) Instance Creation Time   TM: '152456'
(0008, 0014) Instance Creator UID     UI: 1.2.840.113619.1.131
(0008, 0016) SOP Class UID            UI: Positron Emission Tomography Image Storage
(0008, 0018) SOP Instance UID         UI: 1.2.840.113619.2.131.1611270158.1436534696
(0008, 0020) Study Date               DA: '20150702'
(0008, 0021) Series Date              DA: '20150702'
(0008, 0022) Acquisition Date         DA: '20150702'
(0008, 0023) Content Date             DA: '20150710'
(0008, 0030) Study Time               TM: '090706'
(0008, 0031) Series Time              TM: '091216'
(0008, 0032) Acquisition Time         TM: '094216'
(0008, 0033) Content Time             TM: '152456'
(0008, 0050) Accession Number         SH: '120.116962'
(0008, 0060) Modality                 CS: 'PT'
(0008, 0070) Manufacturer             LO: 'GE MEDICAL SYSTEMS'
(0008, 0080) Institution Name         LO: 'FTGM'
(0008, 0090) Referring Physician Name PN: ''
(0008, 1010) Station Name             SH: 'pet94ct'
(0008, 1030) Study Description        LO: ''
(0008, 103e) Series Description       LO: 'e+1 NEUROTOTEM'
    ...
1

Ở đây, chúng tôi chỉ cần sử dụng Numpy.Arange, ConstpixelDim và ConstpixelSpaces để tính toán trục cho mảng này:

(0008, 0000) Group Length             UL: 482
(0008, 0005) Specific Character Set   CS: 'ISO_IR 100'
(0008, 0008) Image Type               CS: ['ORIGINAL', 'PRIMARY']
(0008, 0012) Instance Creation Date   DA: '20150710'
(0008, 0013) Instance Creation Time   TM: '152456'
(0008, 0014) Instance Creator UID     UI: 1.2.840.113619.1.131
(0008, 0016) SOP Class UID            UI: Positron Emission Tomography Image Storage
(0008, 0018) SOP Instance UID         UI: 1.2.840.113619.2.131.1611270158.1436534696
(0008, 0020) Study Date               DA: '20150702'
(0008, 0021) Series Date              DA: '20150702'
(0008, 0022) Acquisition Date         DA: '20150702'
(0008, 0023) Content Date             DA: '20150710'
(0008, 0030) Study Time               TM: '090706'
(0008, 0031) Series Time              TM: '091216'
(0008, 0032) Acquisition Time         TM: '094216'
(0008, 0033) Content Time             TM: '152456'
(0008, 0050) Accession Number         SH: '120.116962'
(0008, 0060) Modality                 CS: 'PT'
(0008, 0070) Manufacturer             LO: 'GE MEDICAL SYSTEMS'
(0008, 0080) Institution Name         LO: 'FTGM'
(0008, 0090) Referring Physician Name PN: ''
(0008, 1010) Station Name             SH: 'pet94ct'
(0008, 1030) Study Description        LO: ''
(0008, 103e) Series Description       LO: 'e+1 NEUROTOTEM'
    ...
2

Tiếp theo, đến phần Pydicom cuối cùng:

(0008, 0000) Group Length             UL: 482
(0008, 0005) Specific Character Set   CS: 'ISO_IR 100'
(0008, 0008) Image Type               CS: ['ORIGINAL', 'PRIMARY']
(0008, 0012) Instance Creation Date   DA: '20150710'
(0008, 0013) Instance Creation Time   TM: '152456'
(0008, 0014) Instance Creator UID     UI: 1.2.840.113619.1.131
(0008, 0016) SOP Class UID            UI: Positron Emission Tomography Image Storage
(0008, 0018) SOP Instance UID         UI: 1.2.840.113619.2.131.1611270158.1436534696
(0008, 0020) Study Date               DA: '20150702'
(0008, 0021) Series Date              DA: '20150702'
(0008, 0022) Acquisition Date         DA: '20150702'
(0008, 0023) Content Date             DA: '20150710'
(0008, 0030) Study Time               TM: '090706'
(0008, 0031) Series Time              TM: '091216'
(0008, 0032) Acquisition Time         TM: '094216'
(0008, 0033) Content Time             TM: '152456'
(0008, 0050) Accession Number         SH: '120.116962'
(0008, 0060) Modality                 CS: 'PT'
(0008, 0070) Manufacturer             LO: 'GE MEDICAL SYSTEMS'
(0008, 0080) Institution Name         LO: 'FTGM'
(0008, 0090) Referring Physician Name PN: ''
(0008, 1010) Station Name             SH: 'pet94ct'
(0008, 1030) Study Description        LO: ''
(0008, 103e) Series Description       LO: 'e+1 NEUROTOTEM'
    ...
3
(0008, 0000) Group Length             UL: 482
(0008, 0005) Specific Character Set   CS: 'ISO_IR 100'
(0008, 0008) Image Type               CS: ['ORIGINAL', 'PRIMARY']
(0008, 0012) Instance Creation Date   DA: '20150710'
(0008, 0013) Instance Creation Time   TM: '152456'
(0008, 0014) Instance Creator UID     UI: 1.2.840.113619.1.131
(0008, 0016) SOP Class UID            UI: Positron Emission Tomography Image Storage
(0008, 0018) SOP Instance UID         UI: 1.2.840.113619.2.131.1611270158.1436534696
(0008, 0020) Study Date               DA: '20150702'
(0008, 0021) Series Date              DA: '20150702'
(0008, 0022) Acquisition Date         DA: '20150702'
(0008, 0023) Content Date             DA: '20150710'
(0008, 0030) Study Time               TM: '090706'
(0008, 0031) Series Time              TM: '091216'
(0008, 0032) Acquisition Time         TM: '094216'
(0008, 0033) Content Time             TM: '152456'
(0008, 0050) Accession Number         SH: '120.116962'
(0008, 0060) Modality                 CS: 'PT'
(0008, 0070) Manufacturer             LO: 'GE MEDICAL SYSTEMS'
(0008, 0080) Institution Name         LO: 'FTGM'
(0008, 0090) Referring Physician Name PN: ''
(0008, 1010) Station Name             SH: 'pet94ct'
(0008, 1030) Study Description        LO: ''
(0008, 103e) Series Description       LO: 'e+1 NEUROTOTEM'
    ...
4

Hướng dẫn read dicom header python - đọc tiêu đề dicom python