2008-09-23 2 views
17

Что такое самый простой и наиболее-питонический способ анализа файла DICOM?Анализ файлов DICOM в родном Python

Самостоятельная реализация Python без использования библиотек, отличных от Python, была бы очень предпочтительной. DICOM является стандартным форматом файлов в цифровой медицинской визуализации (посмотрите here для получения дополнительной информации).

Есть некоторые библиотеки C/C++, которые поддерживают чтение (подмножество) файлов DICOM. У двух или трех из них даже есть привязки Python. Собственный анализатор Python будет служить двум целям для меня:

  1. Не нужно создавать какие-либо внешние библиотеки C/C++.
  2. Подробнее о формате файла DICOM.

ответ

18

И на сегодня есть еще чистые файлы Python чтения пакет DICOM доступны: pydicom

0

Интересно, что сделал оригинальный плакат и какие методы работали и не работали для него. Я никогда не работал с DICOM, но быстрый поиск Google для «DICOM python» дал несколько интересных результатов. Кажется, что этот проект: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ должен доставить то, что вы хотите. Он имеет привязки python и довольно активный список рассылки.

+0

Является ли это «Пожалуйста, моя домашняя работой для меня» вопроса? –

+0

Нет, IMHO Я сделал домашнее задание: Есть некоторые библиотеки C/C++, которые поддерживают чтение (подмножество) файлов DICOM. У двух или трех из них даже есть привязки Python. Собственный анализатор Python будет служить двум целям для меня: 1. Не нужно создавать какие-либо библиотеки C/C++. 2. Узнайте о формате файла DICOM. –

1

Есть некоторые библиотеки (чаще всего реализуются в C/C++) с привязками Python, например:

Однако я ищу родной Python чтобы узнать больше о формате DICOM.

+0

обе ссылки выглядят гнилыми –

+0

@MonicaHeddneck Спасибо за головы; Я просто обновил обе ссылки. –

3

Несколько лет назад я искал то же самое, и нашел это: Python DICOM lib

я был не слишком впечатлен с кодом, но он является родным Python файлы чтения DICOM.

9

Если вы хотите узнать о формате DICOM, «Digital Imaging и коммуникации в медицине (DICOM): Практическое введение и Руководство по выживанию «Олег Пьяных вполне читаем и дает хорошее представление о ключевых концепциях DICOM. Springer-Verlag является издателем этой книги. Полный стандарт DICOM - это, конечно, конечная рекомендация, хотя это несколько более устрашающе. Он доступен от NEMA (http://medical.nema.org).

Формат файла на самом деле менее эзотерический, чем вы могли себе представить, и состоит из преамбулы, за которой следует последовательность элементов данных. Преамбула содержит текст ASCII «DICM» и несколько зарезервированных байтов, которые не используются. Следуя преамбуле, это последовательность элементов данных. Каждый элемент данных состоит из размера элемента, двухсимвольного кода ASCII, указывающего представление значения, тега DICOM и значения. Элементы данных в файле упорядочены по номерам тегов DICOM. Само изображение представляет собой еще один элемент данных с представлением размера, значения и т. Д.

Представления значений точно определяют, как интерпретировать значение. Это номер? Это строка символов? Если это символьная строка, она короткая или длинная и какие символы разрешены? Код представления значения сообщает об этом.

Тег DICOM представляет собой четырехбайтовый шестнадцатеричный код, состоящий из 2-байтового «группового» номера и 2-байтового «элемента». Номер группы - это идентификатор, который сообщает вам, к какой информационной сущности применяется тег (например, группа 0010 относится к пациенту, а группа 0020 относится к исследованию). Номер элемента идентифицирует интерпретацию значения (такие элементы, как идентификационный номер пациента, описание серии и т. Д.). Чтобы узнать, как вы должны интерпретировать значение, ваш код ищет тег DICOM в файле словаря.

Имеются некоторые другие детали, но в этом суть. Наверное, самая поучительная вещь, которую вы можете сделать, чтобы узнать о формате файла, - взять пример файла DICOM, посмотреть на него с помощью шестнадцатеричного редактора и пройти процесс разбора его мысленно. Я бы посоветовал не пытаться узнать о DICOM, взглянув на существующие реализации с открытым исходным кодом, по крайней мере на начальном этапе. Это скорее смущает, а не просветит. Получение большей картины важнее. Когда у вас будет большая картина, вы можете спуститься в тонкости.

4

Новые разработки gdcm Теперь случаются здесь:

http://gdcm.sourceforge.net/

Он поддерживает Java и C# на вершине питона.

Зачем писать еще одну реализации DICOM, когда вы можете централизовать единую реализацию C++ и имеет доступ к нему так много различных языков

7

библиотеки pydicom упоминались выше, кажется, большой библиотекой для доступа к структурам данных DICOM. Использовать его для доступа, например. Данные RT ДОЗ, я думаю, можно было бы сделать что-то вроде

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

, а затем, если вы в MayaVi,

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) 

Я думаю, это отличный способ чтобы узнать больше о формате dicom, нужно открыть похожие файлы и написать код, чтобы сравнить их по различным аспектам: описание исследования, ширину окна и центр, представление пикселей и так далее.

Удачи! :)

+2

Я нашел много документации, которая гласит 'import pydicom'. Для меня с версией 0.9.9 выше ('import dicom') было правильным именем модуля, несмотря на то, что он установил его с помощью' python -m pip install pydicom'. –

2

DICOM - настоящая боль ... даже когда производитель придерживается стандартов. Если вы пишете свою собственную библиотеку DICOM, вы найдете разные производители. DICOMs фактически несовместимы с другими поставщиками [править].

Я попытался (в свое свободное время) написать сиксор C dicom, сильно заимствуя из приятного маленького анализатора Ruby. Я наткнулся хитро, назвав 'ruby-dicom'.Это действительно очень читаемый код (я посмотрел на одну из более ранних версий).

Самая большая головная боль пыталась собрать библиотеку тегов заголовка с ожидаемыми типами данных. Существуют теги, определенные стандартом, и теги поставщика. Файлы ruby-dicom содержат библиотеку тегов в текстовом формате, который можно легко проверить.

Я отказался от официальной литературы, так как меня интересовал только формат файла, который, кажется, находится только в одном из 10 или около того больших PDF-файлов.

Мои локальные файлы DICOM не сжимаются и следуют стандартным легкоразрядным битовым устройствам, но должны быть готовы к различным сжатиям и странным 12-разрядным изображениям, хранящимся в 8-битных контейнерах с большой или малой точностью и без дополнительных битов. .

Я сдался, как только время стало очень скудным.

Python, вероятно, является гораздо лучшим выбором, чем C для этого стиля заголовка разбора, хотя ...

Смежные вопросы