¿Qué es mejor para un procesamiento de imágenes más eficiente y rápido, MATLAB, OpenCV u Octave?

Facilidad de uso
Matlab es un lenguaje relativamente fácil de manejar. Matlab es un lenguaje de secuencias de comandos de alto nivel, lo que significa que no tiene que preocuparse por las bibliotecas, declarar variables, gestión de memoria u otros problemas de programación de nivel inferior. Como tal, puede ser muy fácil crear un código para crear un prototipo de su idea de procesamiento de imágenes. Digamos, por ejemplo, que quiero leer una imagen del archivo y mostrarla. En Matlab, crearía un nuevo archivo de matlab llamado test.m y en él escribiría esto como:

I = imread (‘springbreak.jpg’);
mostrar (I)

Fácil, verdad? Ahora, si quisiera hacer lo mismo con OpenCV, crearía un archivo test.c y (si lo escribiera en c) se vería así:

#include “cv.h” // encabezado principal de OpenCV
#include “highgui.h” // encabezado GUI

int main () {

// declara un nuevo puntero IplImage
IplImage * myimage;

// cargar una imagen
myimage = cvLoadImage (“springbreak.jpg”, 1); // cambia el nombre del archivo a tu propia imagen

// crea una nueva ventana y muestra la imagen
cvNamedWindow (“Sonrisa”, 1);
cvShowImage (“Sonrisa”, mi imagen);

// espera a que la llave cierre la ventana
cvWaitKey (0);
cvDestroyWindow (“Sonrisa”);
cvReleaseImage (& myimage);
devuelve 0;
}

Woha De acuerdo, podríamos salir con un poco menos de líneas de lo que mostramos aquí, pero todavía hay muchas más líneas de código para hacer lo mismo que en Matlab. Gran parte de estas líneas adicionales consisten en un “código de limpieza” que se convertirá en una segunda naturaleza para que escriba, ya que es muy similar entre todos los proyectos. Sin embargo, esto significa que OpenCV tiene una curva de aprendizaje más alta.
Índice de barba del cuello:
Matlab 9/10
OpenCV 3/10
-Matlab es un lenguaje mucho más fácil de manejar.

Velocidad
Matlab es un lenguaje de secuencias de comandos de alto nivel, lo que significa que no tiene que preocuparse por la administración de memoria u otros problemas de programación de bajo nivel. Sin embargo, esto se debe al hecho de que Matlab se basa en Java y Java se basa en C. Entonces, cuando ejecuta un programa de Matlab, su computadora está ocupada tratando de interpretar todo ese código de Matlab. Luego lo convierte en Java, y finalmente ejecuta el código.
OpenCV es básicamente una biblioteca de funciones escritas en C. Usted está más cerca de proporcionar directamente el código de lenguaje de máquina a la computadora para que se ejecute. Entonces, en última instancia, obtiene más procesamiento de imágenes para los ciclos de procesamiento de sus computadoras, y no más interpretación. Como resultado de esto, los programas escritos en OpenCV se ejecutan mucho más rápido que los programas similares escritos en Matlab. Por ejemplo, podríamos escribir un pequeño programa para detectar sonrisas en una secuencia de cuadros de video. En Matlab, típicamente obtendríamos 3-4 cuadros analizados por segundo. En OpenCV, obtendríamos al menos 30 fps, lo que daría como resultado una detección en tiempo real. Esto hace que OpenCV sea mucho mejor en la demostración de programas prototipo utilizando una PC estándar y una cámara web, por ejemplo.
Índice de barba del cuello:
Matlab 2/10
OpenCV 9/10
-La velocidad de OpenCV limpia el piso con Matlab, y hace que sus demostraciones de video en tiempo real sean más impresionantes para presumir ante sus compañeros.

Recursos necesitados
Estrechamente relacionado con la velocidad, los recursos utilizados por ambos entornos de programación deben considerarse. El procesamiento de imágenes y videos en su naturaleza puede requerir muchos recursos debido a la cantidad de píxeles en cada imagen. Sin embargo, hay una gran brecha en la escala de recursos entre Matlab vs OpenCV. Debido a la naturaleza de alto nivel de Matlab, es un cerdo de recursos. Hemos tenido un código de Matlab que ha requerido más de un concierto de RAM para ejecutar el video. En comparación, nuestros programas OpenCV típicos solo requieren ~ 70mb de RAM para ejecutarse en tiempo real (suponiendo que su código no tenga “fugas”, consulte “Administración de memoria” a continuación). Del mismo modo, una instalación completa de Matlab más todas las cajas de herramientas ocupará un par de conciertos en su computadora. En comparación, OpenCV solo requiere un concierto como máximo.
Índice de barba del cuello:
Matlab 4/10
OpenCV 9/10
-OpenCV se ejecutará felizmente en su vieja PC de escritorio. Matlab podría ser una buena excusa para comprar esa nueva PC.

