Está en la página 1de 9

Manejo de Imgenes digitales con SciLab

Autores: Gonzalo Luzardo, Vanessa Cedeo y Javier Tibau



Una imagen digital es una representacin bidimensional de una imagen a partir de una matriz
numrica de puntos de color. Cada elemento de la matriz representa lo que se denomina un
pxel de la imagen.
A las imgenes digitales se las suele caracterizar por su altura y anchura en pixeles y por su
profundidad de color (bits para representar el color), que determina el nmero de colores
distintos que se pueden almacenar en cada pixel, y por lo tanto, en gran medida, la calidad del
color de la imagen. Cada pixel representa un punto de color en la imagen en un formato
especfico, ya sea en niveles de gris o de color en formato RGB donde cada pixel es
representado por una tripleta de nmeros que representa un color. Las siguientes grficas
ilustran dos imgenes, la primera de ellas en escala de grises y la segunda a colores, en la cual
podemos observar la representacin numrica de cada pixel en una porcin de la imagen.


Como se puede apreciar en la imagen en escala de grises, cada pixel est representado por un
nmero que indica el nivel de gris presente en esa posicin de la imagen. Por otro lado, en la
imagen a colores, cada pixel est representado por su tripleta RGB, que representa el color en
formato RGB presente en esa posicin de la imagen.
En esta tarea van a trabajar con imgenes en escala de grises; en donde cada elemento de la
matriz de datos almacena un valor entero que va de 0 a 255, el cual representa el nivel de gris
presente en dicha posicin de la imagen, siendo 0 el nivel ms oscuro y 255 el ms claro.
Lectura de imgenes digitales en SciLab
Para leer imgenes digitales, SciLab posee herramienta especial llamada SciLab Image and
Video Processing toolbox (http://siptoolbox.sourceforge.net/), que no viene instalada por
defecto. Para instalarla siga los siguientes pasos:
1. En SciLab abra el Administrador de mdulos ATOMS en Applications/Administrador de
mdulos ATOMS.

2. En el Administrador de mdulos ATOMS, seleccione la categora Image Processing.

3. Seleccione SciLab Image and Video Processing toolbox y presione el botn Instalar

4. Espere mientras se finaliza la instalacin y luego cierre y abra nuevamente SciLab.
Una vez instalado el SciLab Image and Video Processing toolbox puede utilizar todos los
comandos que permiten trabajar con imgenes digitales. Para leer una imagen digital y extraer
su informacin matricial utilice el comando imread('ruta_de_la_imagen'). Por
ejemplo, para leer la informacin de la imagen en escala de grises lenagray.png, primero
cambie el directorio de trabajo actual (File/Cambiar directorio actual) a la carpeta donde
contiene la imagen a ser leda y luego ejecute en consola el siguiente cdigo.
-->imagen = imread('lenagray.bmp');
(No olvide colocar el ; si no quiere ver todo el contenido de la matriz en pantalla)
Puede visualizar en la ventana grfica de SciLab una imagen leda con el comando
imshow(imagen).Por ejemplo para visualizar la imagen leda anteriormente, ejecute el
siguiente cdigo:
-->imshow(imagen);
As mismo, puede revisar el contenido de cada elemento de la matriz conociendo su ubicacin
fila x columna en la matriz. Por ejemplo, para leer la informacin del pixel en la posicin
100x164 de la imagen, ejecute en consola el siguiente cdigo:
-->imagen(100,164)
ans =
176
Llene la siguiente tabla con los valores correspondientes a los niveles de gris almacenados en
la porcin definida de la imagen leda:
COLUMNA
POSICIN
164 165 166 167 168
F
I
L
A

100 176 180 192 191 176
101
180 184 188 161 126
102
177 182 185 161 128
103
173 181 189 180 164
104
184 189 190 180 167

Existen dos tipos de imgenes con las que SciLab puede trabajar: escala de grises y a colores.
SciLab lee el contenido de la imagen y extrae una matriz de pixeles numrica de dos
dimensiones, la cual coincide con el alto y ancho de la imagen leda. Cada elemento fila x
columna de la matriz representa un pixel, y en particular en las de escala de grises, su valor
es un entero de 8 bits sin signo (uint8) y representa el nivel de gris presente en dicha posicin
que puede tomar un valor de 0 (negro) a 255 (blanco) como mximo. En s, para SciLab esta
matriz representa la imagen digital leda.




Manipulaciones bsicas de una imagen digital con SciLab
La manipulacin de una imagen digital se la realiza mediante manipulaciones en su matriz de
pixeles, por ejemplo, para rotar la imagen 90 grados debe realizar la transpuesta de la matriz.
Pruebe el siguiente ejemplo que muestra la imagen anterior rotada.
-->imrotada=imagen'; imshow(imrotada);
Ya que las imgenes son matrices, podemos realizar operaciones como sumas y restas de
imagenes. Considere las siguientes imgenes:

lenagray.bmp lenagraynoface.bmp espol.bmp
Escriba el cdigo en SciLab que permita obtener los resultados deseados:
Cdigo SciLab Resultado esperado




TIP: Considere el hecho de que cada valor del pixel de la
imagen no puede sobrepasar de 255


TIP: Oscurecer una imagen es disminuir el valor de cada pixel
por un factor


Otra operacin que se puede realizar con matrices es la extraccin de una sub-matriz y la
concatenacin de matrices. Por ejemplo, note que en la imagen, la seccin del rostro se
encuentra entre las filas 103 a 193 y columnas 102 a 180:

Escriba el cdigo necesario que permita crear las siguientes imgenes:
Imagen Cdigo:


//Extraiga la submatriz correspondiente y luego concatene
//para crear la imagen final solicitada

//Extraiga la submatriz correspondiente, cree una nueva
//matriz procesando esta submatriz y luego concatene las
//matrices correspondientes para crear la imagen final
//solicitada

Un aspecto interesante de SciLab, es que le permite crear imgenes a travs mediante la
especificacin de una matriz de valores enteros de 8 bits sin signo. Por ejemplo, el siguiente
cdigo:
-->imgris=uint8(ones(256,256)*128);imshow(imgris);
-->imwrite(imgris,'gray.bmp');
Mostrar la siguiente imagen gris:

Note la utilizacin de las instrucciones uint8() y imwrite(). Acuda a la ayuda local de
SciLab (F1) o a la ayuda en lnea en http://help.scilab.org/ e investigue el funcionamiento de
esa instruccin. Responda las siguientes preguntas:
Qu hace la instruccin uint8() y cmo se debe utilizar (sintaxis)?







Qu hace la instruccin imwrite() y cmo se debe utilizar (sintaxis)?






Por qu debe usar esta instruccin dentro del cdigo mostrado anteriormente el cual permita crear la imagen
gris?





Escriba el cdigo en SciLab que permita crear las siguientes imgenes:
Cdigo Cdigo Cdigo







Ancho: 252 pixeles
Alto:252 pixeles

Ancho: 252 pixeles
Alto:252 pixeles

Ancho: 252 pixeles
Alto:252 pixeles



Manipulaciones a nivel de pxeles
Para manipular la imagen a nivel de pixeles debe manipular de forma individual los valores de
los elementos de la matriz que la representa. Por ejemplo para hacer un marco blanco de un
grosor de 4 pixeles que rodee el rostro de la persona que aparece en la imagen de prueba,
debe cambiar el valor de dichos pixeles a 255. El siguiente cdigo realiza este procesamiento:
-->imagen = imread('lenagray.bmp');
-->imagen(103:193,102:106)=255;
-->imagen(103:193,180:184)=255;
-->imagen(103:107,102:184)=255;
-->imagen(193:197,102:184.)=255;
-->imwrite(imagen,'lenaface.bmp');
-->imshow(imagen);

Pegue la imagen que se genera












La manipulacin individual de cada pxel de una imagen, por lo general, se la realiza a
mediante un recorrido en la imagen utilizando dos lazos, uno para las filas y otro para las
columnas:
for i=1:M //filas
for j=1:N //columnas
//Manipulacin
imagen(i,j)=procesar(imagen(i,j));
end
end


La instruccin procesar() representa el procesamiento que
se le har al pixel ubicado en la posicin ixj

NOTA: Por cuestiones de optimizacin se debe realizar el
recorrido de una matriz fila por fila (como en el cdigo
anterior) y NO columna por columna.

Un tipo de manipulacin a nivel de pixel es la denominada umbralizacin de imgenes, la cual
consiste en darle el valor de 255 a un pixel cuyo valor se encuentra por encima de un umbral y
0 si se encuentra por debajo. La imagen a continuacin fue obtenida a partir de la
umbralizacin de la imagen de prueba con un valor de umbral de 128, esto es, valores e
pxeles por encima de este valor se fijan en 255 y por debajo en 0.

Perceptualmente esta manipulacin le aplica un efecto de caricaturizado a la imagen original.
Complete el cdigo en SciLab que permita crear esta imagen.
imagen = imread('lenagray.bmp');
[M N]=size(imagen); //Dimensiones de la imagen
umbral=128;
for i=1:M //filas
for j=1:N //columnas
//Manipulacin






end
end
imshow(imagen);
imwrite(imagen,'caricatura.bmp');



Otro efecto comn en el mundo del procesamiento de imgenes es la deteccin de bordes.
Una forma muy sencilla de realizarlo es generar una imagen la cual reste dos pixeles
consecutivos de la misma fila, luego pasar un umbral, el cdigo para este procesamiento sera
el siguiente:
//Lectura de la imagen
imagen = imread('figuras.bmp');
[M N]=size(imagen);
bordes=uint8(zeros(M,N)); //Imagen blanca
for i=1:M //filas
for j=1:(N-1) //columnas
//Manipulacin
bordes(i,j) = abs((imagen(i,j+1)-imagen(i,j)));

end
end
imshow(bordes);
Resultado


Como puede observar el resultado es la deteccin de bordes verticales en la imagen. Conteste
las siguientes preguntas:
Por qu razn el algoritmo puede detectar los bordes verticales?





Escriba un algoritmo para detectar los bordes horizontales











Considere la imagen espol2.bmp. Escriba un algoritmo que permita obtener los bordes
horizontales y verticales de la imagen tal y como se muestra en el resultado esperado.







TIP: La imagen del resultado esperado es la suma de
la imagen de la deteccin de borde vertical mas la de
deteccin de borde horizontal


Conclusiones
Escriba las conclusiones relacionadas al trabajo que ha realizado.

También podría gustarte