2008-09-23 17 views
17

में पार्स डीआईसीओएम फाइलें डीआईसीओएम फ़ाइल को पार्स करने का सबसे सरल और सबसे पाइथोनिक तरीका क्या है?देशी पायथन

गैर-पायथन पुस्तकालयों के उपयोग के बिना एक मूल पायथन कार्यान्वयन बहुत पसंद किया जाएगा। डिजिटल चिकित्सा इमेजिंग में डीआईसीओएम मानक फ़ाइल प्रारूप है (अधिक जानकारी के लिए here देखें)।

कुछ सी/सी ++ पुस्तकालय हैं जो डीआईसीओएम फाइलों के पढ़ने (एक सबसेट) का समर्थन करते हैं। उनमें से दो या तीन में भी पाइथन बाइंडिंग है। एक देशी पायथन पार्सर मेरे लिए दो उद्देश्यों की सेवा करेगा:

  1. किसी बाहरी सी/सी ++ पुस्तकालयों को बनाने की आवश्यकता नहीं है।
  2. DICOM फ़ाइल प्रारूप के बारे में जानें।

उत्तर

18

और आज के रूप में वहाँ एक और शुद्ध अजगर पैकेज पढ़ने DICOM फ़ाइलों उपलब्ध: pydicom

0

मुझे आश्चर्य है कि मूल पोस्टर ने क्या प्रयास किया और किस तरीके से काम किया और उसके लिए काम नहीं किया। मैंने कभी डीआईसीओएम के साथ काम नहीं किया है, लेकिन "डिकॉम पायथन" के लिए एक त्वरित Google खोज ने कई रोचक परिणाम दिए हैं। ऐसा लगता है कि यह प्रोजेक्ट: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ आपको जो चाहिए वह देना चाहिए। इसमें पाइथन बाइंडिंग और एक सुंदर सक्रिय मेलिंग सूची है।

+0

इस एक सवाल "मेरे लिए अपना होमवर्क करने के लिए कृपया" है? –

+0

नहीं, आईएमएचओ मैंने अपना होमवर्क किया: कुछ सी/सी ++ पुस्तकालय हैं जो डीआईसीओएम फाइलों के पढ़ने (एक सबसेट) का समर्थन करते हैं। उनमें से दो या तीन में भी पाइथन बाइंडिंग है। एक मूल पायथन पार्सर मेरे लिए दो उद्देश्यों की सेवा करेगा: 1. किसी भी सी/सी ++ पुस्तकालयों को बनाने की आवश्यकता नहीं है। 2. DICOM फ़ाइल प्रारूप के बारे में जानें। –

1

, कुछ पुस्तकालयों पायथन बाइंडिंग के साथ (सबसे अधिक बार सी/सी में लागू ++) कर रहे हैं जैसे:

हालांकि, मैं एक देशी अजगर के लिए देख रहा हूँ डीआईसीओएम फ़ाइल प्रारूप के बारे में अधिक जानने के लिए कार्यान्वयन।

+0

दोनों लिंक सड़े हुए –

+0

@MonicaHeddneck सिर के लिए धन्यवाद दिखाई देते हैं; मैंने अभी दोनों लिंक अपडेट किए हैं। –

3

कुछ साल पहले मैं एक ही बात के लिए देख रहा था और यह पाया: Python DICOM lib

मैं कोड के साथ भी प्रभावित नहीं था, लेकिन यह देशी अजगर पढ़ने DICOM फ़ाइलों है।

9

