Вы можете использовать объект ссылочного объекта &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());
}
И с сегодняшнего дня существует другой чистый пакет Python, читая доступные файлы DICOM: pydicom
Если Вы хотите узнать о формате 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 путем рассмотрения существующих реализаций с открытым исходным кодом по крайней мере первоначально. Это, более вероятно, перепутает вместо, просвещают. Получение большого изображения более важно. После того как у Вас есть большое изображение, затем можно убывать в тонкость.
Библиотека упомянутый выше 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)
Это дает неправильные координаты и масштабирование дозы, но принцип должен быть звуковым.
данные кар должны быть очень похожими.
Более новая gdcm разработка теперь происходит здесь:
Это поддерживает Java и C# сверху Python.
, Почему запись еще один dicom реализация, когда можно централизовать единственную реализацию C++ и иметь ее доступный для такого количества различных языков
Несколько лет назад я искал то же самое и нашел это: Python lib DICOM
я был не слишком впечатлен кодом, но это - собственный Python, читая файлы DICOM.
Существуют некоторые библиотеки (чаще всего реализованы в C/C++) с привязкой Python, например:
Однако я ищу собственную реализацию Python для получения дополнительной информации о формате файла DICOM.
Интересно, что попробовал исходный плакат и какие методы работали и не обработанные для него. Я никогда не работал с DICOM, но быстрый поиск Google "Python DICOM" дал несколько интересных результатов. Кажется что этот проект: http://www.creatis.univ-lyon1.fr/Public/Gdcm/ должен поставить то, что Вы хотите. Это имеет привязку Python и довольно активный список рассылки.
Как уже говорили другие: возвращаемое значение, а не выходное значение.
Могу ли я порекомендовать вам книгу «Руководство по разработке структуры» (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 - это открыть похожие файлы и написать код, чтобы сравнить их по различным аспектам: описание исследования, ширина и центр окна, представление в пикселях и т. Д.
Получайте удовольствие ! :)