plt.imshow(datasetP2.pixel_array, cmap=plt.cm.bone)
tried this code on a file provided to me and ended up with this error
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_28228/3373097283.py in <module>
----> 1 plt.imshow(datasetP2.pixel_array, cmap=plt.cm.bone)
~\anaconda3\lib\site-packages\pydicom\dataset.py in __getattr__(self, name)
834 return {}
835 # Try the base class attribute getter (fix for issue 332)
--> 836 return object.__getattribute__(self, name)
837
838 @property
~\anaconda3\lib\site-packages\pydicom\dataset.py in pixel_array(self)
1880 :class:`numpy.ndarray`.
1881 """
-> 1882 self.convert_pixel_data()
1883 return cast("numpy.ndarray", self._pixel_array)
1884
~\anaconda3\lib\site-packages\pydicom\dataset.py in convert_pixel_data(self, handler_name)
1442 self._convert_pixel_data_using_handler(handler_name)
1443 else:
-> 1444 self._convert_pixel_data_without_handler()
1445
1446 def _convert_pixel_data_using_handler(self, name: str) -> None:
~\anaconda3\lib\site-packages\pydicom\dataset.py in _convert_pixel_data_without_handler(self)
1554 .format(", ".join([str(hh) for hh in available_handlers]))
1555 )
-> 1556 raise last_exception # type: ignore[misc]
1557
1558 def _do_pixel_data_conversion(self, handler: Any) -> None:
~\anaconda3\lib\site-packages\pydicom\dataset.py in _convert_pixel_data_without_handler(self)
1534 for handler in available_handlers:
1535 try:
-> 1536 self._do_pixel_data_conversion(handler)
1537 return
1538 except Exception as exc:
~\anaconda3\lib\site-packages\pydicom\dataset.py in _do_pixel_data_conversion(self, handler)
1561 # Use the handler to get a 1D numpy array of the pixel data
1562 # Will raise an exception if no pixel data element
-> 1563 arr = handler.get_pixeldata(self)
1564 self._pixel_array = reshape_pixel_array(self, arr)
1565
~\anaconda3\lib\site-packages\pydicom\pixel_data_handlers\numpy_handler.py in get_pixeldata(ds, read_only)
281 px_keyword = [kw for kw in keywords if kw in ds]
282 if len(px_keyword) != 1:
--> 283 raise AttributeError(
284 "Unable to convert the pixel data: one of Pixel Data, Float "
285 "Pixel Data or Double Float Pixel Data must be present in "
AttributeError: Unable to convert the pixel data: one of Pixel Data, Float Pixel Data or Double Float Pixel Data must be present in the dataset```
CodePudding user response:
As the exception message says, it's likely that your dataset has no Pixel Data element in it. If you're iterating through a folder you're probably picking up a dataset without any image data. Try doing something like this:
from pathlib import Path
from pydicom import dcmread
directory = Path("/path/to/directory")
for p in directory.glob("**/*"):
ds = dcmread(p)
if "PixelData" not in ds:
print(f"Dataset found with no Pixel Data: {p}")
continue
arr = ds.pixel_array
CodePudding user response:
The medical imagers that I'm familiar with produce 16 bit/pixel gray value images.
Generally convert from the ImageMagick suite can read them and save them as e.q. png, so you can at least view them and check for good data.
Note that on a conventional PC you will loose color resolution because PC hardware generally isn't set up in 16 bit/pixel grayscale.