आप DICOM प्रारूप, "डिजिटल इमेजिंग और चिकित्सा के क्षेत्र में संचार (DICOM) के बारे में जानने के लिए चाहते हैं: एक व्यावहारिक परिचय और जीवन रक्षा गाइड "ओलेग पियानख द्वारा काफी पठनीय है और प्रमुख डीआईसीओएम अवधारणाओं के लिए एक अच्छा परिचय देता है। स्प्रिंगर-वेरलाग इस पुस्तक के प्रकाशक हैं। पूर्ण डीआईसीओएम मानक, ज़ाहिर है, परम संदर्भ हालांकि यह कुछ और डरावना है। यह एनईएमए (http://medical.nema.org) से उपलब्ध है।

फ़ाइल प्रारूप वास्तव में कम गूढ़ है जो आप कल्पना कर सकते हैं और डेटा तत्वों के अनुक्रम के बाद एक प्रस्तावना शामिल है। प्रस्तावना में एएससीआईआईआई टेक्स्ट "डीआईसीएम" और कई आरक्षित बाइट्स शामिल हैं जो अप्रयुक्त हैं। प्रस्तावना के बाद डेटा तत्वों का अनुक्रम है। प्रत्येक डेटा तत्व में तत्व के आकार होते हैं, एक दो-वर्ण ASCII कोड मूल्य प्रतिनिधित्व, एक DICOM टैग, और मान इंगित करता है। फ़ाइल में डेटा तत्वों को उनके DICOM टैग नंबरों द्वारा आदेश दिया जाता है। छवि स्वयं आकार, मूल्य प्रतिनिधित्व आदि के साथ एक और डेटा तत्व है।

मान प्रस्तुतिकरण मूल्य को समझने के लिए बिल्कुल निर्दिष्ट करते हैं। क्या यह एक संख्या है? क्या यह एक चरित्र स्ट्रिंग है? यदि यह एक वर्ण स्ट्रिंग है, तो क्या यह एक छोटा या लंबा है और कौन से पात्रों की अनुमति है? मूल्य प्रतिनिधित्व कोड आपको यह बताता है।

एक डीआईसीओएम टैग एक 2 बाइट हेक्साडेसिमल कोड है जो 2 बाइट "समूह" संख्या और 2 बाइट "तत्व" संख्या से बना है। समूह संख्या एक पहचानकर्ता है जो आपको बताती है कि टैग किस सूचना इकाई पर लागू होती है (उदाहरण के लिए, समूह 0010 रोगी और समूह 0020 को संदर्भित करता है)। तत्व संख्या मूल्य की व्याख्या (रोगी के आईडी नंबर, श्रृंखला विवरण, आदि जैसे आइटम) की पहचान करती है। यह जानने के लिए कि आपको मूल्य की व्याख्या कैसे करनी चाहिए, आपका कोड एक शब्दकोश फ़ाइल में DICOM टैग को देखता है।

कुछ अन्य विवरण शामिल हैं, लेकिन यह इसका सार है। शायद फ़ाइल प्रारूप के बारे में जानने के लिए आप सबसे अधिक निर्देशक चीज कर सकते हैं उदाहरण डीआईसीओएम फ़ाइल लेना, हेक्स संपादक के साथ इसे देखना, और मानसिक रूप से इसे पार्स करने की प्रक्रिया के माध्यम से जाना। मैं कम से कम शुरुआत में, मौजूदा ओपन सोर्स कार्यान्वयन को देखकर डीआईसीओएम के बारे में जानने की कोशिश करने के खिलाफ सलाह दूंगा। प्रबुद्ध होने की बजाय भ्रमित होने की अधिक संभावना है। बड़ी तस्वीर प्राप्त करना अधिक महत्वपूर्ण है। एक बार जब आप बड़ी तस्वीर लेंगे, तो आप subtleties में उतर सकते हैं।

4

नई gdcm विकास अब यहाँ होती हैं:

http://gdcm.sourceforge.net/

यह समर्थन करता है, अजगर की चोटी पर जावा और सी #।

अभी तक एक और DICOM कार्यान्वयन क्यों लिखना जब आप एक ही सी ++ कार्यान्वयन को केंद्रीकृत और इसे करने के लिए सुलभ इतने सारे अलग अलग भाषाओं

7

पुस्तकालय pydicom ऊपर उल्लेख किया DICOM डाटा संरचनाओं तक पहुँचने के लिए एक महान पुस्तकालय की तरह लगता है हो सकता है। उदाहरण के लिए इसका उपयोग करने के लिए आर टी खुराक डेटा, मुझे लगता है एक तरह

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)) 

