2009-06-12 23 views
7

Estoy buscando construir una solución médica para ser utilizada por cirujanos para visualizar imágenes de Dicom en 3D. Además, el software les permitirá realizar cierta segmentación y manipulación de las imágenes.Mejor lenguaje de programación para el procesamiento de imágenes médicas

Probablemente usaré el paquete VTK www.vtk.org/ para ayudar con este proyecto.

Ahora, me pregunto si es más fácil y mejor hacer este proyecto en C#, C++ o Python? Agradezco cualquier ayuda para encontrar cómo elegir entre estas tres opciones.

Respuesta

4

Personalmente, soy un chico de C++ y python, y probablemente iría con C++, porque esto suena como un proyecto relativamente intensivo, y hago la mayor parte de mi mejor diseño de alto nivel en C++ (excelente para construir rápido, base de código flexible), aunque tiendo a usar python para cosas como django, donde hay menos lógica de aplicación, pero ser capaz de ajustar la función, ver y sentir rápidamente es muy importante. Sin embargo, mi elección no significa que deba ser tu elección. Aquí hay algunas cosas a considerar:

Primero 1) Familiaridad. Si está codificando el código de producción, quiere ir con algo que sepa y le funcione bien, o tendrá dificultades con el idioma y le faltarán fechas límite. E incluso cuando completes el proyecto, seguramente tendrás muchos códigos desordenados para las cosas que estabas aprendiendo. Estoy totalmente interesado en aprender nuevos idiomas, pero hacerlo en algo que pueda permitirse arruinar.

2) Bibliotecas de terceros; ¿Cuáles quieres además de la que mencionaste? Si no tienen envoltorios, usted hará lo propio. En lo que desea escribir su GUI sería un ejemplo.

3) Despliegue: supongo que será un ejecutable de Windows supuesto. C# y C++ hacen esto fácilmente, pero tendrás que estar familiarizado con py2exe si planeas desplegar un programa python sin un intérprete de Python

2

Si puede salirse con la suya con python, en otras palabras, si sabe que funcionará bien en python, definitivamente lo elegiría en lugar de C#/C++.

Estoy seguro de que cualquiera que sea la biblioteca 3D que use está construida en C o C++ de todos modos, por lo que interactuar con ella con un lenguaje de alto nivel como python no debería causar una desaceleración.

+0

Me preguntaba por qué recomendaría Phython sobre C# y C++ – Bekh

+3

Python es un lenguaje de nivel superior, por lo que obtendrá más trabajo hecho, más rápido y con menos dolor. Se puede argumentar que C# también es un lenguaje de alto nivel, pero C++ no lo es, y usted correrá muchos más problemas si decide usarlo. – cloudhead

+3

C++ es de un nivel tan alto como el programador lo codifica –

0

Trabajé para Sound Vet por un tiempo. Proporcionan software de imágenes de rayos X para el campo veterinario. Usan C# y winforms.

0

Estoy de acuerdo con Todd Gardner en que la familiaridad es probablemente el factor más importante para determinar el éxito de una elección de lenguaje de programación. Entonces, si está mucho más familiarizado con uno de esos tres idiomas que los otros dos (o cualesquiera que sean sus otras opciones), le recomendaría elegir ese.

Sin embargo, si no está familiarizado con todos ellos, entonces recomendaría Python en segundo plano. Creo que es el más fácil de los tres para aprender y ser productivo.

1

La mayoría de las imágenes 3D médicas suelen ser muy grandes (tamaño GB). Desea elegir un idioma que pueda lidiar fácilmente con estos. Que yo sepa, C# tiene un límite de memoria de 2GB (no estoy 100% seguro) que puede causar algunos problemas.

No tengo ninguna experiencia con Python, así que no voy a ir más allá en ese camino. Pero he trabajado con C# y C++ en datos de imágenes médicas (reconstrucción, filtrado, normalización y otros cálculos pesados). En nuestro caso, C++ es la única opción debido a la velocidad. Pero cuando se trata de ver las imágenes, esto probablemente no sea un problema.

