Vous êtes sur la page 1sur 19

UNIVERSIDAD DEL VALLE DE MEXICO

CAMPUS TLALPAN

MAESTRA EN INGENIERIA EN SISTEMAS.
PROCESOS ESTOCASTICOS
PROCESAMIENTO DIGITAL DE IMGENES
PROF. RICARDO DELGADO ALTAMIRANO
16 de Agosto del 2014


ALUMNOS
ALBERTO LANDA PALEO: 040022583
BENITO GARCA GRACA: 040008928
VCTOR MARTN RAMREZ HERRERA: 04275392




INTRODUCCIN

El procesamiento digital de una imagen es el conjunto de tcnicas que se aplican a
las imgenes digitales con el objetivo de mejorar la calidad o facilitar la bsqueda
de informacin.
En esta prctica se trabaja operaciones por algoritmos de filtrado que extraen las
caractersticas ms importantes de cada imagen, que permiten eliminar las seales
indeseadas, que por causa del mtodo de adquisicin, o de las condiciones bajo las
cuales fue captada.
A dems se maneja la segmentacin de imgenes, la cual consiste en localizar los
diferentes objetos que estn presentes en una imagen. En un sistema de visin
artificial genrico, la fase de segmentacin se encuadra entre las fases de
preprocesamiento, en la que las imgenes son sometidas a diferentes operaciones
de filtrado que ayudan a mejorar la calidad de la imagen o a destacar los objetos
que posteriormente queremos segmentar, y la de identificacin o reconocimiento de
los objetos, que es en la fase en la que se reconocen y etiquetan los distintos objetos
de la imagen.
Otra parte importante en el procesamiento de imgenes es reconocer la existencia
de variadas formas en los cuerpos que la componen y nos proporciona la idea de
volumen, superficie, lnea, y punto, hallando as caractersticas morfolgicas propias
de cada imagen.
Con base a esta morfologa se puede realizar la deteccin de partes del cuerpo
como lo es la deteccin de rostros en MATLAB para esto es indispensable poder
identificar el rea donde se encuentra el rostro de la imagen a procesar, tambin se
puede realizar una extraccin de esa rea del rostro hallando el rea mxima que
lo encierra y realizando un corte a esa zona.







CONCEPTOS BSICOS DE LAS IMGENES

En matlab una imagen a escala de grises es representada por medio de una matriz
bidimensional de m x n elementos en donde n representa el nmero de pxeles de
ancho y m el nmero de pxeles de largo. El elemento v11 corresponde al elemento
de la esquina superior izquierda (ver figura 1), donde cada elemento de la matriz de
la imagen tiene un valor de 0 (negro) a 255 (blanco).
n
m

Figura 1: Representacin de una imagen a escala de grises en Matlab.
Por otro lado una imagen de color RGB (la ms usada para la visin computacional,
adems de ser para matlab la opcin default) es representada por una matriz
tridimensional m x n x p, donde m y n tienen la misma significacin que para el caso
de las imgenes de escala de grises mientras p representa el plano, que para RGB
que puede ser 1 para el rojo, 2 para el verde y 3 para el azul. La figura 2 muestra
detalles de estos conceptos.

m
n
I(m,n,p)
IR(m,n) IG(m,n) IB(m,n)

Figura 2: Representacin de una imagen color RGB en Matlab.
LECTURA Y ESCRITURA DE IMGENES A TRAVS DE
ARCHIVO

Para leer imgenes contenidas en un archivo al ambiente de matlab se utiliza la
funcin imread, cuya sintaxis es:
imread(nombre del archivo)
Donde nombre del archivo es una cadena de caracteres conteniendo el nombre
completo de la imagen con su respectiva extensin, los formatos de imgenes que
soporta matlab son los mostrados en la tabla 1.
Formato Extensin
TIFF .tiff
JPEG .jpg
GIF .gif
BMP .bmp
PNG .png
XWD .xwd
Tabla 1: Formatos y extensiones soportados por Matlab.
Para introducir una imagen guardada en un archivo con alguno de los formatos
especificados en la tabla anterior solo tiene que usarse la funcin imread y asignar
su resultado a una variable que representar a la imagen (de acuerdo a la
estructura, Figura 1 para representar escala de grises y Figura 2 para RGB). De tal
forma que si se quisiera introducir la imagen contenida en el archivo Penguins.jpg a
una variable para su procesamiento en matlab, entonces se tendra que escribir en
lnea de comandos:

>>I = imread('c:\users\alberto\desktop\procesamiento\penguins.jpg');
Con ello la imagen contenida en el archivo penguins.jpg quedar contenida en la
variable I.
Una vez que la imagen est contenida en una variable de matlab es posible utilizar
las funciones para procesar la imagen. Por ejemplo, una funcin que permite
encontrar el tamao de la imagen es size(variable).