और फिर कुछ करना होगा, अगर आप मायावी में हैं,

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

यह गलत निर्देशांक और खुराक स्केलिंग देता है, लेकिन सिद्धांत ध्वनि होना चाहिए ।

सीटी डेटा बहुत समान होना चाहिए।

17

मैं इन दिनों pydicom का उपयोग कर रहा हूं, और यह चट्टानों का उपयोग कर रहा है।

यह के साथ खेल शुरू करने के लिए बहुत आसान है:

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

कि "डाटा" वस्तु से बाहर रोचक सामग्री प्राप्त करने के लिए, किसी भी तरह dcmdump उत्पादन जैसी:

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) 

मैं एक शानदार तरीका लगता है डिकॉम प्रारूप के बारे में अधिक जानने के लिए विभिन्न पहलुओं के अनुसार तुलना करने के लिए समान फाइलें खोलना और कोड लिखना है: अध्ययन विवरण, खिड़की चौड़ाई और केंद्र, पिक्सेल प्रतिनिधित्व आदि।

मज़े करो! :)

+2

मुझे बहुत सारे दस्तावेज मिले हैं जो 'आयात pydicom' कहता है। मेरे लिए, संस्करण 0.9.9 संस्करण के साथ ('आयात dicom') सही मॉड्यूल नाम था, इसे 'पायथन-एमआईपी स्थापित pydicom' के साथ स्थापित करने के बावजूद। –

2

डीआईसीओएम एक असली दर्द है ... यहां तक ​​कि जब निर्माता मानकों पर चिपक जाता है। यदि आप अपनी खुद की डीआईसीओएम लाइब्रेरी लिखते हैं तो आपको विभिन्न निर्माताओं को मिल जाएगा डीआईसीओएम अन्य विक्रेताओं के साथ प्रभावी रूप से असंगत हैं [उद्धरण वांछित]।

मैंने कोशिश की (मेरे खाली समय में) एक सी डिकॉम पार्सर को एक अच्छे छोटे रूबी पार्सर से भारी उधार लेने की कोशिश की, जिसे मैंने 'ruby-dicom' कहा।यह वास्तव में बहुत पठनीय कोड है (मैंने छोटे पुराने संस्करणों में से एक को देखा)।

सबसे बड़ा सिरदर्द अपेक्षित डेटा प्रकारों के साथ हेडर टैग की लाइब्रेरी एकत्र करने का प्रयास कर रहा था। मानक परिभाषित टैग, और विक्रेता टैग हैं। रूबी-डिकॉम फाइलों में टेक्स्ट प्रारूप में टैग की लाइब्रेरी होती है जिसे आसानी से निरीक्षण किया जा सकता है।

मैंने आधिकारिक साहित्य छोड़ दिया क्योंकि मुझे केवल फ़ाइल प्रारूप में दिलचस्पी थी जो केवल 10 या इतने बड़े पीडीएफ में से एक में प्रतीत होता है।

मेरी स्थानीय डीआईसीओएम फाइलों को संपीड़ित नहीं किया गया है और कोड बिट-व्यवस्था के लिए मानक आसान है, लेकिन 8-बिट कंटेनरों में संग्रहीत विभिन्न संपीड़न और अजीब 12-बिट छवियों के लिए तैयार रहें, जिनमें बड़े या छोटे अंतराल और कोई पैडिंग बिट नहीं है ..

मैंने एक बार समय बहुत दुर्लभ हो गया।

अजगर शायद हैडर पार्स हालांकि की इस शैली के लिए सी की तुलना में कहीं बेहतर विकल्प है ...