2009-06-12 4 views
7

Я ищу для создания медицинского решения, которое будет использоваться хирургами для визуализации изображений Dicom в 3D. Кроме того, программное обеспечение позволит им выполнять некоторую сегментацию и манипуляции с изображениями.Лучший язык программирования для обработки медицинских изображений

Возможно, я воспользуюсь пакетом VTK www.vtk.org/ для оказания помощи в этом проекте.

Теперь, мне интересно, проще ли это сделать для этого проекта на C#, C++ или Python? Я ценю любую помощь в поиске того, как выбирать между этими тремя вариантами.

ответ

4

Лично я парень C++ и python, и я бы, вероятно, пошел с C++, потому что это звучит как относительно интенсивный проект, и я делаю большую часть своего лучшего дизайна на высоком уровне в C++ (отлично подходит для быстрого создания, гибкая база кода), в то время как я, как правило, использую python для таких вещей, как django, где есть меньше логики приложений, но возможность настраивать функцию, быстро выглядеть и чувствовать себя очень важно. Однако мой выбор не означает, что это должен быть ваш выбор. Вот несколько вещей, которые следует учитывать:

Foremost 1) Знакомство. Если вы кодируете производственный код, вы хотите пойти с чем-то, что знаете, и хорошо работать для вас, или вы будете боретесь с языком и будете лишены крайних сроков. И даже когда вы завершаете проект, у вас обязательно будет много грязного кода для вещей, которые вы изучали. Я все изучаю новые языки, но делаю это на чем-то, что вы можете себе позволить.

2) Сторонние библиотеки; которые вы хотите, кроме того, что вы упомянули? Если у них нет оберток, вы будете кататься самостоятельно. Например, вы хотите написать свой графический интерфейс.

3) Развертывание: Я предполагаю, что это будет предполагаемый исполняемый файл Windows. C# и C++ делают это легко, но вы должны быть знакомы с py2exe, если вы планируете развертывать программу python без интерпретатора python.

2

Если вы можете уйти с python - другими словами, если вы знаете, что это будет нормально работать в python, я бы определенно выбрал его над C#/C++.

Я уверен, что любая 3D-библиотека, которую вы используете, построена на C или C++ в любом случае, поэтому взаимодействие с ней с языком высокого уровня, например python, не должно приводить к замедлению.

+0

Мне было интересно, почему вы рекомендуете Phython над C# и C++ – Bekh

+3

Python - это язык более высокого уровня, и, таким образом, вы получите больше работы, быстрее и с меньшими болями. Можно утверждать, что C# также является языком высокого уровня, но C++ - нет, и вы столкнетесь с гораздо большими проблемами, если решите использовать его. – cloudhead

+3

C++ - это такой высокий уровень, как программист его кодирует –

0

Я работал на Sound Vet какое-то время. Они предоставляют программное обеспечение для обработки изображений xray для ветеринарной области. Они используют C# и winforms.

0

Я согласен с Тоддом Гарднером в том, что знакомство, вероятно, является самым большим фактором, определяющим успех выбора языка программирования. Поэтому, если вы более знакомы с одним из этих трех языков, чем с двумя другими (или любыми другими вашими вариантами), я бы рекомендовал выбрать этот.

Однако, если вы одинаково незнакомы со всеми из них, я бы рекомендовал второй рекомендации Cloudhead для Python. Я считаю, что это самый простой из трех, кто учится и становится продуктивным.

1

Большинство медицинских 3D-изображений обычно очень большие (размер GB). Вы хотите выбрать язык, который легко справится с этим. Насколько мне известно, C# имеет ограничение на 2 ГБ памяти (я не уверен на 100%), что может вызвать некоторые проблемы.

У меня нет опыта работы с Python, поэтому я не собираюсь идти дальше по этому пути. Но я работал с C# и C++ по медицинским изображениям (реконструкция, фильтрация, нормализация и другие тяжелые вычисления). В нашем случае C++ - единственный выбор из-за скорости. Но когда дело доходит до просмотра изображений, возможно, это не проблема.

Желаю вам удачи. Хороший стабильный и быстрый 3D-просмотрщик будет замечательным!

+1

C# /. NET делает и не имеет ограничения на 2 ГБ памяти. Если вы пытаетесь выделить один непрерывный кусок памяти (т. Е. Новый байт [x]), то вы ограничены 2 ГБ. Это преднамеренно.Однако на 64-битной системе вы можете выделить столько памяти, сколько обычно допускает система, если ни один патрон не превышает 2 ГБ, что было бы возможно, когда сборка запускается на 32-битной системе. Чтобы загрузить большое изображение, вы можете создать один байт [] для каждой строки сканирования, вместо того, чтобы пытаться создать один массивный массив для всего изображения. Вы также можете использовать общий класс абстракции для создания массива в блоках – David

6

Python становится популярным для 3D-визуализации - например, несколько лабораторий используют его для изображений мозга. Таким образом, это определенно полезно для таких проблем. По-видимому, я знаю, что такие вещи, как vtk и co, могут использоваться из python.

http://neuroimaging.scipy.org/site/doc/manual/html/faq/why.html

Конечно, делать это в C++, в теории, приведет к ускорению программ, при прочих равных условиях (те же алгоритмы, программисты владеют языком, и т.д ...) и данных " бесконечное время ". Но python, безусловно, более продуктивен, чем C++: за определенное количество времени вы получите больше вещей на Python, чем на C++, если вы не намного лучше программист на C++, чем в python. Кроме того, если есть необходимость взаимодействовать с научными людьми, которые не являются программистами, python будет более читабельным, чем C++. C++, созданный исследователями/научными людьми, как правило, действительно ужасен в моем опыте (даже хуже, чем Fortran :)).

Самая большая проблема, которую я могу предвидеть, заключается в том, что python недостаточно эффективен для быстрой/эффективной памяти, так что это связано с множеством ограничений с архитектурной точки зрения. Я не думаю, что это будет иметь место для изображений (python, как и большинство языков высокого уровня, имеет проблемы с масштабируемостью, когда вам нужно десять тысяч объектов с большим количеством взаимодействий - это одна из немногих областей, где использование C++ для проекта начатый с нуля, по-прежнему имеет смысл ИМХО в настоящее время).

Отказ от ответственности: Я должен упомянуть, что я очень много участвую в научном сообществе python и что я не специалист по обработке изображений.

+3

+1 Мы используем как C++, так и Python для числовых задач. Единственные времена, когда мы сталкивались с проблемами с Python, было то, что у нас было много мелких объектов. Тогда Python имел тенденцию использовать слишком много памяти. И если он слишком медленный, вы не можете просто ускорить его, вызвав библиотеку, потому что ввод-вывод для небольших объектов слишком медленный, и у вас все еще есть проблемы с памятью. Но если у вас есть один большой объект, и вы можете вызвать библиотеку для какой-то тяжелой работы, у Python намного быстрее время туда и обратно, и я бы пошел на это. – stephan

0

Большинство профессиональных медицинских изображений используют библиотеки Accusoft Pegasus PICTools. Они обеспечивают самую быструю и стандартную компрессию и декомпрессию для всех форматов DICOM с потерями и без потерь, таких как JPEG 2000, Lossless JPEG, JPEG-LS и другие.

Предельная скорость не требуется, ничто не сравнится.

Если вы развертываете в Windows, ImageGear .NET или ImageGear Pro предоставит вам простые в использовании среды с полной поддержкой файлов DICOM dcm.

Вы также можете использовать ImagXpress для разработки Windows.

2

ITK - колени пчелы медицинской обработки изображений, и это на C++. поэтому я думаю, я бы рекомендовал C++ w/ITK.

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