Está en la página 1de 3
Universidad Nacional Autónoma de México Laboratorio de Procesamiento Digital de Imágenes Médicas M. en I. Ernesto Moya Albor Alumno: Valentín Morales Emmanuel No Cta. 302198328 Ingeniería en computación 1 Práctica 2. Manejo básico de imágenes con Matlab RESUMEN En esta práctica nos dimos a la tarea de aprender como se abren, desplegan y guardan imágenes en distintos formatos. I. INTRODUCCIÓN MATLAB incluye un conjunto de funciones (algoritmos) y herramientas gráficas enfocadas al procesamiento, análisis y visualización de imágenes, este conjunto es denominado toolbox de imágenes. Muchas de las funciones del toolbox de imágenes se encuentran escritas en el lenguaje de MATLAB, lo que permite inspeccionar los algoritmos usados. En esta práctica se tocaran los puntos de entrada, salida y visualización de imágenes en diferentes formatos usando las funciones del toolbox. Representanción de los Tipos de imágenes en MATLAB MATLAB soporta varios tipos de imágenes, las cuales se enumeran a continuación: Imágenes Indexadas: Consisten de una matriz de datos y una paleta de colores. La paleta de colores es un arreglo de m filas por 3 columnas la cual contiene valores de punto flotante en el rango de [0,1]. Cada fila de la paleta especifica las componentes roja, verde y azul para un color único. El color de cada pixel es determinado usando el correspondiente valor en la matriz de datos como un indice dentro de la paleta asignada. El valor 1 apunta a la primer fila de la paleta, el valor 2 a la segunda fila, etc. Imágenes de intensidad: Consisten de una matriz de datos, cuyos valores representan intensidades dentro de algún rango, cada elemento en la matriz corresponde a un pixel en la imagen representando niveles de gris, donde la intensidad 0 usualmente representa al negro y la intensidad 1, 255 o 65536 usualmente representa total intensidad, o blanco. Imágenes RGB o a color: Una imagen RGB, a veces es referida como una imagen de color verdadero, en MATLAB es almacenada como una matriz de mxnx3 (m filas por n columnas y una profundidad de 3) que define las componente roja, verde y azul para cada pixel individual. Las imágenes RGB no usan paleta de colores, el color de cada pixel es determinado por la combinación de las intensidades roja, verde y azul almacenadas en cada plano de color en la ubicación del pixel. Los formatos gráficos almacenan las imágenes RGB como imágenes de 24 bits, donde las componentes: roja, verde y azul son cada una de 8 bits, esto da un potencial de 16 millones de colores. Un pixel cuyas componentes de color son (0,0,0) es desplegado como negro y un pixel con las componentes (1,1,1) es desplegado como blanco. II. METODOLOGÍA Durante la práctica nos dimos a la tarea de crear scripts que hagan las funciones básicas en el uso de imágenes, como lo son el abrir una imagen .jpg, hasta una con extensión . raw, la cual se debe de leer e interpretar dependiendo de su tamaño y número de bits que la representan. Terminando en la realización de un video que está formado con la secuencia imágenes .raw. A continuación pongo un par de códigos vistos en el laboratorio: %retrgb.m figure(12) subplot(2,2,1) imshow(retina) subplot(2,2,2) imshow(retinaR,[temp' ceros ceros]) subplot(2,2,3) imshow(retinaG,[ceros temp' ceros]) subplot(2,2,4) imshow(retinaB,[ceros ceros temp']) Universidad Nacional Autónoma de México Laboratorio de Procesamiento Digital de Imágenes Médicas M. en I. Ernesto Moya Albor Alumno: Valentín Morales Emmanuel No Cta. 302198328 Ingeniería en computación 2 %ret.m retina=imread('retinaRGB.jpg','jpg'); retinaR=retina(:,:,1); retinaG=retina(:,:,2); retinaB=retina(:,:,3); temp=0:(1/255):1; ceros=zeros(256,1); figure(8) imagesc(retina) title('Retina RGB') figure(9) imagesc(retinaR) colormap([temp' ceros ceros]) title('Retina Red') figure(10) imagesc(retinaG) colormap([ceros temp' ceros]) title('Retina Green') figure(11) imagesc(retinaB) colormap([ceros ceros temp']) title('Retina Blue') retinaR(13,13) retinaG(13,13) retinaB(13,13) %pie.m rxpie1=imread('rxpie-rodilla.tif',1); rxpie2=imread('rxpie-rodilla.tif',2); rxpie3=imread('rxpie-rodilla.tif',3); rxpie4=imread('rxpie-rodilla.tif',4); figure(19) subplot(2,2,1) colormap(gray(256)) imagesc(rxpie1) subplot(2,2,2) colormap(gray(256)) imagesc(rxpie2) subplot(2,2,3) colormap(gray(256)) imagesc(rxpie3) subplot(2,2,4) colormap(gray(256)) imagesc(rxpie4) %intes.m intestinoRGB=imread('retinaRGB.jpg'); figure(13) imagesc(intestinoRGB) temp=double(intestinoRGB); intestino=temp(:,:,1)*0.2989 + temp(:,:,2)*0.587 + temp(:,:,3)*0.114; figure(14) imagesc(intestino) colormap(gray(256)) Universidad Nacional Autónoma de México Laboratorio de Procesamiento Digital de Imágenes Médicas M. en I. Ernesto Moya Albor Alumno: Valentín Morales Emmanuel No Cta. 302198328 Ingeniería en computación 3 III. RESULTADOS Código en MatLab, tablas y figuras. a) Realiza un script que lea de manera automática todo el conjunto de imágenes y permita seleccionar que plano se desea visualizar en una misma ventana: plano axial, sagital o coronal: %corazons.m clc; clear all; close all; A=zeros(512,512,80); %Creamos los arreglos donde vamos a guardar las imàgenes (AXIAL) B=zeros(80,512,512); %(CORONAL) C=zeros(512,80,512); %(SAGITAL) for i=321:400; %Ciclo para recorrer todas las imgàgenes nombre=['40_' num2str(i) '.tiff']; %num2str cambia de nùm a caracter %A(:,:,i-320)=imread(nombre); %Leemos las imagenes y las colocamos en %las matrices B(i-320,:,:)=imread(nombre); %C(:,i-320,:)=imread(nombre); end %Este end sirve para limitar el ciclo de lectura de las matrices cuando %se cambia a leer las matrices B y C. Cuando se lee y manda a pantalla %la matriz A, se debe de comentar for j=1:512; %Este for sirve para mandar a pantalla las secuencias de las %matrices B y C. Para enviar A se debe de comentar figure(1) %image(A(:,:,i-320)) image(B(:,:,j)) %image(C(:,:,j)) colormap(gray(256)) %axis image pause(.1) %Una pequeña pausa para darle continuidad a la secuencia y %parezca video. end %Fin del ciclo for i.. para la matriz A o del j para matrices B y C a) Realiza una función que abra cualquier imagen raw usando las funciones de lectura de datos binarios de archivos (fopen, fread y fclose) y entregue la matriz de datos en MatLab. b) Utilizando la función para abrir imágenes raw del inciso a), lee las 11 imágenes e investiga como crear un archivo de video (formato avi) para realizar una animación del ciclo cardíaco, poder guardarlo en la computadora y posteriormente reproducirlo fuera de MatLab. %peli.m clear all; close all; clc; mov=avifile('corazon.avi','Compression',' cinepak'); %Creamos el archivo y %le damos los parámetros de tipo de compresión for i=0:10:100; %Ciclo para recorrer todas las imgàgenes fid=fopen( [num2str(i) '_.raw'],'r'); %num2str cambia de nùm a caracter A=fread(fid,[512 512],'uint8'); fclose(fid); A=uint8(A); A=A'; F=figure(1) image(A) colormap(gray(256)) pause(.1) aviobj.KeyFramePerSec = 1; %Tengo dudas sobre este comando, porque al %parecer es el que hace que el video se vea más lento, pero no sirve mov = addframe(mov,F); %Agregamos las tomas de video al archivo %corazon.avi end mov=close(mov); %Cerramos el archivo y listo para verse desde el reproductor %de windows **Mando los códigos y el video en el archivo del correo. IV. CONCLUSIONES La verdad tardé demasiado en terminar está práctica porque no se me hizo tan fácil como a los otros, pero la verdad se logró un muy buen trabajo en el laboratorio y todo salió como se debe. Lo que más me costó fue mandar a pantalla los diferentes planos del corazón, pero al final si se pudo. V. REFERENCIAS http://verona.fi-p.unam.mx/~emoya/ (Página del lab)