Costo
El precio de lista para la base (sin cajas de herramientas) MATLAB (licencia comercial, de usuario único) es de alrededor de € 1500 euros (1,20,000 INR). OpenCV (licencia BSD) es gratis.
Nuff ‘dijo.
Índice de barba del cuello:
Matlab 4/10
OpenCV 10/10
-No obtendrás mucho mejor que gratis.

Entorno de desarrollo
Matlab viene con su propio entorno de desarrollo, que se muestra a continuación.
Como el entorno de desarrollo de Matlab se basa en Java, Mathworks ha realizado versiones de su IDE (entorno de desarrollo integrado) para Windows, Linux y OSX. Como tal, cuando instala Matlab, esencialmente está instalando el entorno de programación y el IDE también. Hemos encontrado que el entorno de desarrollo de Matlab en Windows y Ubuntu es un asunto muy bien diseñado. Sin embargo, en Apple OSX, puede ser algo incómodo de usar debido a su soporte no nativo de cacao y al uso de X11 en su lugar.
Para OpenCV, no hay ningún IDE particular que deba usar. En cambio, puede elegir cualquier IDE de programación en C dependiendo de si está utilizando Windows, Linux u OS X. Para Windows, Microsoft Visual Studio o NetBeans es el IDE típico utilizado para OpenCV. En Linux, su Eclipse o NetBeans, y en OSX, utilizamos Apples Xcode (que se muestra a continuación).
Para instalar OpenCV con su IDE de elección en una plataforma en particular, deberá seguir una guía de diversa complejidad. Estamos contentos con el uso de varios IDEs para OpenCV, pero debido al IDE exclusivo de Mathworks para Matlab y su capacidad multiplataforma, Matlab envía OpenCV a la publicación aquí.
Índice de barba del cuello:
Matlab 8/10
OpenCV 6/10
– Ya sea Netbeans o Eclipse o Visual Studio, muchos desarrolladores tienen su IDE favorito para OpenCV. Sin embargo, debido a su exclusividad para el lenguaje de programación Matlab y, por lo tanto, a la falta de complejidad para configurarlo, el IDE de Mathworks gana aquí.

Gestión de la memoria
OpenCV se basa en C. Como tal, cada vez que asignes un fragmento de memoria tendrás que liberarlo nuevamente. Si tiene un bucle en su código donde asigna un trozo de memoria en ese bucle y olvida liberarlo después, obtendrá lo que se llama una “fuga”. Aquí es donde el programa usará una cantidad creciente de memoria hasta que se bloquee sin memoria restante. Debido a la naturaleza de alto nivel de Matlab, es lo suficientemente “inteligente” como para asignar y liberar memoria automáticamente en segundo plano. Hemos encontrado que la administración de memoria de Matlabs es bastante buena, lo que se demuestra por el hecho de que hemos ejecutado programas de análisis de video durante días y solo hemos tenido un pequeño aumento en la huella de memoria general. Aunque la huella de memoria general de OpenCV es muy pequeña para empezar, en comparación, cuando tiene una pérdida de memoria, puede escalar a una gran cantidad, lo que resulta en mucho esfuerzo al tratar de rastrearlo.
Índice de barba del cuello:
Matlab 9/10
OpenCV 4/10
-La gestión de memoria de Matlab es bastante buena. A menos que tenga cuidado con su asignación y liberación de memoria OpenCV, aún puede sentirse frustrado más allá de lo imaginable.

Portabilidad
Tanto Matlab como el entorno de desarrollo OpenCV se pueden instalar y ejecutar en Linux, Windows y OS X. En nuestra experiencia, hemos tenido pocos problemas con los programas OpenCV y Matlab desarrollados en una plataforma y ejecutándolos en otra plataforma. En algunos casos, los encabezados pueden tener que cambiarse en OpenCV, o pueden usarse diferentes códecs para leer y escribir videos en Matlab. Para la ventaja de OpenCV, los puertos se han escrito para muchas plataformas adicionales: aquí en Fixational hemos tenido OpenCV ejecutándose en todo, desde The Cloud (instancias de Amazon EC2) hasta dispositivos integrados como iPod de Apple. Esto reduce la barrera de una etapa de creación de prototipos de programas a la etapa final de incrustarlo en un dispositivo para aplicaciones de video en tiempo real.
Índice de barba del cuello:
Matlab 3/10
OpenCV 8/10
-Si puede ejecutar C, hay muchas posibilidades de que ejecute OpenCV.

