2

我正在使用从这里下载的 pydicom 1.0.0a1 ,当我运行以下代码时:

ds=pydicom.read_file('./DR/abnormal/abc.dcm',force=True)
ds.pixel_array

发生此错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-6-d4e81d303439> in <module>()
      7 ds=pydicom.read_file('./DR/abnormal/abc.dcm',force=True)
      8 
----> 9 ds.pixel_array
     10 

/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/dataset.pyc in __getattr__(self, name)
    501         if tag is None: # `name` isn't a DICOM element keyword
    502             # Try the base class attribute getter (fix for issue 332)
--> 503             return super(Dataset, self).__getattribute__(name)
    504         tag = Tag(tag)
    505         if tag not in self: # DICOM DataElement not in the Dataset

/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/dataset.pyc in pixel_array(self)
   1064             The Pixel Data (7FE0,0010) as a NumPy ndarray.
   1065         """
-> 1066         return self._get_pixel_array()
   1067 
   1068     # Format strings spec'd according to python string formatting options

/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/dataset.pyc in _get_pixel_array(self)
   1042         elif self._pixel_id != id(self.PixelData):
   1043             already_have = False
-> 1044         if not already_have and not self._is_uncompressed_transfer_syntax():
   1045             try:
   1046                 # print("Pixel Data is compressed")

/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/dataset.pyc in _is_uncompressed_transfer_syntax(self)
    662         """Return True if the TransferSyntaxUID is a compressed syntax."""
    663         # FIXME uses file_meta here, should really only be thus for FileDataset
--> 664         return self.file_meta.TransferSyntaxUID in NotCompressedPixelTransferSyntaxes
    665 
    666     def __ne__(self, other):

/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/dataset.pyc in __getattr__(self, name)
    505         if tag not in self: # DICOM DataElement not in the Dataset
    506             # Try the base class attribute getter (fix for issue 332)
--> 507             return super(Dataset, self).__getattribute__(name)
    508         else:
    509             return self[tag].value

AttributeError: 'Dataset' object has no attribute 'TransferSyntaxUID'

我阅读了 google group post,并将 filereader.py 文件更改为发布的文件,但出现此错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/__init__.py", line 41, in read_file
    from pydicom.dicomio import read_file
  File "/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/dicomio.py", line 3, in <module>
    from pydicom.filereader import read_file, read_dicomdir
  File "/Applications/anaconda/lib/python2.7/site-packages/pydicom-1.0.0a1-py2.7.egg/pydicom/filereader.py", line 35, in <module>
    from pydicom.datadict import dictionaryVR
ImportError: cannot import name dictionaryVR 

有谁知道如何解决这个问题?

4

1 回答 1

8

您应该在读取文件后设置 TransferSyntaxUID,然后再尝试获取 pixel_array。

import pydicom.uid
ds=pydicom.read_file('./DR/abnormal/abc.dcm',force=True)
ds.file_meta.TransferSyntaxUID = pydicom.uid.ImplicitVRLittleEndian  # or whatever is the correct transfer syntax for the file
ds.pixel_array

您引用的帖子的更正是在代码进行一些更改以协调某些命名之前完成的,因此由于当前主使用dictionary_VR而不是dictionaryVR. 如上所述在用户代码中设置传输语法可以避免该问题。

于 2017-06-13T22:23:58.337 回答