2009-05-26 5 views
5

Для текущего проекта я должен использовать и выполнять математику по информации, предоставленной в матрицах, а также использовать функции ITK/VTK для отображения медицинской информации/визуализации. В основном мне приходится использовать как подпрограммы Matlab, так и VTK/ITK в способе (я думаю) 50/50. Проблема заключается в том, что, так как я должен использовать оба, я хочу, чтобы заранее решить, какой метод использовать:Импорт ITK/VTK в Matlab или Matlab в среду VTK/ITK?

  1. Импорт ИТК и ВТК ЛИЭС в MATLAB: для этого вы должны создать свой собственный VTK как начало. Затем, по примеру this, вся идея состоит в том, чтобы написать VTK-код в .mex-файлах. Это файлы в , которые вы можете запрограммировать c-code как функцию matlab.

  2. Импортировать функции Matlab в среду ITK/VTK: Для этого я бы использовал язык, возможно, python, чтобы выполнять вычисления матрицы. Я мог бы использовать Numpy. Это модуль расчета типа Matlab в Python и конвертирует данные vtk в данные numpy, и я могу использовать matplotlib для создания графиков.

Плюсы/минусы ITK/ВТК ввозимые в MATLAB
+ легко сделать MatLab расчеты и построение
+ MATLAB является одним из наиболее инструментов мощных для работы с матрицами
+ использовали MATLAB раньше (субъективная)

- Должен быть установлен MATLAB
- работает MATLAB нагружает ваш компьютер

Плюсы/минусы MatLab импортированы в ИТК/ВТК среде
+ нет необходимости иметь MATLAB установлен
+ меньше напряжения для ПК, а так как медицинские наборы данных требуют много с вашего компьютера, это приятно.
+ ITK/VTK среда уже настроена в этом случае (в настоящее время используется так, но никогда не с матрицей/матрицами .mat)

- слышал рассказы, трудно сделать вычисления в Matlab таким образом. Бит беспорядок.
- меньше опыта в python (в сочетании с matlab 0)

Итак ...? заключение
На самом деле я ищу людей, которые работали в одной из двух сред, но так как я думаю, что есть такие немногие из них, я люблю слышать предложения о том, что искать, прежде чем делать окончательный выбор. Это будет стоить очень много времени, чтобы заставить его работать так, как мне это нужно, поэтому было бы пустой тратой времени, чтобы попробовать оба (также есть крайний срок).

дополнительные ноты
- Я попытался Simulink для MATLAB в сочетании с ВТК/ITK LIBS, но я не люблю его.
- Хотя решение проблемы - это, конечно, лучшее, что я могу получить здесь. Я также доволен тем, у кого есть опыт в выборе вариантов, которые находятся в базе так же, как и эта. Какие ключевые моменты нужно искать при выборе? Я пропустил ключевую точку в моих плюсах и минусах?

ответ

2

VTK поставляется с креплениями Python (one description). Я предполагаю, что ITK тоже.Если вы уже не имеете много кода в Matlab, я предполагаю, что вы должны были бы гораздо легче бесшовно интегрирующую VTK/ITK с питона Numpy, Matplotlib и т.д.

EDIT:

На мой взгляд, нетривиальные функции MEX являются болью для записи. Компромисс часто может записывать новые функции MEX для каждой задачи или получать дополнительное время для написания большого количества кода сопряжения.

В зависимости от того, что вы делаете, scipy (пакет пакетов python, включая matplotlib, numpy и т. Д.) Делает многое из того, что делает Matlab. Есть тонкие различия и различные компромиссы. Автоматическое вещание настолько невероятно полезно, как только вы его повесите. Недавно MathWorks добавила BSXFUN, но она автоматическая с numpy. Если вы выполняете большую работу с разреженными матрицами или называете множество более сложных функций линейной алгебры, проверьте документы numpy, чтобы узнать, существует ли то, что вам нужно.

В зависимости от того, что вы сделали с вашей средой, я бы предложил попробовать подход Python в течение нескольких недель. Посмотрите, достаточны ли возможности его построения и математические функции для ваших нужд. Ожидайте немного ударить головой о стену, потому что документация не так зреет, как Matlab.

+0

У меня уже есть рабочая среда, в которой у меня есть программные модули python, а также импортированные ITK/VTK. Проблема для меня была в последней догадке, которую вы делаете, это действительно проще и почему. – bastijn

1

Потребовалось некоторое время, чтобы получить обе версии протестированы, но сделать вывод по этому вопросу:

Я решил использовать питона в сочетании с Numpy/SciPy и Matplotlib. Есть только одна основная причина, по которой я решил использовать это. При импорте ITK и VTK в Matlab, вы должны использовать функции Mex для программирования кода C в этих MEX файлы в подпрограмме следующим образом:.

alt text http://www.bastijn.nl/zooi/routine.png

Теперь, когда процедура доходит до где находится файл mex, он управляет этим mex-файлом и запускает его как функцию. mex-файл похож на черный ящик. После того, как файл Mex сделал свое дело, он снова обращается к Matlab, и процедура продолжается. Но вы не можете выполнять какие-либо операции с matlab, пока файл Mex запускается или использует переменные в этом mexfile из Matlab. Таким образом, невозможно запустить некоторый код itk/vtk, заметить, что он не работает и не изменяет некоторые из переменных, используемых в файле mex (они созданы там, но они также будут умирать там из-за того, что черный ящик возвращает ваш результат) для что работает. Вам нужно снова запустить всю функцию mex.

Это основной недостаток, так как вам нужно повторно запустить полный файл mex (функция C) для всех небольших изменений. Есть занятие, фиксирующее это основное сужение, но поскольку они еще не готовы, и мне это нужно сейчас, я решил взять тур на питоне.

2

Это может помочь: mlabwrap - довольно сложный способ вызвать форму Matlab Python. http://mlabwrap.sourceforge.net/

+0

Ничего себе, спасибо за поздний ответ :). Это выглядит многообещающе. – bastijn

1

Bastjin, вы сделали правильный выбор: правила Python!

Некоторые больше информации:

Для варианта № 1, я написал: http://github.com/thewtex/matlab-itk-import Но, как вы уже, это низшая вариант.

Вот некоторые ссылки для опции номер 2: У mlab's у Mayavi2 есть хорошая возможность переключения между VTK и numpy.

WrapITK позволяет писать конвейеры ITK в Python, и вы можете идти туда и обратно с помощью Numpy с внешним проектом PyBuffer.

1

Немного старого сообщения, но я просто хочу упомянуть matVTK (http://www.cir.meduniwien.ac.at/matvtk/). Это позволяет делать все ваши вычисления в Matlab, а затем строить ваши данные в библиотеке vtk.