Desarrollo de habilidades útiles de programación.
Tanto Matlab como OpenCV son excelentes lenguajes de programación para desarrollar habilidades de procesamiento de imágenes. Sin embargo, como OpenCV está escrito en C, es una excelente manera de desarrollar simultáneamente habilidades de programación en C. Esto puede ser bueno si necesita desarrollar programas en C para otras aplicaciones, o incluso como un buen punto de partida si desea aprender Java o C ++, por ejemplo. Como los programas OpenCV se pueden escribir utilizando los IDE comunes, como Netbeans, Xcode o Eclipse, también es una excelente manera de familiarizarse con ellos para otras aplicaciones de programación que comparten los mismos IDE.
Índice de barba del cuello:
Matlab 3/10
OpenCV 8/10
-Aunque hay una curva de aprendizaje alta con el aprendizaje de OpenCV en comparación con Matlab, las habilidades aprendidas en OpenCV pueden ser más útiles.

Depuración
Muchas de las operaciones de depuración estándar se pueden usar tanto con Matlab como con OpenCV: se pueden agregar puntos de interrupción al código, se puede pasar por la ejecución de líneas, se pueden ver valores variables durante la ejecución del código, etc. Sin embargo, Matlab ofrece una serie de depuración adicional opciones sobre OpenCV. Una gran característica es que si necesita ver rápidamente la salida de una línea de código, se puede omitir el punto y coma al final. Además, como Matlab es un lenguaje de secuencias de comandos, cuando la ejecución se detiene en una línea en particular, el usuario puede escribir y ejecutar sus propias líneas de código sobre la marcha y ver el resultado resultante sin tener que volver a compilar y vincular nuevamente. A esto se suman las poderosas funciones de Matlabs para mostrar datos e imágenes, lo que hace que Matlab sea nuestra elección para el entorno de desarrollo más fácil para la depuración de código.
Índice de barba del cuello:
Matlab 9/10
OpenCV 5/10
-Como Matlab es un lenguaje de script, ofrece muchas características de depuración adicionales sobre OpenCV.

Ayuda y código de muestra
Matlab presenta una sección de ayuda muy concisa e informativa en su IDE. Aquí se describe cada función y su uso, junto con algunos códigos de muestra que demuestran su uso. Las funciones estándar de procesamiento de imágenes están disponibles junto con varios de los métodos de procesamiento de imágenes más nuevos incluidos en las diversas cajas de herramientas. Algunas funciones adicionales y programas de muestra están disponibles en los blogs en línea, y la mayoría reside en el sitio web de Mathworks “Matlab Central”. Como ha pagado por el software, también es útil contar con un representante de Mathworks en el teléfono para llamar por ayuda cuando haya problemas con el software.
Para descubrir qué funciones hacen qué en OpenCV, se requiere una búsqueda en línea no tan fácil de usar para obtener la información necesaria. Sin embargo, un gran beneficio para OpenCV es la gran cantidad de código de muestra disponible en línea. Cuando se desarrolla un nuevo método de procesamiento de imágenes, no pasa mucho tiempo antes de que alguien en algún lugar haga que una implementación en OpenCV esté disponible en línea para descargar.
Índice de barba del cuello:
Matlab 8/10
OpenCV 9/10
-Matlab tiene una gran sección de ayuda en su IDE. Sin embargo, OpenCV tiene una mayor cantidad de funciones de procesamiento de imágenes disponibles en línea.

Conclusión
De los puntajes finales podemos ver que OpenCV tiene la ventaja sobre Matlab para el desarrollo de procesamiento de imagen y video. Aunque Matlab tiene una curva de aprendizaje fácil, gestión de memoria integrada, una gran sección de ayuda, es muy lento para ejecutar el código y es costoso para comenzar. Si bien OpenCV puede ser difícil de depurar y requiere mucho “código de tareas domésticas” necesario para gestión de memoria, archivos de encabezado, etc., gana debido a su costo gratuito, la magnitud del código de muestra disponible en Internet, la corta ruta de desarrollo desde el código prototipo hasta el código incrustado, las habilidades de programación útiles aprendidas de su uso y su velocidad súper rápida Matlab es un lenguaje de programación más “genérico” ya que fue diseñado para muchos usos, demostrado por sus numerosas cajas de herramientas que van desde herramientas financieras hasta especializadas en análisis de ADN. Por otro lado, OpenCV fue hecho para el procesamiento de imágenes. Cada función y estructura de datos se diseñó teniendo en cuenta el codificador de procesamiento de imágenes.
Como tal, si es nuevo en el área completa de procesamiento de imágenes y videos o está buscando hacer un cambio en su entorno de programación, le recomendamos que comience en OpenCV.

