You are on page 1of 5

Tutorial Tarea 2: Procesamiento de Imagenes con MatLab

por: Gabriel San Martn


Curso: CC-1000 6, Oto
no 2015

Introducci
on: Matlab y sus Usos
MatLab es un lenguaje de programaci
on cientfica con usos casi ilimitados. Hoy, veremos una de sus
aplicaciones mas modernas, interesantes y divertidas: el procesamiento de imagenes.

Im
agenes en MatLab
MatLab es un experto en trabajar con matrices o vectores. Por suerte para nosotros, una imagen es
tambien una matriz. Pensemos esto un poco. Supongamos que tengo una imagen basica, como la
siguiente:

Figure 1: Tomoko en el Ba
no, William Eugene Smith, 1972.
Para nosotros, esta es una imagen en escala de grises. Ademas, su tama
no es 585 pxeles de
alto por 960 pxeles de ancho. Para MatLab, esta imagen no es mas que una MATRIZ de 585x960
entradas, donde cada entrada es un valor entre 0 y 255. El cero en una determinada entrada, le indica
al computador que ti
na ese pxel de la pantalla de color negro absoluto. El 255 en cambio, le indica
que ti
na ese pxel del blanco m
as puro. Los valores intermedios seran colores intermedios entre el
negro y el blanco, es decir, grises.
Si por ejemplo generamos una matriz B de 200x100 rellena de ceros, usando el comando
1

>>B = zeros(200,100);
Lo que estamos haciendo es crear una imagen de 100 pxeles de ancho por 200 pxeles de alto de
color negro.
Pero entonces, c
omo se generan las imagenes a color? Las imagenes a color no son mas que tres
matrices juntas, una para cada tonalidad de color basico que acepta la pantalla de nuestro computador: RGB. Es decir, una matriz para el rojo (red), otra para el verde(green) y otra para el azul (blue).
As, al superponer las tres matrices juntas, cada pxel se te
nira de color. A continuacion presentamos
una imagen a color:

Figure 2: Franciszek Zmurko,


Faustss Vision, 1890.
La cu
al es para MatLab algo del estilo:

Figure 3: Franciszek Zmurko,


Faustss Vision, 1890 para MatLab.
As, podemos ver que si sabemos manejar matrices en MatLab, tambien sabemos procesar imagenes.


Comandos Utiles
en el Procesamiento de Im
agenes
Para trabajar como imagen en MatLab, lo primero es ser capaz de pasar esta a una matriz dentro del
entorno del software. Para ello usamos el comando imread.
>> NombreMatriz = imread(nombreimagen.extension);
Donde:
NombreMatriz es el nombre de la variable donde guardaremos la matriz que representa nuestra
imagen.
imread es el comando que permite leer la imagen.
nombreimagen es el nombre de la imagen que queremos leer.
extensi
on es la extensi
on del archivo imagen, que puede ser jpg, png, etc.
imread recibe como argumento una cadena de texto, por lo que el nombre de su imagen y la extensi
on
DEBEN estar entre cremillas simples. As, se agregara al workspace de MatLab la variable NombreMatriz que contendr
a la matriz que representara la imagen. Un detalle importante es que cuando
importamos una imagen a MatLab mediante este metodo, los n
umeros que componen la matriz imagen est
an en un formato extra
no, llamado uint8. Para poder operar con esta matriz del modo
que estamos acostumbrados, ser
a necesario cambiar su formato hacia el formato double. Esto es muy
simple de hacer con el siguiente comando:
>>NombreMatriz = double(NombreMatriz)
Lo que hacemos con este comando es simplemente transformar desde formato uint8 hasta el formato
double nuestra matriz. Con esto ya estamos capacitados para jugar con ella en MatLab, sumarlas,
restarlas, multiplicarlas, etc.
Si la imagen que importamos y transformamos era una a color, en la variable NombreMatriz por lo
general quedara guardada una matriz de 3 dimensiones, en vez de las matrices de 2 dimensiones a las
que estamos acostumbrados. As como una matriz de 2 dimensiones es simplemente varias matrices de
1 dimensi
on (es decir, vectores) puestos uno junto a otro, una matriz de 3 dimensiones no sera nada
m
as que varias matrices de 2 dimensiones puestas una junto a la otra. En el caso de las imagenes a
color, ser
an tres matrices puestas en serie. Si queremos recuperar la primera capa (primera matriz),
usaremos el comando:
>>NombreMatriz(:,:,1);
Si, en cambio, nos interesa recuperar la segunda y luego la tercera capa, usaremos los siguientes
comandos:
>>NombreMatriz(:,:,2);
>>NombreMatriz(:,:,3);
As, por ejemplo, supongamos que nos interesa transformar una imagen a color (matriz de 3
capas) a una imagen en escala de grises (matriz simple). Una buena idea es multiplicar la primera
capa (RED) por el factor 0.3, la segunda capa (GREEN) por 0.59 y la tercera capa (BLUE) por 0.11.
Luego, si generamos una nueva matriz como la suma de las tres capas ya ponderadas por el factor
correspondiente, obtendremos una matriz simple (de dimension 2) que sera la imagen en escala de
grises de nuestra imagen original.
Ahora, si lo que queremos es generar a partir de una imagen a color, su transformacion en una de
estilo historieta, los pasos a seguir seran los siguientes:
3

Primero, transformaramos la imagen a colores en una imagen en escala de grises. As, pasamos
desde una matriz de 3 capas a una matriz simple, de solo 1 capa. Para esto podemos usar el
metodo explicado anteriormente.
Segundo, examinaramos mediante un ciclo while o un ciclo for la matriz de la imagen en escala
de grises pxel por pxel (es decir, componente a componente). Recuerde que en una imagen en
escala de grises, cada componente de la matriz representa un pxel, el cual se colorea blanco si
su valor es 255 o negro si su valor es 0. As, si el valor de dicho pxel es mayor a una cierta
tolerancia t (fijada por el usuario), cambiamos el valor de dicho pxel por el blanco absoluto,
es decir, 255. Por el contrario, si el valor del pxel es menor a la tolerancia t, seteamos el valor
de dicho pxel en el negro absoluto, 0. As, se eliminan los grises de la imagen y esta queda
solo en blanco y negro. La calidad, dramatismo e impacto de la imagen dependeran del nivel de
tolerancia t (por ejemplo, quedaran imagenes muy pobres y fomes si t vale 0 o 255).
Otros comandos sumamente u
tiles para trabajar con imagenes en Matlab son imwrite e imshow.
Para poder usar estos comandos, es requisito que nuestra matriz que representa la imagen simple o
de 3 capas este en formato uint8. Para transformar una cierta matriz desde formato double a uint8
usamos el siguiente comando:
>>NombreMatriz = uint8(NombreMatriz);
La funci
on imwrite recibe como argumento una matriz simple o de 3 capas y una cadena de
texto. Lo que hace es guardar en el directorio actual (current folder) de MatLab, la imagen que esta
representada en la matriz, bajo el nombre especificado. As, por ejemplo, si ejecutamos
>>imwrite(NombreMatriz,MiImagenFavorita.jpg)
Lo que estamos haciendo es guardar como imagen la matriz NombreMatriz, bajo el nombre MiImagenFavorita.jpg. As, si el current folder era por ejemplo el escritorio, ahora tendremos en el escritorio
una imagen en formato jpg que se llamara MiImagenFavorita, la cual contendra lo representado en
la matriz NombreMatriz.
La funci
on imshow recibe como argumento una matriz simple o de 3 capas, y lo que hace es simplemente mostrar la imagen guardada en dicha variable.
>>imshow(NombreMatriz)\% muestra la imagen en una ventana de MatLab.
Algo importante que deben saber es que Octave no soporta procesamiento de imagenes, por ende
tendr
an que trabajar desde los computadores de la Universidad en esta tarea. Obviamente, siempre
pueden realizar sus funciones en un bloc de texto en cualquier computador y simplemente probarlas
(y ver que cosas fallan) en los computadores del CEC. Con esta informacion, deberan ser capaces de
realizar la tarea encomendada. De todas formas, cualquier duda que tengan pueden hacerla en el foro
del curso y ser
a respondida lo mas r
apido posible.

Anexo Artstico
La figura 1 muestra una fotografa tomada por William Smith en 1973, en una peque
na localidad
pesquera ubicada en el sur de Jap
on llamada Minamata. Es parte de un reportaje periodstico que
Smith llevo a cabo sobre la empresa qumica Chisso y un vertimiento de mercurio del cual fueron culpables. Dicho evento altero toda la cadena alimenticia del lugar, afectando unas catorce mil personas
y matando a m
as de mil. La fotografa muestra la intimidad de una familia azotada por esta tragedia.
En ella, Tomoko Uemura ba
na a su hijo, el cual nacio con distrofias musculares y alteraciones cerebrales producto del mercurio presente en los alimentos que consumio su madre. Dicen que la imagen le
vali
o a Smith una paliza por parte de matones contratados por la empresa qumica, pero la foto sali
o
finalmente a la luz junto con el reportaje, lo cual junto con la presion internacional sobre el gobierno
japones, forzaron el cierre de la planta y el castigo de los responsables.

En la figura 2 se muestra un cuadro que representa la antigua leyenda alemana de Fausto, un


erudito que insatisfecho de su vida, vendio su alma al diablo a cambio de placeres mundanos. En la
imagen se ve a Fausto, preso de sus visiones, llegando a la locura.

You might also like