Le deseo la mejor de las suertes. ¡Un buen visor 3D estable y rápido sería genial!

+1

C# /. NET tiene y no tiene un límite de memoria de 2 GB. Si está tratando de asignar un único trozo continuo de memoria (es decir, un nuevo byte [x]), entonces está limitado a 2 GB. Esto es deliberado.Sin embargo, en un sistema de 64 bits puede asignar tanta memoria como el sistema normalmente permite, siempre y cuando ningún mandril supere los 2 GB que sería posible cuando el ensamblaje se ejecuta en un sistema de 32 bits. Para cargar una imagen grande, puede crear una matriz de un byte [] para cada línea de exploración, en lugar de intentar crear una matriz masiva para toda la imagen. También puede utilizar una clase de abstracción genérica para hacer la matriz en los bloques – David

6

Python es cada vez más popular para la visualización en 3D; varios laboratorios lo utilizan para imágenes cerebrales, por ejemplo. Entonces definitivamente es útil para ese tipo de problemas. En lo que respecta a la biblioteca, supongo que está al tanto de que cosas como vtk y co se pueden usar desde python.

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

Por supuesto, lo hace en C++, en teoría , dará lugar a programas más rápidos, todo lo demás igual (los mismos algoritmos, programadores competentes en la lengua, etc ...) y dados ' tiempo infinito'. Pero Python es sin duda más productivo que C++: en una cantidad de tiempo determinada, obtendrá más cosas en Python que en C++, a menos que sea un programador mucho mejor en C++ que en Python. Además, si hay una necesidad de interactuar con personas científicas que no son programadores, Python será más legible que C++. C++ producido por investigadores/científicos tiende a ser realmente horrible en mi experiencia (incluso peor que Fortran :)).

El mayor problema que puedo prever es si python no es lo suficientemente rápido/eficiente de memoria, por lo que implica una gran cantidad de limitaciones desde un punto de vista arquitectónico. No creo que sea el caso para las imágenes (Python, como la mayoría de los lenguajes de alto nivel, tiene problemas de escalabilidad cuando se necesitan diez de miles de objetos con muchas interacciones, esa es una de las pocas áreas donde se usa C++ para un proyecto comenzó desde cero todavía tiene sentido en mi humilde opinión hoy en día).

Descargo de responsabilidad: Debo mencionar que estoy involucrado bastante en la comunidad científica python, y que no soy un especialista en procesamiento de imágenes.

+3

+1. Utilizamos tanto C++ como Python para tareas numéricas. Las únicas veces que tuvimos problemas con Python fue cuando teníamos una tonelada de objetos pequeños. Python solía usar demasiada memoria. Y si es demasiado lento, no puede simplemente acelerar llamando a una biblioteca porque la E/S de objetos pequeños es demasiado lenta y todavía tiene problemas de memoria. Pero si tiene un gran objeto y puede llamar a una biblioteca para un poco del trabajo pesado, Python tiene tiempos de ida y vuelta mucho más rápidos y yo lo haría. – stephan

0

La mayoría de las compañías profesionales de imágenes médicas utilizan las bibliotecas PICTools de Accusoft Pegasus. Proporcionan la compresión y descompresión más rápida y más estándar para todos los formatos sin pérdidas y con pérdida DICOM como JPEG 2000, JPEG sin pérdida, JPEG-LS y otros.

SI se requiere velocidad, nada se puede comparar.

Si está implementando en Windows, ImageGear .NET o ImageGear Pro le proporcionará entornos fáciles de usar con soporte completo para archivos DICOM dcm.

También puede usar ImagXpress para el desarrollo de Windows.

2

ITK son las rodillas de la abeja del procesamiento de imágenes médicas, y eso está en C++. así que supongo que recomendaría C++ con ITK.

Cuestiones relacionadas