2008-09-23 63 views
17

Cách đơn giản và đa sắc nhất để phân tích cú pháp tệp DICOM là gì?Phân tích các tệp DICOM trong Python gốc

Việc triển khai Python gốc mà không cần sử dụng thư viện không phải Python sẽ được ưu tiên hơn nhiều. DICOM là định dạng tệp chuẩn trong hình ảnh y tế kỹ thuật số (xem here để biết thêm thông tin).

Có một số thư viện C/C++ hỗ trợ đọc (tập con) của tệp DICOM. Hai hoặc ba trong số họ thậm chí có ràng buộc Python. Trình phân tích cú pháp Python gốc sẽ phục vụ hai mục đích cho tôi:

  1. Không cần xây dựng bất kỳ thư viện C/C++ bên ngoài nào.
  2. Tìm hiểu về định dạng tệp DICOM.

Trả lời

18

Và đến ngày hôm nay có một file Python gói đọc DICOM tinh khiết có sẵn: pydicom

0

Tôi tự hỏi áp phích ban đầu đã thử và phương thức nào hiệu quả và không hiệu quả đối với anh ấy. Tôi đã không bao giờ làm việc với DICOM, nhưng một tìm kiếm google nhanh chóng cho "python DICOM" đã đưa ra một số kết quả thú vị. Dường như dự án này: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ sẽ cung cấp những gì bạn muốn. Nó có các ràng buộc python và một danh sách gửi thư khá tích cực.

+0

Đây có phải là một "Xin hãy làm bài tập về nhà của tôi đối với tôi" câu hỏi? –

+0

Không, IMHO Tôi đã làm bài tập về nhà của mình: Có một số thư viện C/C++ hỗ trợ đọc (tập hợp con) các tệp DICOM. Hai hoặc ba trong số họ thậm chí có ràng buộc Python. Trình phân tích cú pháp Python gốc sẽ phục vụ hai mục đích cho tôi: 1. Không cần xây dựng bất kỳ thư viện C/C++ nào. 2. Tìm hiểu về định dạng tệp DICOM. –

1

Có một số thư viện (thường xuyên nhất thực hiện trong C/C++) với bindings Python, ví dụ:

Tuy nhiên, tôi đang tìm một Python bản địa thực hiện để tìm hiểu thêm về định dạng tệp DICOM.

+0

cả hai liên kết xuất hiện thối –

+0

@MonicaHeddneck Cảm ơn bạn đã đứng đầu; Tôi vừa cập nhật cả hai liên kết. –

3

Một vài năm trước, tôi đang tìm kiếm điều tương tự và thấy điều này: Python DICOM lib

tôi đã không quá ấn tượng với mã này, nhưng nó là Python có nguồn gốc file đọc DICOM.

9