Hay dos etapas para cualquier proyecto de procesamiento de imágenes. Primero, la fase de creación de prototipos, donde encontramos el algoritmo que cumple con nuestros requisitos de calidad de imagen y, en segundo lugar, la fase de optimización y comercialización, donde está más preocupado por el consumo de recursos de este algoritmo en términos de memoria, ciclos de CPU, potencia … etc. .

MATLAB está destinado para el primero y OpenCV es para el segundo. Ahora que llegamos a nuestra pregunta, primero debemos entender el propósito del proyecto. ¿Vamos a concluir en la primera fase o también lo vamos a comercializar? En mi opinión, OpenCV es el camino a seguir, ya que ayuda en ambas fases. Durante la fase de creación de prototipos, es posible que desee ver las imágenes desde múltiples puntos de vista y requiera cierta manipulación y visualización de datos. Python con OpenCV ayuda con ese propósito. Y puede haber una transición sin problemas a la fase dos una vez que haya terminado con la fase uno: creación de prototipos con un resultado satisfactorio.

Últimamente he estado usando python a través de ipython, esto es muy similar a MATLAB y la interfaz web y las herramientas de trazado disponibles me hacen olvidar MATLAB por completo. Las diferencias de Api entre las llamadas a Python y C ++ definitivamente están ahí. Pero, al considerar la optimización y comercialización de cualquier característica, es de esperar. Sin embargo, el rendimiento de una función en términos de calidad de imagen sería el mismo si se llama a una función OpenCV desde python o C ++

Puede descargar ipython desde la siguiente página web:

Jupyter y el futuro de IPython

Configurar OpenCV con ipython ha sido muy fácil cuando lo hice en mi PC con Linux. Sin embargo, no estoy seguro de lo fácil que sería en Windows. Las instrucciones deberían ser fáciles de encontrar en Internet. Avíseme si necesita ayuda con eso también. Intentará publicar una actualización.

He leído el mejor eslogan para proyectos de código abierto, dice “Hable abiertamente, desarrolle abiertamente … para todas las empresas dedicadas al código abierto”. Ahora pasemos al tema que es mejor para el procesamiento de imágenes,

  • Si eres un principiante en el procesamiento de imágenes, entonces Matlab puede ser un buen lugar para comenzar.
  • Y si tiene experiencia y todavía está trabajando en Matlab, le sugiero que pruebe con Opencv.

Pero sí, hay ventajas y desventajas de usar Matlab y Opencv, pero después de trabajar en Computer Vision durante 5 años; Definitivamente puedo decir que Opencv es mucho mejor para desarrolladores e investigadores en este campo. La caja de herramientas de procesamiento de imágenes y visión por computadora de Matlab está muy bien equipada con muchas funciones incorporadas, mientras que en el otro lado de Opencv necesita escribir funciones para todas y cada una de las operaciones. La mejor parte es que escribir nuestra propia función le da una idea de lo que un núcleo o un operador va a hacer con su imagen que nunca sentirá mientras trabaja en Matlab.

Otro problema con Matlab es la forma en que maneja el número de coma flotante. Para el mismo algoritmo en Matlab, recibí un error el doble de lo que obtuve después de implementar el mismo algoritmo para las mismas imágenes en C ++ usando Opencv.

Por lo tanto, es su decisión decidir qué usar durante el desarrollo, si es solo un POC pequeño, entonces Matlab es una gran opción; de lo contrario, si busca una investigación completa, Opencv le ofrece opciones y parámetros mucho mejores para ajustar.

Depende de lo que quieras hacer es la respuesta de salida. Hay algunos casos en los que uno puede hacer algo que el otro no puede hacer, o donde uno puede superar al otro en términos de rendimiento, pero son muy similares. De hecho, aunque no puedo recordar qué función era, hace uno o dos años un representante de MATLAB me dijo que realmente habían conectado algunas funciones de OpenCV para aumentar su funcionalidad.

Dicho esto, OpenCV es gratis. Lo cual es genial. Además, para contrarrestar el punto de Rajagopalan Sundaresan, puede usar los enlaces de Python para OpenCV para la creación de prototipos y luego construir en C ++ más tarde.

Use MATLAB para crear un prototipo de su algoritmo
Verificar rendimiento
Si no es satisfactorio, optimice los siguientes consejos genéricos de rendimiento para MATLAB
Si aún no es satisfactorio, intente usar opencv
Tenga en cuenta que escribir opencv requerirá mucho más tiempo y cuidado que los algoritmos de procesamiento de imágenes ya probados que ya están integrados en MATLAB.

