Introducción a MatLab y Tollbox Image Processing

Anuncio
Guía
1
Facultad: Ingeniería.
Escuela: Biomédica
Asignatura: Imágenes Médicas
Introducción a MatLab y
Tollbox Image Processing
Objetivos
• Introducir
• Introducir
el
conceptos
uso
del
básicos
de
Image
Processing
imágenes
ToolBox
de
digitales.
MatLab.
Recomendaciones
• Tenga orden y aseo para trabajar
• Siempre que tenga duda del procedimiento a realizar, consúltelo con el docente o instructor
• Todas las piezas y componentes que se quiten se deben de ir guardando en forma ordenada
• Siempre anote lo que haga, aún lo mas irrelevante, ya que al final cuando el sistema se tiene
desensamblado se vuelve complejo
• Siempre aplique las normas de seguridad que le explicará el docente o
instructor
• Los circuitos eléctricos dentro del equipo utilizan voltajes los cuales soncapaces de causar
algún daño debido a los choques eléctricos por lo que sedebe de tener en cuenta las normas de
seguridad eléctrica.
• Familiarizarse con el sistema de desconexión de la energía eléctrica
• Los cables de alto voltaje y los capacitores de este equipo guardan energía que puede
provocar algún choque eléctrico, por lo que antes de manipularse se deberán descargar.
• No aplique energía eléctrica al equipo, hasta que esté seguro que las desconexiones que ha
realizado se han restaurado.
• Al finalizar el laboratorio se debe dejar en la misma condición en que se encontró, aún los
accesorios y herramientas utilizadas.
Equipo
Computadora con MatLab y Processing Image Toolbox
Introducción Teórica
FUNDAMENTOS
1
Guía
1
Una imagen digital esta compuesta de píxeles los cuales pueden definirse de alguna manera como
pequeños puntos en la pantalla o imagen. Cada píxel es capaz de proporcionar información visual
acerca de una pequeña región en particular de la imagen. A partir de esto, se puede considerar a una
Imagen Digital, como un arreglo de instrucciones de cómo se encuentra coloreado cada píxel. En
general se puede decir que una imagen de m por n si esta compuesta de m píxeles en la dirección
vertical y n píxeles en la dirección horizontal. Es decir que tener una imagen de 512 x 1024 píxeles,
significa que la imagen contiene en sí información para 524288 píxeles, los cuales requiere mucha
memoria. Por lo tanto, la compresión de las imágenes es algo esencial para el procesamiento eficiente
de la imagen. El sistema de coordenadas empleado para la ubicación de cada píxel de la imagen es
como se muestra la figura
FIGURA 1.1. Sistema de coordenadas en la ubicación de cada píxel.
Las imágenes digitales en MATLAB se representan por medio de un arreglo de números
reales o complejos. Dicho arreglo puede ser bidimensional o tridimensional, dependiendo del
tipo de imagen de que se trate.
PROFUNDIDAD DE BITS
La Profundidad de Bits viene determinada por la cantidad de bits utilizados para definir cada píxel.
Mientras mayor sea la profundidad de bits, mayor será la cantidad de tonos (escala de grises o color)
que se pueden representar. Las imágenes digitales se pueden producir en blanco y negro (en forma
bitonal), a escala de grises o a color.
Una imagen bitonal está representada por píxeles que constan de 1 bit cada uno, que pueden
representar dos tonos (típicamente negro y blanco), utilizando los valores 0 para el negro y 1 para el
blanco o visceversa.
Una imagen en escala de grises está compuesta por píxeles representados por múltiples bits de
información, que típicamente varían entre 2 a 8 bits o más.
2
Guía
1
Una imagen a colores está típicamente representada por una profundidad de bits entre 8 y 24 o
superior a ésta. En una imagen de 24 bits, los bits por lo general están divididos en tres grupos: 8 para
el rojo, 8 para el verde, y 8 para el azul. Para representar otros colores se utilizan combinaciones de
esos bits. Una imagen de 24 bits ofrece 16,7 millones (2 24 ) de valores de color. Cada vez más, los
escáneres están capturando 10 bits o más por canal de color y por lo general imprimen a 8 bits para
compensar el "ruido" del escáner y para presentar una imagen que se acerque en el mayor grado
posible a la percepción humana.
Independientemente del numero de colores que el sistema pueda desplegar, MatLab puede almacenar y
procesar imagenes con altas profundidades de bits :
- 224 colores para imagenes RGB uint8
- 248 colores para imagenes RGB uint16
- 2159 colores para imagenes RGB double
Estas imagenes se desplegan mejor en sistemas con color de 24 bits, pero usualmente lucen bien en
sistemas de 16 bits.
Para poder determinar la profundidad de bits de la pantalla del sistema se debe introducir el siguiente
comando en el prompt de MatLab:
>> get (0,'ScreenDepth')
ans =
32
El entero que MatLab retorna representa el número de bits por cada píxel de la pantalla. Es obvio
entonces, que el tamaño del archivo estará definido por la profundidad de bits con la que se trabaje,
dado que para calcular el tamaño del archivo se ha de proceder calculando primero el área de la
imagen y luego multiplicandola por la profundidad de bits que se selecciona.
FORMATO O TIPOS DE DATOS
Un entero es un número que no tiene una parte fraccional, el cual puede ser positivo, negativo o cero.
Normalmente, se utiliza un signo negativo para designar un entero negativo. Sin embargo, una
computadora puede guardar información en bits unicamente, es decir, solamente puede hacer uso de
dos valores para lograr la representación anterior, 0 y 1. Cuando un entero es declarado como no
signado (uint), el significado de ello es que el bit mas significativo en la representación de un dato se
toma como lo que és, un dato significativo y no como un signo. MatLab tiene cuatro tipos de datos
enteros signados y cuatro no signados. Los del tipo signado permiten trabajar con enteros negativos así
como con enteros positivos, pero no pueden representar un rango amplio de numeros como lo hacen
los tipos no signados dado que un bit es utilizado para designar el signo del número, si es positivo o
negativo. El tipo no signado permite un rango mayor de numeros, pero estos únicamente puedenestar
en el rango de los enteros positivos, o el cero.
3
Guía
1
La información de tipo Punto Flotante, provee los medios para guardar y manipular numeros con parte
fraccionaria y un amplio rango de ramaños. El standar ANSI describe tres tipos de puntos flotantes de
almacenaje conocidos como:
- float,
- double
- long double
MatLab construye la información del tipo de precisión doble (double) de acuerdo al estandar 754 de la
IEEE. Cualquier valor almacenado como double requiere 64 bits,en un formato que se detalla a
continuación:
Por defecto Matlab almacena la mayoría de los datos en vectores de clase doble (double). Sin embargo,
para procesamiento de imágenes, esta representación de datos no es siempre la ideal, ya que el número
de píxeles en una imagen puede ser muy grande. Para reducir requerimientos de memoria las versiones
nuevas de Matlab puede almacenar píxeles en uint8 (enteros de 8 bits sin signo). Las operaciones
permitidas en Matlab para trabajar con píxeles uint8 son:
- Representación de imágenes
- Lectura de la imagen a partir de un formato (imread).
- Reordenar vectores (reshape, cat).
- Guardar o cargar un fichero .MAT.
4
Guía
1
- Funciones all (devuelve un 1 si todos los elementos de un vector valen 1) y any (devuelve un 1 si
cualquier elemento de un vector vale 1).
- Operadores lógicos y de indexación.
- Operaciones relacionales.
- La función find se puede utilizar con vectores de datos uint8, pero devuelve un vector de dobles.
Aparte de las indicadas, Matlab NO puede realizar la mayoría de las funciones con datos uint8. En
particular, las peraciones matemáticas no están permitidas. Sin embargo, la mayoría de las funciones
del Toolbox de Imagen aceptan como entradas uint8.
Convertir de una a otro formato o tipo de datos es sencillo, de la siguiente manera:
>> Ima=im2double(Ima); % Convierte una imagen con nombre Ima de uint8 a double.
>> Ima=im2uint8(Ima); % Convierte una imagen con nombre Ima de double a uint8.
FORMATOS DE IMÁGENES SOPORTADOS POR MATLAB
MatLab soporta los siguientes formatos de imágenes:
.BMP, .HDF, .JPEG, .PCX, .TIFF, .XWB
La mayoría de las imágenes disponibles hoy en día , se encuentran en el formato JPEG, el cual es el
nombre para el standard de compresión de imágenes que más se utiliza.
Una imagen puede ser truecolor o indexada. Una imagen indexada, de altura h y anchura w, se
almacena mediante dos matrices: una matriz de índices tamaño h x m y un mapa de colores. Cada
celda de la matriz de índices corresponde a un pixel de la imagen y contiene un índice a un color
concreto del mapa de colores. Por ejemplo, para una imagen en color de 8 bits hay 256 posibles
colores; cada celda de la matriz de índices tiene un valor entero entre 0 y 255 que es un índice a uno de
los 256 colores descritos en el mapa de colores. Al trabajar en MatLab se deben considerar múltiples
factores como la manera en la que se carga una imagen, el formato correcto, guardar la información de
diferentes maneras, como desplegar una imagen, conversiones entre diferentes formatos de imágenes,
etc.
FORMATOS DE TRABAJO EN MATLAB
- Imagen de Intensidad (Imagen en escala de grises)
Representa una imagen como una matriz, donde cada elemento tiene un valor que se corresponde a
cuan brillante u oscuro debería ser coloreado el píxel en la posición correspondiente. Existen dos
formas de representar el número que a su vez representa la brillantez del píxel. La clase double, asigna
un número flotante (número con decimales), entre 0 y 1 a cada píxel. El valor 0 corresponde al Negro y
el 1 al Blanco. La otra clase es la uint8 la cual asigna un entero entre 0 y 255 para representar la
brillantez de un píxel. El valor 0 corresponde al Negro y 255 al Blanco. La clase uint8 requiere
aproximadamente un octavo de almacenamiento comparado con lo que requiere la clase double. Sin
embargo, debe considerarse el hecho que muchas funciones matemáticas pueden aplicarse únicamente
con la clase double.
- Imagen Binaria
5
Guía
1
Este formato de imagen también guarda una imagen como una matriz pero un píxel de la misma
únicamente tiene dos posibles colores Blanco o Negro (y nada entre ellos). Este formato de imagen
asigna 0 para el Negro y 1 para el Blanco.
- Imagen
Indexada
Es una forma práctica de representar las imágenes a color. Una imagen indexada guarda una imagen
como dos matrices. La primera matriz tiene el mismo tamaño que la imagen y un numero para cada
píxel. La segunda matriz se conoce como Mapa de Color (Colormap) y su tamaño puede diferir del de
la imagen. Los números en la primera matriz indican el número a usar en la matriz Mapa de Color. Por
ejemplo, si se considera una matriz 3 por 3:
>> W=[1 2 3; 2 3 2; 3 2 1] ; y un mapa de color asociado de longitud 3:
>> mapa = [1 0 0; 0 1 0; 0 0 1] ; donde la primera fila (primera tripleta) es rojo, la
segunda verde y la última azul. Entonces,
>> W=[1 2 3; 2 3 2; 3 2 1];
>> mapa = [1 0 0; 0 1 0; 0 0 1];
>> image(W)
>> colormap(mapa)
El mapa de colores es una matriz que tiene tres columnas, una por cada color básico (rojo, verde y azul
o RGB) y una fila por cada posible color. Para el ejemplo de 256 colores, el mapa de colores sería una
matriz de tamaño 256 x 3. Cada fila del mapa de colores describe un color concreto y contiene tres
números en punto flotante, con un valor entre 0 y 1, que dan las cantidades de rojo, verde y azul que
tiene el color. Así, por ejemplo, si la fila 6 contiene los valores [0.062745 0.031373 0] ello indica que,
en ese mapa de colores, el color número 6 no contiene azul y contiene intensidades pequeñas de rojo y
verde. Muchas imágenes en blanco y negro se almacenan con un mapa de 256 colores (niveles de gris),
pero en este caso, cada nivel contiene las mismas cantidades RGB, es decir, las tres celdas de cada fila
contienen el mismo valor. La instrucción utilizada para el trabajo con el mapa de colores en mapa es
colormap(m), la cual permite cambiar el mapa de colores que se utiliza en la representación. En
general, m es una matriz con tres columnas, de modo que la pésima fila determina las proporciones, en
la escala RGB, del i-ésimo color utilizado. Para más comodidad, MATLAB dispone de una serie de
mapas de colores predefinidos, que se pueden imponer mediante colormap(mapa), donde mapa puede
tomar uno de los valores siguientes:
6
Guía
1
- Imagen RGB (Truecolor)
Este es otro formato para imágenes a color. Se presenta en la forma de un arreglo de mxnx3 de clases
uint8, uint16, single, o double cuyos valores de píxel especifican valores de intensidad. Este
representa una imagen con tres matrices de tamaños que concuerdan con el de la imagen. Cada matriz
corresponde a uno de los colores básicos Rojo, Verde o Azul y da establecen cuanto de cada uno de
estos colores debe ser usado en un determinado píxel.
- Imagen Múltiples-Frames
Cuando se requiere hacer estudios de secuencias de imágenes, este formato es eindicado. Por ejemplo
en imágenes médicas donde se requiere el estudio de secuencias de cortes transversales, longitudinales,
etc..
CONVERSIÓN ENTRE FORMATOS DE TRABAJO DE IMAGENES
Para convertir imágenes entre los diferentes formatos disponibles, MatLab con su
7
Guía
1
Image Processing Toolbox cuentan con una serie de comandos que facilitan realizar tales
procedimientos:
El comando mat2gray es útil si se tiene una matriz que representa una imagen pero los valores que
representan la escala de grises no son adecuados. El comando mat2gray automáticamente re-escala
todas las entradas a valores que se encuentren entre 0 y 255 (si se utiliza uint8) o 0 y 1 ( si se utiliza
double).
LECTURA DE ARCHIVOS
Las imágenes que desean ser procesadas, normalmente se encuentran en la forma de un archivo,
mientras que el trabajo en MatLab se desarrolla con una imagen vista como una matriz. Estas imágenes
una vez procesadas deben ser guardadas en un formato de imagen que sea compatible con otros
programas, tal como JPEG, TIFF, etc,.
La función imread lee imágenes que se encuentren en cualquiera de los formatos de archivo de
gráficos de imágenes, con cualquier profundidad de bit. La mayoría de las imágenes utiliza 8 bits para
guardar los valores de los píxel. Como ya se explico, cuando estos son guardados MatLab los guarda
como clase uint8. Para formatos de archivo que soportan información de 16 bits, PNG y TIFF por
ejemplo, MatLab guarda las imágenes como clase uint16.
Para imágenes indexadas, imread siempre lee el mapa de color dentro de una matriz de clase double,
aunque el mismo arreglo de la imagen sea clase uint8 o uint16.
LECTURA DE MÚLTIPLES IMÁGENES DE UN ARCHIVO GRAFICO
MatLab soporta archivos gráficos con diferente formato, tales como HDF y TIFF, que pueden contener
múltiples imágenes. Por defecto, imread importa solo la primera imagen de un archivo de este tipo.
Para importar las imágenes adicionales desde el archivo, se debe utilizar la sintaxis soportada por el
formato del archivo. Por ejemplo, cuando se usan archivos TIFF, se puede utilizar un valor índice con
imread
8
Guía
1
identifica la imagen dentro del archivo que se requiere importar. Así, este ejemplo lee una serie de 8
imágenes de un archivo TIFF y guarda las imágenes en un arreglo de 4 dimensiones. Se puede utilizar
imfinfo para determinar cuantas imágenes han sido guardadas en el archivo:
>> rm=uint8(zeros(128,128,1,8));
>> for frame = 1:8
>> [rm(:,:,:,frame),map]=imread(‘rm.tif’,frame);
>> end
DESPLEGADO DE IMÁGENES EN MATLAB
No todos los comandos para el desplegado de una imagen requieren tener Image Processing Toolbox.
Tal es el cado se los siguientes comandos:
A veces la imagen no puede ser desplegada en escala de grises aunque haya sido previamente
convertida a una imagen en escala de grises. Es entonces que se puede hacer uso del comando
colormap(gray) para “forzar” a MatLab a usar una escala de grises al momento de desplegar una
imagen.
Si el MatLab tiene el Image Processing Toolbox instalado, es recomendable en lugar de utilizar los
comandos anteriores, el comando imshow
Procedimiento
9
Guía
1
NOTA :
Etiquete con explicaciones cada una de las partes de las instrucciones que utilizo en la
práctica, en MatLab, luego del ; en una instrucción se coloca % y posteriormente se
puede escribir sin que perjudique la ejecución de la instrucción. Si hay un salto de línea,
se debe volver a colocar el carácter anterior. Esto le será útil como una buena técnica de
estudio para el parcial práctico.
PARTE I. Binarización de una imagen.
>> clear
>> close all
>> Ima= imread('sp01.gif');
>> figure(1), imshow(Ima);
>> ImaFil = Ima(100,:);
>> ImaCol = Ima(:,256);
>> figure(2), imshow(ImaFil);
>> figure(3), imshow(ImaCol);
>> max(max(Ima))
¿Cual es el resultado obtenido?, Un número aproximadamente igual a la mitad de este será utilizado
para declarar la variable x.
>> syms x
>> x=128;
>> ImaBin1=Ima>x
>> ImaBin2=Ima<x
>> figure(4), imshow(ImaBin1);
>> figure(5), imshow(ImaBin2);
Visualice ambas figuras y establezca la diferencia entre ellas.
PARTE II. Mapa de Colores, imread, imshow e imwrite.
>> clear
>> close all
1
Guía
1
>> imabmp1=imread('Noies.bmp');
>> imatif1=imread('Nena.tif');
>> imajpg1=imread('Castell.jpg');
>> imabmp2=imread('H_24.bmp');
>> imatif2=imread('Hombro.tif');
>> imajpg2=imread('Aneuri.jpg');
Verifique como aparece cada una de estas imágenes, como matrices o arreglos de matrices en el
Workspace. Comente cada una de ellas. Proceda de la siguiente manera:
>> [indimabmp1,map]=rgb2ind(imabmp1,255);
En este punto verifique como ha cambiado el Workspace. Intente presentar la imagen obtenida en
diferentes mapas de colores así:
>> imshow (indimabmp1), colormap(cool);
>> imshow (indimabmp1), colormap(spring);
>> imshow (indimabmp1), colormap(pink);
Ahora inténtelo con el mapa de color asignado, de la siguiente manera:
>> imshow (indimabmp1), colormap(map);
Realice una nueva conversión:
>> indimabmp1gr = ind2gray(indimabmp1,map);
Muestre el resultado
>> imshow (indimabmp1gr);
Vuelva a realizar las pruebas intentando mostrar la imagen antes convertida con los Mapas de Colores
utilizados anteriormente. ¿Qué resultado obtuvo?. Guarde la imagen original.
>> imwrite (indimabmp1gr,'Noies.bmp');
Cambie el mapa de color de las imágenes cargadas, y guárdelas en su directorio de trabajo.
PARTE III. Lectura de una imagen Multiframe.
El Toolbox de Procesamiento de Imágenes provee soporte para guardar múltiples imágenes en un
mismo arreglo. Cada imagen separada es lo que se conoce como Frame. Primero se ha de crear un
arreglo en cuatro dimensiones que permitirá que en él sean arreglados cada uno de los Frames.
>> mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array
1
Guía
1
donde, 128 x 128 es la medida en píxels de cada una de las imágenes en los Frames y 27 es el número
de Frames que la componen.
>> for frame=1:27
>> [mri(:,:,:,frame),map] = imread('mri.tif',frame);
>> end
Con la etapa anterior, se extraen todos los Frames los cuales pueden desplegar ser desplegados
individualmente de la siguiente manera:
>> figure;imshow(mri(:,:,:,6),map);
>> figure;imshow(mri(:,:,:,12),map);
>> figure;imshow(mri(:,:,:,24),map);
O si se quiere desplegar todo el conjunto a la vez, unicamente hace falta:
>> montage(mri,map);
PARTE IV. Histograma de una imagen.
Limpiar el workspace y cerrar todas las ventanas abiertas
>> clear
>> close all
Cargar un demo del Image Processing de MatLab
>> load clown
Presentar la imagen y su mapa de color asociado
>> figure(1), imshow(X,map),colorbar;
>> axis on ;
>> title('IMAGEN ORIGINAL EN COLOR');
Presentar la imagen en blanco y negro:
>> i = (1:256)'/256;
>> mapbn = [i i i];
>> figure(2), imshow(X,mapbn),colorbar;
>> axis on
>> title('IMAGEN EN BLANCO Y NEGRO');
Mejorar el contraste de la imagen
>> ColorMax = max(X(:));
>> Y = X/ColorMax*256;
>> figure(3), imshow(Y,mapbn), colorbar;
>> axis on, title('IMAGEN CON MEJORA DE CONTRASTE');
Presentar el histograma de las imágenes, notando las diferencias entre ambos.
1
Guía
1
>> figure(4),subplot(2,1,1),imhist(X,mapbn);
>> figure(4),subplot(2,1,2),imhist(Y,mapbn);
Presentar la imagen original con múltiples mapas de colores, que sirven de referencia en la misma
imagen:
>> figure(5), imshow(Y,flag), colorbar;
>> figure(6), imshow(Y,hot), colorbar;
>> figure(7), imshow(Y,autumn), colorbar;
>> figure(8), imshow(Y,winter), colorbar;
Análisis de resultados
•
•
•
¿Qué es una imagen TrueColor?
•
¿Cómo puede conseguirse una imagen indexada partiendo de una imagen TrueColor?. Presente un
ejemplo.
•
Desarrolle el siguiente procedimiento, e indique que diferencias encuentra entre las dos imágenes
que se correspondan en color y la razón de estas diferencias.
¿Qué es un histograma y que ayuda a determinar?
Defina las siguientes clases utilizadas en el Image Processing Toolbox: uint8, uint16, double,
logical
>> [X,map] = imread('Gaudi.bmp');
>> figure(1), imshow(X,map)
>> title('IMAGEN ORIGINAL CON SU PROPIO MAPA DE COLOR');
i = (1:256)'/256;
>> mapred1= [i zeros(256,1) zeros(256,1)];
>> mapgre1= [zeros(256,1) i zeros(256,1)];
>> mapblu1= [zeros(256,1) zeros(256,1) i];
>> figure(2), imshow(X,mapred1)
>> title('IMAGEN ROJO 1');
>> figure(3), imshow(X,mapgre1)
>> title('IMAGEN VERDE 1');
>> figure(4), imshow(X,mapblu1)
>> title('IMAGEN AZUL 1');
>> mapr= [ones(256,1) zeros(256,1) zeros(256,1)]; mapred2=mapr.*map ;
>> mapg= [zeros(256,1) ones(256,1) zeros(256,1)];mapgre2=mapg.*map ;
>> mapb= [zeros(256,1) zeros(256,1) ones(256,1)];mapblu2=mapb.*map ;
1
Guía
1
>> figure(5), imshow(X,mapred2)
>> title('IMAGEN ROJO 2');
>> figure(6), imshow(X,mapgre2)
>> title('IMAGEN VERDE 2');
>> figure(7), imshow(X,mapblu2)
>> title('IMAGEN AZUL 2');
investigación complementaria
•
Investigue la instrucción o el conjunto de estas, que permitirían obtener un conjunto de
filas de una imagen y poderlo visualizar posteriormente.
•
Investigue la instrucción o el conjunto de estas, que permitirían obtener un conjunto de
columnas de una imagen y poderlo visualizar posteriormente.
•
Investigue el comando imfinfo, identifique cada uno de los datos que proporciona y su
utilidad.
•
En que se diferencian las imágenes guardadas en diferentes modalidades en el formato
.BMP, es decir, si se tienen imágenes de 16 bits, de 24 bits, de 32 bits.
•
¿Que es un archivo .m y en que se diferencia de un archivo .mat.?
Información adicional
-
www.us.es/edan/asignaturas/ CN3/BREVES%20APUNTES%20MATLAB.pdf
- www.iit.upco.es/palacios/matlab/
-
www.mathworks.com/access/helpdesk/help/toolbox/images/images.shtml
1
Descargar