Nếu bạn muốn tìm hiểu về các định dạng DICOM, "Digital Imaging và Truyền thông trong y học (DICOM): Một thực tế Giới thiệu và Survival Guide "bởi Oleg Pianykh là khá dễ đọc và đưa ra một giới thiệu tốt về các khái niệm chính của DICOM. Springer-Verlag là nhà xuất bản của cuốn sách này. Tất nhiên, tiêu chuẩn DICOM đầy đủ là tài liệu tham khảo cuối cùng mặc dù nó có phần đáng sợ hơn. Nó có sẵn từ NEMA (http://medical.nema.org).

Định dạng tệp thực sự kém bí truyền hơn bạn có thể tưởng tượng và bao gồm phần mở đầu theo sau là chuỗi các phần tử dữ liệu. Phần mở đầu chứa văn bản ASCII "DICM" và một số byte được đặt trước không được sử dụng. Theo sau lời mở đầu là một chuỗi các phần tử dữ liệu. Mỗi phần tử dữ liệu bao gồm kích thước của phần tử, mã ASCII gồm hai ký tự cho biết biểu diễn giá trị, thẻ DICOM và giá trị. Các phần tử dữ liệu trong tệp được sắp xếp theo số thẻ DICOM của chúng. Bản thân hình ảnh chỉ là một phần tử dữ liệu khác có kích thước, đại diện giá trị, v.v.

Biểu diễn giá trị chỉ định chính xác cách diễn giải giá trị. Nó là một con số? Nó là một chuỗi ký tự? Nếu đó là một chuỗi ký tự, nó có phải là ký tự ngắn hay ký tự dài và ký tự nào được phép? Mã biểu diễn giá trị cho bạn biết điều này.

Thẻ DICOM là mã thập lục phân 4 byte bao gồm số "nhóm" 2 byte và số phần tử "2 byte". Số nhóm là số nhận dạng cho bạn biết thực thể thông tin mà thẻ áp dụng cho (ví dụ: nhóm 0010 đề cập đến bệnh nhân và nhóm 0020 đề cập đến nghiên cứu). Số phần tử xác định cách diễn giải giá trị (các mục như số ID của bệnh nhân, mô tả chuỗi, v.v.). Để tìm hiểu cách bạn nên diễn giải giá trị, mã của bạn tra cứu thẻ DICOM trong tệp từ điển.

Có một số chi tiết khác có liên quan, nhưng đó là bản chất của nó. Có lẽ điều hướng dẫn nhất mà bạn có thể làm để tìm hiểu về định dạng tệp là lấy một tệp DICOM ví dụ, xem xét nó với một trình soạn thảo hex và trải qua quá trình phân tích nó về mặt tinh thần. Tôi khuyên bạn nên cố gắng tìm hiểu về DICOM bằng cách xem xét các triển khai mã nguồn mở hiện có, ít nhất là ban đầu. Nó có nhiều khả năng gây nhầm lẫn thay vì soi sáng. Nhận được bức tranh lớn là quan trọng hơn. Một khi bạn có bức tranh lớn, thì bạn có thể rơi vào sự tinh tế.

4

phát triển gdcm Mới hơn hiện nay xảy ra ở đây:

http://gdcm.sourceforge.net/

Nó hỗ trợ Java và C# trên python.

Tại sao viết chưa khác thực hiện DICOM khi bạn có thể tập trung một C đơn ++ thực hiện và có thể tiếp cận với rất nhiều ngôn ngữ khác nhau

7

Thư viện pydicom đề cập ở trên có vẻ như một thư viện tuyệt vời cho việc tiếp cận các cấu trúc dữ liệu DICOM. Để sử dụng nó để truy cập ví dụ: dữ liệu RT liều, tôi đoán người ta sẽ làm điều gì đó như

import dicom,numpy 
dose = dicom.ReadFile("RTDOSE.dcm") 
d = numpy.fromstring(dose.PixelData,dtype=numpy.int16) 
d = d.reshape((dose.NumberofFrames,dose.Columns,dose.Rows)) 

và sau đó, nếu bạn đang ở mayavi,

from enthought.mayavi import mlab 
mlab.pipeline.scalar_field(d) 

Điều này cho phép tọa độ sai và liều rộng, nhưng nguyên tắc nên được âm thanh .

Dữ liệu CT phải rất giống nhau.

17

Tôi đang sử dụng pydicom nhiều vào những ngày này và đá sẽ đá.

Đó là khá dễ dàng để bắt đầu chơi với nó:

import dicom 
data = dicom.read_file("yourdicomfile.dcm") 

Để có được những thứ thú vị ra khỏi đó "dữ liệu" đối tượng, bằng cách nào đó giống như dcmdump đầu ra:

for key in data.dir():   
    value = getattr(data, key, '') 
    if type(value) is dicom.UID.UID or key == "PixelData": 
     continue 

    print "%s: %s" % (key, value) 

Tôi nghĩ một cách tuyệt vời để tìm hiểu thêm về định dạng dicom là mở các tệp tương tự và viết mã để so sánh chúng theo các khía cạnh khác nhau: mô tả nghiên cứu, chiều rộng cửa sổ và trung tâm, đại diện pixel và vân vân.

Hãy vui vẻ! :)

+2

Tôi đã tìm thấy rất nhiều tài liệu hướng dẫn 'nhập pydicom'. Đối với tôi, với phiên bản 0.9.9 ở trên ('import dicom') là tên mô-đun chính xác, mặc dù đã cài đặt nó với' python -m pip install pydicom'. –

2

DICOM là một nỗi đau thực sự ... ngay cả khi nhà sản xuất tuân thủ các tiêu chuẩn. Nếu bạn viết thư viện DICOM của riêng bạn, bạn sẽ thấy các nhà sản xuất DICOM khác nhau có hiệu quả không tương thích với các nhà cung cấp khác [cần dẫn nguồn].

Tôi đã cố gắng (trong thời gian rảnh rỗi) viết một trình phân tích cú pháp C dicom vay mượn rất nhiều từ một trình phân tích cú pháp Ruby đẹp đẽ, tôi đã thấy một cách khéo léo gọi là 'ruby-dicom'.Nó thực sự là mã rất dễ đọc (tôi đã xem xét một trong các phiên bản nhỏ hơn trước đó).

Đau đầu lớn nhất là cố gắng tích lũy một thư viện các thẻ tiêu đề với các kiểu dữ liệu dự kiến. Có các thẻ được xác định tiêu chuẩn và các thẻ của nhà cung cấp. Các tập tin ruby-dicom chứa một thư viện các thẻ trong một định dạng văn bản có thể dễ dàng kiểm tra.

Tôi đã từ bỏ tài liệu chính thức vì tôi chỉ quan tâm đến định dạng tệp mà dường như chỉ nằm trong một trong 10 tệp PDF khổng lồ.

Các tệp DICOM cục bộ của tôi không được nén và tuân theo các cách sắp xếp bit chuẩn dễ dàng, nhưng được chuẩn bị cho các lần nén khác nhau và hình ảnh 12 bit lạ được lưu trữ trong các thùng chứa 8 bit với độ dài lớn hoặc nhỏ và không có bit đệm.

Tôi đã từ bỏ một khi thời gian trở nên rất khan hiếm.

Python có lẽ là một sự lựa chọn tốt hơn nhiều so với C cho phong cách này của tiêu đề phân tích cú pháp mặc dù ...

Các vấn đề liên quan