No use octava si el rendimiento es importante, a menos que sea difícil acceder a MATLAB

No estoy seguro acerca de Octave, pero puedo darte una comparación entre Matlab y Opencv.

Matlab y OpenCV:
Ambos son muy buenos, pero depende de cuál sea su campo de trabajo. Elegir entre Matlab u OpenCV depende de sus antecedentes de programación. Si no le gusta bajar al nivel de programación python o C ++, le recomendaría Matlab, y viceversa.
Si busca detección de rostros, detección de características, detección de objetos básicos, recomendaría OpenCV porque es de código abierto.

Según la descripción, se siente cómodo con la sintaxis de C, pero OpenCV tiene un buen soporte con C ++, si está listo para aprender C ++, puede probar OpenCV.

PD. Estoy trabajando en OpenCV durante los últimos 1-2 años.

Para mejorar su algoritmo, matlab proporciona todas las funciones listas para usar y fáciles de usar con herramientas fáciles de visualizar. Lo mismo se puede lograr con openCV con poco esfuerzo.

Para probar sus algoritmos en un gran conjunto de imágenes de prueba, MATLAB las ejecuta muy lentamente, mientras que OpenCV puede procesarlas en tiempo real.

Matlab es un ganador indiscutible.
1: Viene con funciones integradas como activecontour () y muchas otras funciones incorporadas como cuenca, etc.
2: No sé cómo, pero matlab multiplica dos matrices con una velocidad sorprendente, por muy grandes que sean, lo que es útil en imágenes basadas en la intensidad.
3: MATLAB es extremadamente útil en el procesamiento de imágenes médicas en lo que respecta a las imágenes DICOM.
4: MATLAB acelera el cálculo utilizando algoritmos de procesamiento en paralelo.
5: También puede convertir una pila de imágenes en 3D sin ningún software de renderizado externo.
6: Y por último, puede convertir un código MATLAB en .exe .java .c y muchos otros formatos de una sola vez.
Son muchas otras ventajas las mencionadas anteriormente son las que he encontrado.

En realidad depende. Si te refieres a mejor por, cuál te hará correr más rápido, entonces obviamente MATLAB es la opción. Pero si el punto es cuál hará que su programa se ejecute más rápido, entonces OpenCV gana sin dudas. Mi recomendación personal es OpenCV con su interfaz python.

Si necesita un procesamiento rápido de imágenes, OpenCV supera a MATLAB y Octave. Esto se debe a que la biblioteca OpenCV está construida con C / C ++, mientras que MATLAB y Octave tienen muchos contenedores que consumen tiempo de procesamiento.

Comparando MATLAB y Octave, he encontrado que el primero es más rápido en términos de procesamiento. También MATLAB tiene muchas funcionalidades en comparación con Octave

O puede usar ambos, no es necesariamente una opción de “uno u otro”.
Detección de objetos OpenCV Viola & Jones en MATLAB

por supuesto, Open CV es la mejor herramienta para el procesamiento de imágenes. porque Open CV tiene una biblioteca especializada para visión por computadora y aquí podemos escribir directamente un código en C y C ++ y luego podemos convertirlo a un archivo .exe. Por eso lo considero mejor que MATLAB. Si desea saber más sobre el procesamiento de imágenes, lea el artículo a continuación.
¿Qué es una imagen y procesamiento de imágenes?

Cualquiera de los dos está bien asumiendo que eres un novato.

Sin embargo, si no se siente cómodo programando en C ++, Matlab es una mejor opción.

PD: Hay una versión de Python de OpenCV. Pero no soy consciente de su facilidad.

Si desea aprender el procesamiento de imágenes solo por proyectos pequeños, elija matlab, de lo contrario, opencv con python es la mejor manera de hacerlo

La velocidad de opencv es mucho mayor que la de matlab

Opencv es lo mejor para el procesamiento de imágenes, ya que te ofrece una amplia gama de herramientas, úsalas en Python y luego funciona de maravilla. Créeme, aprende opencv

Ambos son buenos. Pero si está manejando grandes conjuntos de imágenes, OpenCV funciona bien. La mayoría de las veces, Matlab se bloqueaba o sería muy lento cuando trabajamos con una gran cantidad de imágenes.

A la mierda MATLAB !!!

Octave es mejor, porque en el compilador en línea matlab no permite que otros trabajen en quienes no trajeron su producto. Por otro lado, la octava es mucho mejor que matlab, brinda a los usuarios externos la libertad de usar su software. Ir a la interfaz gratuita compatible con MATLAB