Seguidores

Archivo del blog

martes, 24 de noviembre de 2009

VISION ARTIFICIAL

Esteban Rojas 
Ivan Dario Gallego


Introducción
La vision es un proceso de tratamiento de información que permite obtener una descripción simbólica a partir del mundo real.


Definicion:
La visión artificial es la ciencia que estudia, utilizando computadores digitales, los procesos de obtención, caracterización e interpretación de la información procedentes de imágenes tomadas de un mundo tridimensional.
La visión artificial en último término tiene como finalidad la reproducción del sentido de la vista. 

NECESIDAD DE VER "ARTIFICIALMENTE“ 

Al igual que le sucede al hombre, el sentido de la vista es de gran importancia para las máquinas.
Las máquinas necesitan "ver" para realizar operaciones análogas (ensamblar, moverse, inspeccionar, etc.) a las que efectúan los humanos.


El sentido de la vista es capaz de permitir a las máquinas adquirir información y aprender de su entorno 

¿Porque Visión Artificial?
Aunque versátil, es compleja debido a que la mayoría de la información en las imágenes visuales esta codificada implícitamente y requiere ser procesada y analizada para hacerla explicita.


No obstante se enumeran algunas condiciones para su utilización:
·                    Seguridad
·                    Precisión
·                    Consistencia
·                    Calidad del producto
·                    Automatización flexible



¿Por qué un SVA?
“Una imagen tiene más información que mil palabras”
Muchos sistemas biológicos dependen de su sistema de visión (inspiración biológica)
En la actualidad, los ordenadores, cámaras y otros dispositivos son baratos y sus prestaciones aumentan.
El “mundo real” es 3D y dinámico

Las etapas en un SVA son:


·                    Adquisición de la imagen 
·                    Pre procesó 
·                    Segmentación 
·                    Representación y descripción 
·                    Reconocimiento e interpretación 

Elementos de un SVA: Problemas con la captura de imágenes 
La captura de imágenes no está exenta de problemas:

·   El más típico es el ruido que es información no deseada que contamina la imagen. 
·   Existen fundamentalmente 2 tipos de ruido: 
·   Ruido gausiano: produce pequeñas variaciones en la imagen 
·   Ruido impulsional (o Salt and Pepper): el valor del píxel  no tiene relación con el valor       ideal sino con el valor de ruido que toma valores muy altos.


Clases fundamentales de procesado de imágenes.
Podemos distinguir: 
·                    Realzado 
·                    Restauración 
·                    Compresión 
·                    Síntesis 
·                    Análisis 
·                    Aplicaciones
·                    Sistemas de inspección visual automática 
·                    Aplicaciones médicas 
·                    Reconocimiento biométrico 
·                    Análisis de terrenos (remote sensing images) 
·                    Robótica 
·                    Videovigilancia /Aplicaciones militares 
·                    Recuperación de imágenes por contenido (CBIR) 
·                    Domótica
 
 



 
 



PROCESAMIENTO DE IMAGEN CON MATLAB Esteban Rojas Castro

En este ejemplo veremos una sencilla aplicacion de matlab para el procesamiento de imagen.

Primero debemos cargar la i magen a matlab por medio del siguiente comando:

A=double(imread(NombreImagen,Formato));

Donde NombreImagen representa el nombre de la imagen con el path completo y
Formato representa el formato de la imagen. La función double se utiliza para poder
realizar operaciones con la matriz A que implican números decimales (hay ciertas
operaciones que no se pueden hacer con variables del tipo uint8 como lo son los niveles
de gris de las imágenes que utilizamos generalmente). El formato de imagen comúnmente
utilizado es el tif .
En el caso de imágenes en formato jpg, se debe hacer un paso más para obtener la imagen
en escala de grises (debido a la forma en que se almacena la imagen jpg).
Ejemplo:

A=double(imread('C:\MATLAB6p5\toolbox\images\imdemos\football.jpg','jpg'));
A=A(:,:,1);


Luego debemos visualizar la imagen para esto utilizamos el siguiente comando:

imshow(uint8(A))

