viernes, 11 de julio de 2008

PROCESAMIENTO DIGITAL DE IMÁGENES

El procesamiento de imágenes representa el análisis y manipulación de datos contenidos en una imagen, utilizando la ciencia de las matemáticas para este propósito, las aplicaciones que se tienen son muchas, como el mejoramiento de una imagen, el reconocimiento de patrones, combinación de imágenes, por mencionar algunas.

Para representar una imagen matemáticamente utilizamos matrices, cada elemento de la matriz es llamada píxel (picture element). En una imagen monocromática se trabaja de acuerdo a escala de grises por medio de una matriz bidimensional m x n donde cada píxel está comprendido entre 0 y 255 (uint8), mientras en una imagen a color RGB (red, green, blue) cuenta con una matriz tridimensional m x n x p, donde p representa el plano que puede ser 1, 2 ó 3 para el rojo, verde y azul respectivamente.

Lectura de imágenes a través de MATLAB

Para leer imágenes en el entorno Matlab utilizamos la función imread, los formatos soportados por Matlab son TIFF, JEPG, GIF, BMP, PNG, XWD.

>>I=imread('nombre del archivo');

Donde nombre del archivo es una cadena de caracteres conteniendo el nombre completo de la imagen con su respectiva extensión, almacenando los datos en la variable I, adicionalmente para grabar el contenido de una imagen en un archivo se utiliza la función imwrite(J,'nombre del archivo'), donde J representa la variable que contiene a la imagen. Para visualizar una imagen utilizamos la función imshow, desplegando una ventana.

>>imshow(I)

Acceso a porciones de la imagen

Si deseamos tener acceso a una imagen monocromática (imagen1) y obtener su valor en el nivel especificado por m y n, bastará con escribir:

>>imagen1(m,n)

Para el caso de imágenes RGB, (consideremos imagen2) recordemos que cuentan con 3 planos, que serán representados por p (1 rojo, 2 verde, 3 azul)

>>imagen2(m,n,p)

FILTRADO DE IMÁGENES

El filtraje es una técnica para obtener efectos como la eliminación de ruido o detección de bordes, la función imfilter(I,h) permite filtrar una imagen, donde I representa la imagen y h representa el filtro. Para un filtrado espacial, el filtro se obtiene a través de un arreglo bidimensional conocido como máscara que será convolucionada con nuestra imagen de entrada.

>> I=imread('lina.jpg');Iruido=imnoise(I,'gaussian',0,0.5);%ruido gaussiano

>> n=3;>> h=ones(n,n)/n^2;>> Ifiltro=imfilter(I,h);%filtro

>> figure(1)

>> imshow(I)

>> figure(2)

>> imshow(Iruido)

>> figure(3)

>> imshow(Ifiltro)


Apreciamos que elimina el ruido pero sin embargo, se genera una pérdida de detalles (emborramiento)

DETECCIÓN DE BORDES

Es una técnica que nos permite detectar el cambio de nivel de grises en una imagen y mostrar los contornos de nuestra imagen original. La función edge(I,'algoritmo') realiza esta función, donde I es la variable que contiene la imagen monocromática a la cual se pretende obtener sus bordes, mientras que algoritmo representa la matriz máscara a utilizar, siendo las más utilizadas sobel, prewitt y canny.

>>I=imread('house.jpg');

>>B=edge(I,'sobel');

>>figure(1), imshow(I), title('house')

>>figure(2), imshow(B), title('sobel')

REFERENCIAS

1. Procesamiento Digital de Señales e imágenes en tiempo Real.

David Rojas Vigo

2. Visión por Computador utilizando Matlab.

Erik Cuevas Jimenez, Daniel Zaldivar Navarro

3. Procesamiento digital de imágenes a nivel de bloques.

Jorge Aching Samatelo

4. Detección de bordes en una imagen.

Universidad de Jaén

5. www.mathworks.com/