Académique Documents
Professionnel Documents
Culture Documents
Tratamiento de imgenes en
MATLAB
E.1.
Una vez leda la imagen hay que mostrarla en pantalla, para ello se recurre
a la funcin imshow . El cdigo de la figura E.1 ilustra como se hace. Se debe
tener cuidado con la funcin imshow ya que si la imagen es demasiado grande
para ser mostrada en pantalla, la funcin la filtra y submuestrea hasta dejarla
en dimensiones manejables.
E.2.
313
314
f=imread(frissellBW.png);
figure(1)
imshow(f)
Figura E.1: Cdigo para mostrar una imagen. La imagen es cortesia de Toni
Frissell, fotgrafa y cuyo trabajo puede ser encontrado en http://www.culturainquieta.com/es/fotografia/item/1610-toni-frissell.html.
ans =
520x446x3
Note que las dimensiones devueltas son 520 446 3, esto es, son tres
planos, cada plano representa a un color, ya sea, rojo, verde o azul. Cada plano
se maneja como una matriz de 520 renglones por 446 columnas.
Si se desea ms informacin como la cantidad de bytes de almancenamiento
requerido y el tipo de dato, se usa la funcin whos. El cdigo siguiente ilustra
el uso de esta funcin.
>f=imread(frissellBW.png); %Lectura de la imagen
>whos f
>
Name
Size
Bytes
Class
f
446x500x3
669000
uint8
Note que la funcin whos nos entrega el nombre de la variable, las dimensiones de variable y el tipo de dato que es entero sin signo de 8 bits. Esto ltimo
implica que los grises van de 0 a 255.
rgb2lab
rgb2ntsc
rgb2xyz
rgb2ycbcr
rgb2gray
315
lab2rgb
ntsc2rgb
xyz2rgb
ycbcr2rgb
lab2xyz
Cuadro E.1: Algunas funciones MATLAB para cambio entre modelos de color.
E.3.
Algunas funciones de MATLAB para cambiar de formatos de color se muestran en tabla del cuadro E.1.
E.4.
=
=
=
0.257 R
0.148 R
0.439 R
+ 0.504 G +
0.291 G +
0.368 G
0.098 B
0.439 B
0.071 B
+ 16
+ 128
+ 128
(E.1)
316
imagenRGB=imread(bebes-bajo-agua-11.jpg);
figure(1)
imshow(imagenRGB)
imagenYUV=rgb2ycbcr(imagenRGB);
figure(2)
imshow(imagenYUV)
Figura E.2: Esquema del modelo RGB y Esquema del modelo YUV.
Todos estos valores caben en un byte haciendo redondeo al entero ms prximo.
Durante esta fase no hay prdida significativa de informacin ya que se considera
que tal redondeo introduce un pequeo margen de error imperceptible para el
ojo humano.
Las ecuaciones para el cambio inverso se pueden obtener despejando de las
anteriores y se obtienen las siguientes:
R = 1.164 (Y 16) + 1.596 (V 128)
G = 1.164 (Y 16) 0.813 (V 128) 0.391 (U 128)
B = 1.164 (Y 16)
+ 2.018 (U 128)
(E.2)
El lector debe considerar que estas ecuaciones estn en continua investigacin, por lo que se pueden encontrar en libros y en la red otras ecuaciones
distintas pero con coeficientes muy parecidos.
La figura E.2 ilustra un par de cubos con los componentes de color RGB y
YUB respectivamente. El cdigo MATLAB usado para generar estas imgenes
se muestra en la misma figura
E.5.
317
(E.3)
Hay una funcin que simplifica el hecho de acordarse de los porcentajes, esta
funcin es rgb2gray y su uso es como sigue:
>f=imread(frissellBW.png); %Lectura de la imagen
>imagenBW=rgb2gray(f); %Conversin a grises
>figure (2)
>imshow(imagenBW); %Exhibicin de la imagen
E.6.
318
Para el caso de que solamente haya formatos YUY, se puede forzar a retornar
imgenes en formato RGB mediante la siguiente lnea:
set(vidObj,ReturnedColorSpace,rgb);
319
%
%Recupera una imagen del disco
imagenRGB=imread(jane_do.jpg);
imagenBW=rgb2gray(imagenRGB);
figure(1)
imshow(imagenBW)
%Captura una regin
h=impoly; %Captura una regin
resume(h); %reasume ejecucion
%Crear la nmscara
BW = createMask(h)
figure(2)
imshow(BW)
whos BW
Figura E.3: Programa para el marco de una zona sobre una imagen y la generacin de una mscara basada en esa zona.
Entonces la cmara se enciende y toma una foto en el formato dado. As, si
el formato elegido es RGB, entonces foto es una matriz de 320x240x3. Para
visualizar esta foto use la funcin imshow .
imshow(foto)
Para borrar el objeto de video, primero hay que vaciar los datos de la foto
con la funcin flushdata y luego ya se puede borrar objeto de video con la
funcin delete.
flushdata (vidObj);
delete(vidObj);
E.7.
Una tarea que resulta muy potente es el marcado de una regin sobre una
imagen. Si la captura puede realizarse en forma controlada por algn usuario,
320
Size
1192x1611
Bytes
1920312
Class
logical
E.8.
En MATLAB y en particular en Image Processing Toolbox existe el concepto bloques distintos2 los cuales son particiones rectangulares que dividen
a una imagen en seciones de m por n. La caja de herramientas crea los
Bloques distintos superponindose en la matriz de la imagen a partir de la
esquina superior izquierda, sin que se solapen. Si los bloques no se ajustan exactamente sobre la imagen, la caja de herramientas crea bloques distintos que
rebasan a la imagen y agregndoles ceros de relleno sobre los mrgenes inferior
y derecho.
La funcin blkproc es la engargada de generar estos bloques distintos.
blkproc extrae, uno por uno, los bloques distintos y los pasa a una funcin que
el usuario especifica. Esta funcin debe recibir el bloque y devolver un bloque
de las mismas dimensiones aunque no necesariamente dle mismo tipo de dato.
Entoncesblkproc ensambla de nuevo los bloques retornados por la funcin
para recrear una imagen de salida.
2 El concepto en ingls es Distinct Blocks y puede encontrarse en https://nf.nci.org.au/facilities/software/Matlab/toolbox/images/block8.html
321
Figura E.4: Imagen de 15 por 30 dividida en bloques de 4 por 8 con solapamientos de 1 por 2. Imagen provista de https://nf.nci.org.au/facilities/software/Matlab/toolbox/images/block9.html
E.9.
Otras funciones
bskfun
arrayfunc: http://www.mathworks.com/help/matlab/ref/arrayfun.html
322