domingo, 9 de diciembre de 2012

Multiplicación de Matrices en Wolfram Alpha

Esta será una entrada breve, pero estoy casi seguro que sera de gran utilidad para alguien en el mundo.
Wolfram Alpha (http://www.wolframalpha.com) es un potente buscador de información, que al mismo tiempo es una útil herramienta matemática.

Como ejemplo de ello, realizaremos el cálculo de la multiplicación de 2 matrices, para ello debemos saber:

1. Como introducir una matriz
2. Como especificar la operación, producto matricial.

Introducir una matriz en WA (Wolfram Alpha).

La sintaxis para introducir una matriz es sencilla, para ello se sigue el siguiente esquema:

Dada una matriz de 2 dimensiones:
A = [1, 1]
       [1, 1]

Su correspondiente sintaxis en WA es: {{1,1},{1,1}} produciendo la siguiente salida:

Si se requiriera capturar una matriz de 3 x 3, la sintaxis sería de la siguiente manera:

{{1,2,3},{4,5,6},{7,8,9}}

Lo cual produciría la siguiente salida:



Observando lo anterior podemos deducir que para iniciar una matriz debemos abrir y cerrar llaves:

{}

Dentro de las llaves por cada fila en la matriz se introduce nuevas llaves separadas por comas:

{{},{},{}}

Dentro de cada llave que representa las filas se introducen los datos de cada columna separados por comas:

{{2,4,5},{3,6,8},{3,4,8}}

De esta manera el usuario puede introducir cualquier tipo de matriz.

Producto Matricial (http://en.wikipedia.org/wiki/Matrix_multiplication)

Para producir el producto matricial, basta con colocar entre dos matrices un punto, el cual simboliza la operación de multiplicación, a continuación un ejemplo:


Espero que esta información les sea de utilidad, Hasta pronto y gracias por su atención.

martes, 9 de octubre de 2012

OpenCV #1: Configuración de OpenCV en Visual Studio 2010

Antes de poder empezar con el mundo de la visión con OpenCV es necesario realizar un par de configuraciones en el IDE de tu preferencia, en esta entrada describiré los pasos que hay que seguir para realizar la configuración de OpenCV 2.4.0 sobre "Visual Studio 2010 professional edition", utilizare para este propósito un OS Windows 7 de 64 bits. A pesar de que el  OS es de 64 bits, en el ejemplo emplearé librerías de 32 bits las cuales pueden ser usadas sin problemas en sistemas de 64 bits.

Paso 1. Descargar la ultima versión de OpenCV

Para realizar este paso es necesario entrar a la página de repositorios de código de OpenCV, la sección de descargas para Windows es la que nos interesa, la puedes encontrar en el siguente Link: http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

Esta es una vista de la página de descargas:


Como puedes observar tenemos disponibles todas las versiones publicadas hasta la fecha desde la 1.0 hasta la mas reciente. Hacer clic en la versión 2.4.0, descargar la que tiene por nombre "OpenCV-2.4.0.exe".

Una vez descargado el ejecutable, realizar la instalación la cual solo descomprimirá los archivos fuente de OpenCv.

Como sugerencia, colocar la carpeta en el directorio Raíz y renombrarlo como "OpenCV2.4.0".

Paso 2. Configuración de Sistema Operativo

Agregar al la variable de entorno PATH del sistema operativo las rutas de los binarios de OpenCV, sugiero para este caso utilizar el software "Path Editor" el cual es gratuito y dispone de una interfaz gráfica que facilita la administración de la variable PATH.




Los directorios que deberán ser agregados al PATH son:
  1. C:\OpenCV2.4.0\opencv\build\x86\vc10\bin
  2. C:\OpenCV2.4.0\opencv\build\common\tbb\ia32\vc10

Consideraciones Importantes para le directorio bin:
  • Usar x86 cuando se crearán proyectos para arquitecturas de 32 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
  • Usar x64 cuando se crearán proyectos para arquitecturas de 64 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
Consideraciones Importantes para le directorio tbb:
  • Usar ia32 cuando se crearán proyectos para arquitecturas de 32 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
  • Usar intel64 cuando se crearán proyectos para arquitecturas de 64 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010.


Paso 3. Crear el proyecto

Una vez que se han realizado las configuraciones correspondientes, el siguiente paso será crear un proyecto de VS2010.

  • Hacer clic en "file->New->Project".
  • Seleccionar como lenguaje "C++"
  • Utilizar la plantilla "Win32 Console Application"
  • Seleccionar en la parte inferior la localización de donde se situará el proyecto "Location"
  • Establecer el nombre del proyecto en "Name".
  • En la ventana de bienvenida hacer clic en "Next".


  • Seleccionar las opciones "Console Application" y "Empty Project" y hacer clic en "finish".


Paso 4. Configuración al proyecto

Hacer clic secundario en el nombre del proyecto (No de la solución), en el menú contextual seleccionar "properties", en la ventana seleccionar de lado izquierdo "Configuration Properties->VC++Directories", en esta sección incluiremos los directorios necesarios para poder trabajar con OpenCv, dichos directorios son:
  1. C:\OpenCV2.4.0\opencv\build\include este estará incluido en la sección "Include Directories"
  2. C:\OpenCV2.4.0\opencv\build\x86\vc10\lib este estará incluido en la sección "Library Directories"

En esta parte es muy importante tener en cuenta las siguiente consideraciones:

Dentro del directorio de OpenCV encontramos los siguientes subdirectorios:
  • 3rdparty
  • android
  • apps
  • build
  • cmake
  • data
  • doc
  • include
  • ios
  • modules
  • samples
Los directorios "include" y "lib" que se va a usar en el proyecto de VS2010 (Visual Studio 2010) son los que están localizados dentro de "build".

Con respecto a "lib" debemos tener en cuenta las siguientes consideraciones:
  • Usar x86 cuando se crearán proyectos para arquitecturas de 32 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010
  • Usar x64 cuando se crearán proyectos para arquitecturas de 64 bits.
    • Utiliza vc9 para Vs2008
    • Utilziar vc10 para Vs2010


Paso 5. Crear código de ejemplo.

Hacer clic secundario sobre la carpeta "Source Files" del "Solution Explorer", y agregar un archivo del tipo "cpp" llamado "main_helloFrame".

Agregar el siguiente código:


 //Main header  
 #include "main_hog.h"  
 //Main Programm  
 void main()  
 {  
      Mat image = imread("C:/Users/RivalcobaDev/Pictures/pedestrian/pixelHand.jpg");  
      namedWindow("Output");  
      imshow("Output",image);  
      cout << "End of porcessing!!" << endl;  
      waitKey(0);  
 }  

Tener cuidado en la línea que utiliza la función "imread", escribir una dirección válida de una imagen en tu CPU, observe que las diagonales son en sentido contrario a las que usa el sistema operativo normalmente para declarar rutas de archivos, esta es una regla que se deberá seguir siempre que se desee declarar rutas de archivos.

Note que en la parte superior hay un "header", el cual definiremos a continuación.

Hacer clic secundario sobre la carpeta "Header Files" del "Solution Explorer", seleccionar la opción "Add->New item" y agregar un archivo de tipo ".h" con el nombre "main_helloFrame".

Agregar los enlaces (links) a las librerias de OpenCv:


 #ifndef MAIN_HOG  
 #define MAIN_HOG  
 //OpenCV Linkers  
 #pragma comment(lib, "opencv_core240d.lib")  
 #pragma comment(lib, "opencv_highgui240d.lib")  
 #pragma comment(lib, "opencv_imgproc240d.lib")  
 #pragma comment(lib, "opencv_features2d240d.lib")  
 #pragma comment(lib, "opencv_calib3d240d.lib")  
 #pragma comment(lib, "opencv_objdetect240d.lib")  
 #pragma comment(lib, "opencv_gpu240d.lib")  
 #pragma comment(lib, "opencv_video240d.lib")  
 //OpenCv sources codes  
 #include <opencv2\highgui\highgui.hpp>  
 #include <opencv2\core\core.hpp>  
 //Cpp headers  
 #include<iostream>  
 //name Spaces  
 using namespace std;  
 using namespace cv;  
 #endif  

En primer lugar utilizamos unas directivas de compilador que nos permitirán definir un bloque de código que será creado con la condición de no estar definido anteriormente, en C++ siempre que se estén creando "headers" es muy recomendable englobar todo el código del "Header" mediante esta directiva.

Seguido de eso, encontramos otras directivas del compilador llamadas "Pragma", estas son indispensables para linkear el proyecto con los archivos ".lib" de openCv, sin los cuales sería imposible compilar el proyecto.

Posteriormente tenemos los "inlcudes", en los cuales incluimos las definiciones de los módulos de OpenCV que utilizaremos en el proyecto, los mas importantes son "core.hpp" y "highgui.hpp".

Terminamos con los espacios de nombres donde estan origanizadas las funciones estándar de C++ (std) y OpenCv (cv).

El "Solution Explorer" debiera verse así:




Compilar y Ejecutar con la función F5 y si todo se ha realizado correctamente el programa lee la imagen del directorio y la muestra en una ventana. Para cerrar el programa presionar cualquier tecla.