Donde A es la matriz que representa la imagen y uint8 se utiliza para convertir los elementos
de A en enteros de 8 bits (256 niveles de gris). Si la imagen ya está en formato
uint8 no es necesario usar la función ‘uint8’.
Dado el caso que se quiera visualizar mas de una imagen se debe de utilizar el siguiente comando:

subplot(2,2,1);imshow(uint8(A))
subplot(2,2,2);imshow(uint8(B))
subplot(2,2,3);imshow(uint8(C))
subplot(2,2,4);imshow(uint8(D))


En este caso, se visualiza un arreglo de imágenes de 2x2. Lo mismo se puede hacer
para ver otro tipo de gráficos.

Luego en caso de que se desee ver la grafica de frecuencias de la imagen debemos aplicar la transformada de Fourier utilizando el siguiente comando:

Fa=fft2(A);

Esta función mapea las frecuencias altas en el centro del espectro mientras que las
frecuencias más bajas se encuentran en la periferia. Para colocar la frecuencia cero en el
centro del espectro se debe utilizar, además, la función fftshift de la siguiente forma:


Antitransformada discreta de Fourier en dos dimensiones

A=ifft2(Fa);

Debido a que Fa es una matriz compleja, al antitransformar pueden quedar ciertos residuos
de números imaginarios que se deben a la precisión limitada del cálculo. Esto hace
que la imagen resultante esté constituida por algunos píxeles con nivel de gris complejo,
algo que es absurdo.
Para evitar esto, se utiliza la función abs que devuelve el módulo de los elementos de
una matriz.

A=abs(ifft2(Fa));


Luego para visualizar la tranformada de Fourier debemos aplicar el siguiente comando:


En realidad, lo que se grafica en tres dimensiones es la magnitud de la transformada
discreta de Fourier.

mesh(abs(Fa))

Como en la mayoría de los casos, se utiliza una escala logarítmica en el espacio de
frecuencias. Esto se realiza de la siguiente forma:

mesh(log(abs(Fa)))


Luego la inmagen se convirtio a vinaria con el siguiente comando:

result=sample>=128;

La forma mas común de generar imágenes binarias es mediante la utilización
del valor umbral de una imagen a escala de grises; es decir se elige un valor limite
(o bien un intervalo) a partir del cual todos los valores de intensidades mayores
serán codificados como 1 mientras que los que estén por debajo serán codificados
a cero. En matlab este tipo de operaciones se realizan de forma bastante sencilla
utilizando las propiedades de sobrecarga de los símbolos relaciónales.
Por ejemplo si de la imagen sample quisiera realizarse este tipo de operación
de tal forma que los píxeles mayores a 128 sean considerados como 1 y los que
son menores o iguales a 128 como cero.

Luego calculamos la cantidad de objetos que tiene la imagen ya sea la escala a grices o la binaria, con el siguiente comando:

> >Mat=bwlabel(imagebinary,8);

Se encuentra la maxima cantidad de objetos.

> >max(max(Mat))
ans=
22


Se genera la imagen indexada con 22 elementos

> >map=[0 0 0;jet(22)];
> >imshow(Mat+1,map)


Cabe señalar que la cantidad de objetos son mostrados cada uno con un color


EJEMPLO DE LO ANTES DICHO:

A=double(imread('C:\Archivos de programa\MATLAB\R2008a\toolbox\images\imdemos\Lipin.jpg','jpg'));
A=A(:,:,1);
subplot(3,2,1);imshow(uint8(A))
Fa=fftshift(fft2(A));

B=abs(ifft2(Fa));
subplot(3,2,2);mesh(log(abs(Fa)))
binary=A<85;
subplot(3,2,3);imshow(binary)
Fb=fftshift(fft2(binary));

C=abs(ifft2(Fb));
subplot(3,2,4);mesh(log(abs(Fb)))
mat=bwlabel(binary,8);
max(max(mat));
map=[0 0 0;jet(355)];
subplot(3,2,5);imshow(mat+1,map)
Fc=fftshift(fft2(binary));
D=abs(ifft2(Fc));
subplot(3,2,6);mesh(log(abs(D)))


Dando como resultado la siguiente figura.