Ни один из доступных обработчиков изображений не может декодировать этот синтаксис передачи JPEG Lossless при чтении DICOM и построении графиков с использованием matplotlib
Когда я использую Pydicom в Python3.6, есть некоторые проблемы:
import pydicom
import matplotlib.pyplot as plt
import os
import pylab
filePath = "/Users/zhuangrui/Documents/Python/Dicom/dicoms/zhang_bo/0001.dcm"
dataSet_1 = pydicom.dcmread(filePath)
plt.imshow(dataSet_1.pixel_array)
plt.show()
Как можно решить эту проблему? Спасибо большое!
2 ответа
Я столкнулся с той же проблемой после некоторых исследований по предложенной ссылке выше. Мне удалось решить эту проблему путем обновления до последней версии модуля pydicom "1.2.0" и установки gdcm. Вы можете обновить Pydicom с pip install -U git+https://github.com/pydicom/pydicom.git
Вы можете найти последнюю версию gdcm здесь, и эта ссылка объясняет установку.
Я использую anaconda, и проще установить пакет gdcm и решить проблему. Если вы используете анаконду, просто введите внутри вашей среды:conda install pydicom --channel conda-forge
чтобы получить последнюю версию Pydicom и
conda install -c conda-forge gdcm
чтобы получить gdcm. Это решает проблему. Надеюсь, это поможет.
При использовании pydicom вам также необходимо установить соответствующий обработчик изображений для обработки сжатых типов изображений.
Для JPEG без потерь теоретически должно работать следующее: jpeg_ls, gdcm или Pillow with jpeg plugin. Все это также требует установки Numpy. Смотрите обсуждение на https://github.com/pydicom/pydicom/issues/532.
Также выполняется запрос на добавление, чтобы добавить больше описательных сообщений об ошибках для определения того, какие обработчики изображений необходимы для разных изображений.
Проблема:
Я пытался читать медицинские изображения с расширением.dcm. Но получал ошибку как в Windows, так и в Ubuntu. Я нахожу решение, которое подойдет как для обработанных деталей.
Ошибка, которую я получил в Ubuntu: NotImplementedError: этот синтаксис передачи JPEG 2000 Image Compression (только без потерь) не может быть прочитан, потому что Pillow не имеет подключаемого модуля декодера jpeg 2000
(Примечание для Windows, у меня была другая ошибка, но я уверен, что это из-за той же проблемы, т.е. Pillow не поддерживает формат JPEG 2000)
Информация о платформе:
- Я использую: Python 3.6, Anaconda и Ubuntu, 15 ГБ ОЗУ
Оперативная память важна:
Решение, которое я применил, такое же, как объяснил Али выше. Но я хочу добавить, что эта установка может занять время (в зависимости от используемой вами оперативной памяти). В Ubuntu, где я использую 15 ГБ ОЗУ, на облачной платформе требуется меньше времени, а в Windows на локальном компьютере с 4 ГБ ОЗУ требуется много времени.
Решение
Анаконда нужна. Почему? Пожалуйста, проверьте официальный документ pydicom (https://pydicom.github.io/pydicom/dev/getting_started.html), в котором упоминается: "Чтобы установить pydicom вместе с обработчиками изображений для сжатых данных пикселей, мы рекомендуем вам использовать Miniconda или Anaconda" (Примечание для Windows, я получал другую ошибку)
Если вы используете Ubuntu, откройте Терминал. Если вы используете Windows, то в Anaconda Navigator перейдите в Environment (Среда) с терминала запуска. Выполните на нем следующие команды:
pip install -U git+https://github.com/pydicom/pydicom.git
conda install pydicom --channel conda-forge
conda install -c conda-forge gdcm
Перекрестная проверка:
Теперь используйте .dcm
файл, для которого мы получили ошибку. Попробуйте использовать следующий код в записной книжке Python
filename = 'FileName.dcm'
ds = pydicom.dcmread(filename)
plt.imshow(ds.pixel_array, cmap=plt.cm.bone)
Он должен распечатать результат. Также попробуйте этот код:
ds.pixel_array
Это даст вам массив, содержащий значения.