Проанализируйте файлы DICOM в собственном Python

Вы можете использовать объект ссылочного объекта &Animal для заимствования элементов и сохранения этих объектов-признаков в Vec. Затем вы можете перечислить его и использовать интерфейс признака.

Изменение общего типа Vec путем добавления & перед признаком будет работать:

fn main() {
    let dog: Dog = Dog;
    let cat: Cat = Cat;
    let mut v: Vec<&Animal> = Vec::new();
    //             ~~~~~~~
    v.push(&dog);
    v.push(&cat);
    for animal in v.iter() {
        println!("{}", animal.make_sound());
    }
    // Ownership is still bound to the original variable.
    println!("{}", cat.make_sound());
}

Это здорово, если вы можете захотеть, чтобы исходная переменная сохраняла право собственности и повторно использовала ее позже.

Имейте ввиду, что вы не можете передать права собственности на dog или cat, потому что Vec заимствовал эти конкретные экземпляры в той же области.

Знакомство с новой областью может помочь справиться с этой конкретной ситуацией:

fn main() {
    let dog: Dog = Dog;
    let cat: Cat = Cat;
    {
        let mut v: Vec<&Animal> = Vec::new();
        v.push(&dog);
        v.push(&cat);
        for animal in v.iter() {
            println!("{}", animal.make_sound());
        }
    }
    let pete_dog: Dog = dog;
    println!("{}", pete_dog.make_sound());
}
19
задан MvdD 14 October 2008 в 11:28
поделиться

8 ответов

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

21
ответ дан 30 November 2019 в 02:07
поделиться

Если Вы хотите узнать о формате DICOM, "Цифровая Обработка изображений и Связь в Медицине (DICOM): Практическое Введение и Практические советы для освоения системы" Oleg Pianykh довольно читаемы и дают хорошее введение для манипулирования понятий DICOM. Springer-Verlag является издателем этой книги. Полный стандарт DICOM является, конечно, окончательной ссылкой, хотя это несколько более пугающе. Это доступно из НЕМЫ ( http://medical.nema.org ).

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

, Представления значения указывают точно, как интерпретировать значение. Действительно ли это - число? Действительно ли это - символьная строка? Если это - символьная строка, действительно ли это - короткое или длинное и какие символы разрешены? Код представления значения говорит Вам это.

А тег DICOM является 4-байтовым шестнадцатеричным кодом, состоявшим из 2-байтового числа "группы" и 2-байтового числа "элемента". Число группы является идентификатором, который говорит Вам, к какому информационному объекту тег относится (например, группа 0010 обращается к пациенту, и группа 0020 обращается к исследованию). Число элемента определяет интерпретацию значения (объекты, такие как Идентификационный номер пациента, серийное описание, и т.д.). Чтобы узнать, как необходимо интерпретировать значение, код ищет тег DICOM в файле словаря.

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

9
ответ дан 30 November 2019 в 02:07
поделиться

Библиотека упомянутый выше 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)

Это дает неправильные координаты и масштабирование дозы, но принцип должен быть звуковым.

данные кар должны быть очень похожими.

7
ответ дан 30 November 2019 в 02:07
поделиться

Более новая gdcm разработка теперь происходит здесь:

http://gdcm.sourceforge.net/

Это поддерживает Java и C# сверху Python.

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

4
ответ дан 30 November 2019 в 02:07
поделиться

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

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

3
ответ дан 30 November 2019 в 02:07
поделиться

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

Однако я ищу собственную реализацию Python для получения дополнительной информации о формате файла DICOM.

1
ответ дан 30 November 2019 в 02:07
поделиться

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

0
ответ дан 30 November 2019 в 02:07
поделиться

Как уже говорили другие: возвращаемое значение, а не выходное значение.

Могу ли я порекомендовать вам книгу «Руководство по разработке структуры» (2-е изд)? Страницы 184-185 раскрывают причины, по которым следует избегать использования параметров. Вся книга будет направлять вас в правильном направлении по всем видам проблем кодирования .NET.

В сочетании с Руководством по проектированию платформы используется инструмент статического анализа FxCop. Вы найдете это на сайтах Microsoft для бесплатной загрузки. Запустите это на своем скомпилированном коде и посмотрите, что он говорит. Если он жалуется на сотни и сотни вещей ... не паникуйте! Посмотрите спокойно и внимательно на то, что говорится о каждом конкретном случае. Не спешите исправлять вещи как можно скорее. Учитесь на том, что это говорит вам. Вы попадете на путь мастерства.

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 - это открыть похожие файлы и написать код, чтобы сравнить их по различным аспектам: описание исследования, ширина и центр окна, представление в пикселях и т. Д.

Получайте удовольствие ! :)

18
ответ дан 30 November 2019 в 02:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: