2012-06-21 20 views
10

Pronto comenzaré un proyecto de ingeniería de último año, que consiste en el seguimiento en tiempo real de objetos que se mueven en una superficie 2D. Los objetos serán registrados por mi algoritmo usando feature extraction.Seguimiento de objetos: MATLAB contra Python Numpy

Estoy tratando de hacer una investigación para decidir si debo usar MATLAB o usar Python Numpy (Numerical Python). Algunos de los factores que estoy tomando en cuenta:

1.) Experiencia

Tengo experiencia razonable en ambos, pero quizás más experiencia en el procesamiento de imágenes utilizando Numpy. Sin embargo, siempre he encontrado que MATLAB es muy intuitivo y fácil de usar.

2.) Real-Time habilidades

Es muy importante que mi elección sea capaz de soportar la adquisición en tiempo real de los datos de vídeo de una cámara externa. Encontré este enlace para MATLAB que muestra cómo hacerlo. Estoy seguro de que lo mismo sería posible para Python, tal vez usando la biblioteca OpenCV.

3.) Rendimiento

he oído, aunque nunca utilizado, que MATLAB puede dividir fácilmente cálculos independientes a través de multiple cores. Debería pensar que esto sería muy útil, y no estoy seguro de si lo mismo es igualmente simple para Numpy.

4.) Precio

Sé que hay un costo asociado con MATLAB, pero voy a trabajar en una universidad y por lo tanto tendrán acceso a la plena MATLAB sin ningún costo para mí, así que el precio no es una factor.

Agradecería cualquier aportación de cualquier persona que haya hecho algo similar y cuál fue su experiencia. Gracias!

+2

En términos de empleabilidad posterior a la graduación, creo que Matlab es una opción mucho mejor si tiene la intención de ejercer la ingeniería. –

+2

Creo que eso depende mucho de dónde trabaje. Es mejor saber ambos. – Benjamin

Respuesta

7

Python (con NumPy, SciPy y MatPlotLib) es el nuevo Matlab. Así que recomiendo encarecidamente Python sobre Matlab.

Hice el cambio hace más de un año y estoy muy contento con los resultados.

Aquí es una breve lista de Pro/acondicionado para Python y Matlab

pros Python:

  • Orientada a Objetos
  • fácil de escribir grandes y programas "reales"
  • Open Source (así que es completamente gratis)
  • Rápido (la mayoría de los algoritmos de cálculo pesados ​​tienen un contenedor de Python para conectarse con bibliotecas C, por ejemplo, NumPy, SciPy, SciKits, libSVM, libLINEAR)
  • Ambiente confortable, altamente configurable (iPython, módulo de python para VIM, ...)
  • Comunidad de rápido crecimiento de usuarios de Python. Toneladas de documentación y personas dispuestas a ayudar a
  • contras

Python:

  • Podría ser un dolor de instalar (especialmente algunos módulos en OS X)
  • manipulación trama no es tan bonito/fácil como en Matlab, especialmente los gráficos 3D o animaciones
  • es todavía un lenguaje de script, por lo que sólo lo utilizan para (rápido) de prototipos
  • Python no está diseñado para la programación multinúcleo
pros

Matlab:

  • Muy fácil de instalar
  • cajas de herramientas potentes (por ejemplo,Procesamiento de señales, la biología de sistemas)
  • documentación unificada, y el apoyo personalizado, siempre y cuando usted compra la licencia
  • fácil tener animaciones de la trama y gráficos interactivos (que me parece realmente útil para los experimentos en ejecución)

contras de Matlab :

  • No libre (y caro)
  • Basado en Java + X11, que se ve muy feo (bueno, acepto que estoy totalmente sesgado aquí)
  • programas grandes y extensibles difícil escribir
  • Una gran cantidad de usuarios de MATLAB están cambiando a Python :)
+3

Gracias! Hablé con algunas personas más hoy, y parece que iré con Python. – casper

+0

Me alegra oír eso. ¡Feliz programación! –

5
  1. Si tiene experiencia con ambos idiomas, no es realmente un criterio de decisión.

  2. Matlab tiene problemas para hacer frente a la configuración en tiempo real, especialmente porque la mayoría de los algoritmos de visión por computadora son muy costosos. Esta es la ventaja de utilizar una biblioteca probada como OpenCV, donde muchos de los algoritmos que utilizará se implementan de manera eficiente. Matlab ofrece la posibilidad de compilar código en Mex-files, pero eso es mucho trabajo.

  3. Matlab tiene paralelo para los bucles parfor que hace que el procesamiento de multinúcleos sea fácil (o al menos más fácil). Pero la pregunta es si eso será suficiente para obtener velocidades en tiempo real.

  4. Sin comentarios.

  5. La principal ventaja de Matlab es que obtendrá un programa en ejecución muy rápidamente debido a su buena documentación. Pero Encontré que la reutilización del código es mala con Matlab a menos que le pongas mucho énfasis.

creo que la decisión final tiene que ser si usted tiene que/puede ejecutar su algoritmo en tiempo real que dudo en Matlab, pero eso depende de los métodos que está planeando utilizar.

+0

¡Gracias por tu aportación! Pero, ¿a qué te refieres cuando dices que la reutilización del código es mala con Matlab? ¿Por que es esto entonces? – casper

+2

Muchas personas tienden a usar secuencias de comandos demasiado, lo que en mi opinión hace que sea extremadamente difícil volver a utilizar dicho código debido a colisiones de nombres y dependencias. También es difícil hacer cumplir las estructuras de datos (por ejemplo, datos de entrada) lo que significa que la mayoría de los usuarios tendrán que averiguar cómo deben estructurar los datos de entrada (¿es un vector de fila o columna? Etc ...). No digo que sea imposible reutilizar el buen código de Matlab, pero hay muchos códigos incorrectos y las personas tienden a no pensar en la reutilización cuando codifican. – denahiro

7

Recomendaría python.

Cambié de MATLAB -> python aproximadamente 1/2 camino a través de mi phd, y no me arrepiento. En la forma más simplista, Python es un lenguaje mucho más agradable, tiene objetos reales, etc.

Si esperas hacer alguna parte de tu código en c/C++, definitivamente recomendaría python. La interfaz de mex funciona, pero si su compilación se vuelve complicada/grande, comienza a ser un problema y nunca resolví cómo depurarla efectivamente. También tuve una gran dificultad con Mex + asignando bloques grandes interactuando con la gestión de memoria de matlab (mi incapacidad para solucionar ese problema fue lo que me impulsó a cambiar).

Como una nota/auto promoción, tengo Crocker-Grier en c++ (con envoltorios swig) y puro python.

4

Otros han hecho un montón de grandes comentarios (He opiné sobre este tema antes en otra respuesta https://stackoverflow.com/a/5065585/392949), pero solo quería señalar que Python tiene una serie de herramientas realmente excelentes para el trabajo de cómputo paralelo/división en múltiples núcleos. He aquí una breve y de ninguna manera amplia lista:

También es probable encontrar Cython a ser mucho para ser una herramienta muy superior en comparación con lo Matlab tiene que ofrecer si alguna vez necesita interconectar bibliotecas C externas o escribir C-extensions, y tiene soporte numpy excelente incorporado.

Hay una lista con muchas otras opciones aquí: http://wiki.python.org/moin/ParallelProcessing