> >[m, n]=size(I);

En donde m y n contendrn los valores de las dimensiones de la imagen.
Para grabar el contenido de una imagen en un archivo se utiliza la funcin
imwrite(variable,nombre del archivo), en donde variable representa la variable que
contiene a la imagen y nombre del archivo el nombre del archivo con su respectiva
extensin de acuerdo a la tabla 1. Suponiendo que la variable I contiene la imagen
que nos interesa grabar en el archivo pinguinos.jpg tendramos que escribir:

>>imwrite(I,'c:\users\alberto\desktop\procesamiento\pinguinos.jpg');

Despus que realizamos un procesamiento con la imagen, es necesario desplegar
el resultado obtenido, la funcin imshow(variable) permite desplegar la imagen en
una ventana en el ambiente de trabajo de matlab. Si la variable a desplegar por
ejemplo, es I al escribir en la lnea de comandos:

>>imshow(I);

Obtendremos la figura 3.


Figura 3: Imagen mostrada al utilizar la funcin imshow.

ACCESO A PXEL Y PLANOS EN LAS IMGENES

El acceso a pxel de una imagen es una de las operaciones ms comunes en visin
computacional y en matlab est sumamente simplificado; solo bastar con indexar
el pxel de inters en la estructura de la imagen. Consideremos que tenemos una
imagen Gray en escala de grises (Figura 4) y deseamos obtener su valor de
intensidad en el pxel especificado por m=100 y n=100; solo tendramos que escribir:




Figura 4: Obtencin del valor de un pxel de Gray.


De igual forma si se desea cambiar el valor de este pixel a negro, es decir asignarle
el valor de 0 lo que tendra que escribirse en la lnea de comandos es:

>>Gray(100,100) = 0;

En el caso de imgenes a escala de grises estas solo tienen un plano, constituido
por la matriz m x n que contiene los valores de intensidad para cada ndice.
Sin embargo las imgenes a color cuentan con ms de un plano. En el caso de
imgenes RGB (tal como se explic anteriormente) estas cuentan con 3 planos uno
para cada color que representa. Consideremos ahora que la imagen RGB contenida
en la variable I es la mostrada en la figura 3, y deseamos obtener cada uno de los
planos que la componen. Entonces escribiramos:

>>R = I(:,:,1);
>> G = I(:,:,2);
>> B = I(:,:,3);
>>imwrite(R,'c:\users\alberto\desktop\procesamiento\pinguinos_red.jpg')
>> imwrite(G,'c:\users\alberto\desktop\procesamiento\pinguinos_green.jpg')
>> imwrite(B,'c:\users\alberto\desktop\procesamiento\pinguinos_blue.jpg')

Los planos resultantes por los anteriores comandos son mostrados en la figura 5.
(a) (b) (c)

Figura 5: Planos de la imagen: a) Rojo, b) Verde y c) Azul.
Si se desear manipular un pxel de una imagen a color RGB este tendr un valor
para cada uno de sus planos correspondientes. Supongamos que tenemos la
imagen RGB contenida en la variable I y deseamos obtener el valor del pxel m=100
y n=100 para cada uno de los diferentes planos R, G y B.
Tendramos que escribir:

Lo cual dar como resultado una tripleta de valores. De igual forma que con el caso
de escala de grises podemos modificar este pxel a otro color mediante el cambio
de su valor en cada uno de sus respectivos planos; por ejemplo un cambio a color
blanco mediante:

>> I(100,100,1)=255;

>> I(100,100,2)=255;

>> I(100,100,3)=255;

En ocasiones resulta preferible saber el color o la intensidad de gris (el valor del
pxel) de forma interactiva, es decir tener la posibilidad de seleccionar un pxel en
una regin y obtener el valor de este. Esta posibilidad es ofrecida por la funcin
impixel, la cual iterativamente entrega el valor (uno o tres) del pxel seleccionado
que aparezca en la ventana desplegada por la funcin imshow. El formato de esta
funcin es:

>> value=impixel(I)
Donde value representa un escalar, en el caso de que la imagen sea a escala de
grises o bien un vector de 1 x 3 con los valores correspondientes a cada uno de los
planos RGB.
Para utilizar esta funcin es necesario antes, desplegar la imagen con la funcin
imshow. Una vez desplegada se llama a la funcin y cuando el cursor del ratn este
sobre la superficie de la imagen cambiara a una +. Cuando se presione el botn
izquierdo del ratn se seleccionara el pxel, el cual podemos seleccionar otra vez en
caso de que se all cometido un error a la hora de posicionar el ratn, ya que la
funcin seguir activada hasta que se presione la tecla de enter.
La figura 6 muestra una imagen de la operacin aqu descrita.


