Imagenes
-
Upload
maria-green -
Category
Documents
-
view
216 -
download
3
description
Transcript of Imagenes
-
Apndice E
Tratamiento de imgenes en
MATLAB
E.1. Lectura de una imagen
MATLAB puede leer imgenes almacenadas mediante la funcin imread.Los tipos de imgenes que pueden cargarse son .jpg, .png, .bmp, .raw. Porejemplo el cdigo siguiente permite la carga de una imagen en una variable deMATLAB.
>f=imread(frissell.jpg);
>f=imread(d:\imagenes\frissell.jpg); % En Windows
>f=imread(/home/user/frissell.jpg); %En linux
Una vez leda la imagen hay que mostrarla en pantalla, para ello se recurrea la funcin imshow. El cdigo de la figura E.1 ilustra como se hace. Se debetener cuidado con la funcin imshow ya que si la imagen es demasiado grandepara ser mostrada en pantalla, la funcin la filtra y submuestrea hasta dejarlaen dimensiones manejables.
E.2. Obteniendo informacin de la imagen
Si se desea obtener informacin de la imagen como sus dimensiones, el tipode dato y el tamao en bytes, se puede recurrir a las funciones size y whos.El ejemplo siguiente ilustra el resultado de emplear la funcin size.
Cuando se carga una imagen, MATLAB crea una variable, la cual contieneindexadas tres matrices, una matriz por cada mapa de color. As, el cdigosiguiente ilustra el uso de la funcin size para obtener las dimensiones de lavariable que almacena la imagen.
>f=imread(frissellBW.png); %Lectura de la imagen
>[M,N]=size(f)
313
-
314 APNDICE E. TRATAMIENTO DE IMGENES EN MATLAB
f=imread(frissellBW.png);
figure(1)
imshow(f)
Figura E.1: Cdigo para mostrar una imagen. La imagen es cortesia de ToniFrissell, fotgrafa y cuyo trabajo puede ser encontrado en http://www.culturain-quieta.com/es/fotografia/item/1610-toni-frissell.html.
ans =
520x446x3
Note que las dimensiones devueltas son 520 446 3, esto es, son tresplanos, cada plano representa a un color, ya sea, rojo, verde o azul. Cada planose maneja como una matriz de 520 renglones por 446 columnas.
Si se desea ms informacin como la cantidad de bytes de almancenamientorequerido y el tipo de dato, se usa la funcin whos. El cdigo siguiente ilustrael 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 dimen-siones de variable y el tipo de dato que es entero sin signo de 8 bits. Esto ltimoimplica que los grises van de 0 a 255.
-
E.3. FUNCIONES PARA CAMBIO DE ESPACIO DE COLOR 315
Funciones MATLAB Ejemplo: RGB a YUV
rgb2lab lab2rgbrgb2ntsc ntsc2rgbrgb2xyz xyz2rgb
rgb2ycbcr ycbcr2rgbrgb2gray lab2xyz
Cuadro E.1: Algunas funciones MATLAB para cambio entre modelos de color.
E.3. Funciones para cambio de espacio de color
Algunas funciones de MATLAB para cambiar de formatos de color se mues-tran en tabla del cuadro E.1.
E.4. Conversin RGB a YUV
Comienza convirtiendo la imagen desde su modelo de color RGB a otrollamado YUV YCbCr. Este espacio de color es similar al que usan los sistemasde color para televisin PAL y NTSC, pero es mucho ms parecido al sistemade televisin MAC (Componentes Analgicas Multiplexadas).
Este espacio de color YUV tiene tres componentes:
La componente Y, o luminancia (informacin de brillo); es decir, la imagenen escala de grises.
La componente U o Cb que es la diferencia del azul, es decir se relativizala imagen entre azul y rojo.
La componente V o Cr que la diferencia del rojo, es decir, se relativiza laimagen entre verde y rojo
La componentes U y V son mejor conocidas como crominancia o informacinde color.
Las ecuaciones que realizan este cambio de base de RGB a YUV son lassiguientes:
Y = 0.257R + 0.504G + 0.098B + 16U = 0.148R 0.291G + 0.439B + 128V = 0.439R 0.368G 0.071B + 128
(E.1)
Al respecto se debe considerar que intervalo de valors para las componentesRGB es [0, 255]. Luego, obsrvese que las tres componentes toman como valormnimo el 16. El canal de luminancia (canal Y) tiene como valor mximo el235, mientras que los canales de crominancia toman un valor mximo de 240.
-
316 APNDICE E. TRATAMIENTO DE IMGENES EN MATLAB
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 consideraque tal redondeo introduce un pequeo margen de error imperceptible para elojo humano.
Las ecuaciones para el cambio inverso se pueden obtener despejando de lasanteriores 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 investi-
gacin, por lo que se pueden encontrar en libros y en la red otras ecuacionesdistintas pero con coeficientes muy parecidos.
La figura E.2 ilustra un par de cubos con los componentes de color RGB yYUB respectivamente. El cdigo MATLAB usado para generar estas imgenesse muestra en la misma figura
E.5. Conversin RGB a gris
La conversin del modelo RGB a una escala de grises de blanco a negroobedece a la respuesta cromtica de los sensores en el ojo humano1 y se da
1En el ojo huma hay aproximadamente 6 millones de receptores de color -conos- y 134millones de receptores en blanco y negro -bastones-. En total se promedian 140 millones de
-
E.6. CAPUTRA DE FOTOS EN MATLAB 317
mediante la frmula siguiente:
gris = 29.9%_rojo+ 58.7%_verde+ 11.4%_azul (E.3)
Curiosamente, esos porcentajes corresponden con los porcentajes de conossensores al rojo, los conos sensores al verde y los conos sensores al azul. El cdigoen MATLAB que implementa la frmula es:
>f=imread(frissellBW.png); %Lectura de la imagen
>imagenBW=uint8(f(:,:,1)*0.299+f(:,:,2)*0.587+f(:,:,3)*0.114);
>figure (2)
>imshow(imagenBW); %Exhibicin de la imagen
Hay una funcin que simplifica el hecho de acordarse de los porcentajes, estafuncin 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. Caputra de fotos en MATLAB
Previamente, asegrese de conectar su webcam a la PC y de haber iniciadoMATLAB. Entonces buscamos ahora los adaptadores de video que MATLABreconoce como isntalados en la computadora: teclee en la ventana de comandosla funcin imaqhwinfo.
>imaqhwinfo
ans=
InstalledAdaptors: {matrox winvideo}
MATLABVersion: 7.13 (R2011b)
ToolboxName: Image Acquisition Toolbox
ToolboxVersion: 4.2 (R2011b)
Ntese que la funcin ha detectado los adaptadores Matrox y WinVideo.En este caso se usar el adaptador WinVideo por lo que se desea obtenerinformacin de ste: teclee la siguiente linea en la ventana de comandos la lineasiguiente:
>vidInfo=imaqhwinfo(winvideo,1)
ans=
DefaultFormat: YUY2_160x120
DeviceFileSupported: 0
DeviceName: Chicony USB 2.0 Camera
DeviceID: 1
ObjectConstructor: videoinput(winvideo, 1)
SupportedFormats: {1x5 cell}
receptores.
-
318 APNDICE E. TRATAMIENTO DE IMGENES EN MATLAB
Note que el formato por defecto es YUY2_160X120. Veamos que otrosformatos de imagen hay en la estructura SupportedFormats.
>vidInfo.SupportedFormats
ans=
YUY2_160x120 YUY2_176x144 YUY2_320x240 YUY2_352x288 YUY2_640x480
El siguiente paso es la creacin de un objeto de video de entrada deltipo winvideo. Esto se hace utilizando la funcin videoinput (adaptor_name, device_id, supported_format). Donde adaptor_name es una cadena queidentifica el adaptador que se va a utilizar: matrox o winvideo. devide_ides un nmero entero que identificar al dispositivo que se va a utilizar, sup-ported_format es el formato de imagen deseado.
>vidObj=videoinput(winvideo,1,YUY2_320x240)
ans=
Summary of Video Input Object Using Chicony USB 2.0 Camera.
Acquisition Source(s): input1 is available.
Acquisition Parameters: input1 is the current selected source.
10 frames per trigger using the selected source.
YUY2_320x240 video data to be logged upon START.
Grabbing first of every 1 frame(s).
Log data to memory on trigger.
Trigger Parameters: 1 immediate trigger(s) on START.
Status: Waiting for START.
0 frames acquired since starting.
0 frames available for GETDATA.
Para el caso de que solamente haya formatos YUY, se puede forzar a retornarimgenes en formato RGB mediante la siguiente lnea:
set(vidObj,ReturnedColorSpace,rgb);
Para visualizar la foto, abra una ventana de previsualizacion con la funcinpreview.
preview(vidObj);
Una vez creado el objeto de video y creado un puerto de imagen, ya se puedeempezar a realizar la captura de fotogramas. Para sto se utiliza la funcinframe=getsnapshot(vidObj), que devuelve un fotograma, es decir, una matrizde pixeles.
foto = getsnapshot(vidObj);
-
E.7. CAPTURA ITERACTIVA DE UNA REGIN POLIGONAL 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 gen-eracin de una mscara basada en esa zona.
Entonces la cmara se enciende y toma una foto en el formato dado. As, siel formato elegido es RGB, entonces foto es una matriz de 320x240x3. Paravisualizar esta foto use la funcin imshow.
imshow(foto)
Para borrar el objeto de video, primero hay que vaciar los datos de la fotocon la funcin flushdata y luego ya se puede borrar objeto de video con lafuncin delete.
flushdata (vidObj);
delete(vidObj);
E.7. Captura iteractiva de una regin poligonal
Una tarea que resulta muy potente es el marcado de una regin sobre unaimagen. Si la captura puede realizarse en forma controlada por algn usuario,
-
320 APNDICE E. TRATAMIENTO DE IMGENES EN MATLAB
entonces es posible realizar algn procesamiento sobre esa regin elegida. Lafunciones MATLAB que permite realizar esta captura son:}
handle=impoly: Permite realizar el marcado de una regin sobre la lti-ma imagen mostrada con la funcin imshow. El marco se realiza indicandolos vrtices de un polgono no regular sobre la respectiva imagen. El pol-gono puede cerrar marcando el ltimo vrtice sobre el primero. El handlees un nmero que identifica a una estructura con el algoritmo de marcadoy la lista de vrtices capturados.
resume(h): La funcin impoly congela al intrprete de comandos deMATLAB. Con esta funcin se reasume la ejecucin de un programa oscript.
mascara_BW=createMask(handle): crea una imagen del mismo tamaoque la imagen original. Esta imagen solamente tiene pixeles negros -dentrodel polgono- y pixeles blancos -fuera del polgono-.
El cdigo de la figura E.3 ilustra el proceso de captura de una regin en unaimagen en escala de grises y la generacin de la respectiva mscara. Al final delcdigo la funcin whos BW regresa el siguiente resultado.
>whos BW
>
Name Size Bytes Class
BW 1192x1611 1920312 logical
Ntese que el tipo de dato correspodiente a la imagen BW no es unnmero.
E.8. Procesamiento por bloques
En MATLAB y en particular en Image Processing Toolbox existe el con-cepto bloques distintos2 los cuales son particiones rectangulares que dividena una imagen en seciones de m por n. La caja de herramientas crea losBloques distintos superponindose en la matriz de la imagen a partir de laesquina superior izquierda, sin que se solapen. Si los bloques no se ajustan ex-actamente sobre la imagen, la caja de herramientas crea bloques distintos querebasan a la imagen y agregndoles ceros de relleno sobre los mrgenes inferiory 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 queel usuario especifica. Esta funcin debe recibir el bloque y devolver un bloquede las mismas dimensiones aunque no necesariamente dle mismo tipo de dato.Entoncesblkproc ensambla de nuevo los bloques retornados por la funcinpara recrear una imagen de salida.
2El concepto en ingls es Distinct Blocks y puede encontrarse en https://nf.nci.org.au/fa-cilities/software/Matlab/toolbox/images/block8.html
-
E.9. OTRAS FUNCIONES 321
Figura E.4: Imagen de 15 por 30 dividida en bloques de 4 por 8 con so-lapamientos de 1 por 2. Imagen provista de https://nf.nci.org.au/facilities/soft-ware/Matlab/toolbox/images/block9.html
Por ejemplo, la siguiente linea aplica la funcin dct2 a una imagen:
espectro=blkproc(imagenBW,[8,8],@dct2)
La funcin blkproc tambin permite definir bloques distintos que sesolapan unos con otros, es decir, que el usuario puede especificar renglones ycolumnas extra de pixeles fuera del bloque y cuyos valores son consideradoscuando se invoca a la funcin de procesamiento. la figura E.4 ilustra muestrauna matriz de 15 por 30 para la cual se ha elegido generar bloques distintosde 4 por 8 con un solapamiento de 1 por 2, es decir, cada bloque tiene unrengln arriba y abajo de solapamiento y 2 columnas a izquierda y derecha desopalamiento.
Para indicar este solpamiento, el usuario debe proveer un argumento adi-cional a la funcin blkproc. Por ejemplo, para procesar los bloques en lafigura E.4 con la funcin myfunc, el usuario invoca:
B = blkproc(A,[4 8],[1 2],@myfun)
E.9. Otras funciones
bskfunarrayfunc: http://www.mathworks.com/help/matlab/ref/arrayfun.html
-
322 APNDICE E. TRATAMIENTO DE IMGENES EN MATLAB