Figura 6: Utilizacin de la funcin impixel.

Una operacin importante en visin computacional es el determinar un perfil de la
imagen; es decir convertir un segmento de la imagen a una seal unidimensional
para analizar sus cambios. Esto es de especial significado en la visin estreo en
donde se analizan para los algoritmos segmentos epipolares de cada cmara.
Matlab dispone de la funcin improfile que permite trazar el segmento
interactivamente con el ratn, desplegando despus el perfil de la imagen en una
grfica diferente. Esta funcin necesita que la imagen original sea previamente
desplegada mediante la funcin imshow. Debe de considerarse que si la imagen es
a escala de grises, el perfil mostrara solo una seal correspondiente a las
fluctuaciones de las intensidades de la imagen, sin embargo si la seal es de color
RGB esta mostrara un segmento de seal para cada plano. Para la utilizacin de
esta funcin solo es necesario escribir en lnea de comandos:

>> improfile

Como es una funcin interactiva en cuanto el ratn se encuentra en la superficie de
la imagen el puntero cambiara de smbolo a una +, de esta manera podemos
mediante el establecimiento de una lnea en la imagen configurar el perfil deseado.
La figura 7 muestra una imagen de la operacin descrita.




Figura 7: Utilizacin de la funcin improfile.






Otra forma de utilizar la funcin improfile es la siguiente:





FUNCIONES PARA LA CONVERSIN DE IMGENES Y
FORMATOS DE COLOR

El formato de representacin de color ofrecido por las imgenes RGB resulta no
apropiado para aplicaciones en las cuales el cambio de iluminacin es problema.
Otro tipo de formatos de color menos sensibles al cambio de iluminacin han sido
propuestos, tales como el modelo HSV. Matlab dispone de funciones especiales
para realizar cambios entre modelos de color y para convertir imgenes de color a
escala de grises.
La funcin rgb2gray cambia una imagen en formato RGB a escala de grises, el
formato de dicha funcin es:

>> Gray = rgb2gray(I);
>>imwrite(Gray,'c:\users\alberto\desktop\procesamiento\pinguinos_gray.jpg')

La funcin anterior nos da la siguiente respuesta:



Por su parte la funcin rgb2hsv cambia del modelo de color RGB al modelo HSV
(Hue - Matiz, Saturation - Saturacin, Value - Brillo), esta funcin toma como entrada
una imagen RGB compuesta de tres planos y devuelve la imagen convertida al
modelo HSV compuesta a su vez de tres planos correspondientes al H, S y V. El
formato de esta funcin es:

>> HSV = rgb2hsv(I);



La conversin contraria la realiza la funcin hsv2rgb.




Si sacamos la matriz transpuesta de la matriz Gray nos rotara la imagen de escala
de grises contenida en Gray 90 en sentido contrario a las manecillas del reloj (esto
solo es aplicable a imgenes en escala de grises).


El comando figure nos muestra varias imgenes en diferentes ventanas:










El comando subplot nos presenta varias imgenes en una misma ventana.



El comando size() nos da la resolucin de la imagen y de cuantos colores consta
dicha imagen; es decir si es una imagen color o una imagen escala de grises.

El comando imresize() nos cambia la escala de nuestra imagen; en pocas palabras
con este comando podemos cambiar el tamao de la imagen.
La lnea de comando es la siguiente:

>> J = imresize(I,0.5);
>> K = imresize(I,0.25);
>> figure,imshow(J)
>> figure,imshow(K)









El comando imrotate() va rotando la imagen en los grados que nosotros le
indiquemos, esto lo hace en sentido opuesto de las manecillas del reloj.
La lnea de comando es la siguiente:
>> imshow(I)
>> Rotate45 = imrotate(I,45);
>> Rotate90 = imrotate(I,90);
>> Rotate135 = imrotate(I,135);
>> Rotate180 = imrotate(I,180);
>> subplot(2,2,1),imshow(Rotate45)
>> subplot(2,2,2),imshow(Rotate90)
>> subplot(2,2,3),imshow(Rotate135)
>> subplot(2,2,4),imshow(Rotate180)

El comando imhost() saca el histograma de la imagen (Este comando nicamente
funciona con imgenes en escala de grises).
La lnea de comando es la siguiente:

>>subplot(2,2,1),imshow(Gray);
>> subplot(2,2,2),imhist(Gray);
>> subplot(2,2,3),imshow(imresize(R,0.5));
>> subplot(2,2,4),imhist(imresize(R,0.5));

Vous aimerez peut-être aussi