UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS CARRERA DE RADIOTECNOLOGIAS E IMÁGENES MANUAL DE LABORATORIO Reconstrucción de imágenes Traducido por M. Sc. Marlon Mejía RTA Junio Silva Junio del 2014 UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas LABORATORIO DE RECONSTRUCCION DE IMÁGENES BIOMEDICAS LABORATIO # 1 Principios de Matlab y Su Aplicación en Matrices Objetivos: 1. familiarización de los alumnos con los conceptos y entorno de trabajo de Matlab 2. Operaciones en Matlab con matrices (tipos, sumas y restas con matrices etc) Introducción: Breve Historia de MatLab MatLab significa Matrix Laboratory, una definición clara sobre MatLab es que se trata de un software de alto nivel para cálculos numéricos y simbólicos. MatLab fue creado por Cleve Moler en los años 70, quien fuese el creador de las rutinas LINPACK y EISPACK, las cuales dieron origen a MatLab. El reto fue que estudiantes no programaran toda una serie de algoritmos en FORTRAN para llevar a cabo algún análisis numérico o simbólico. La solución fue MatLab, el cual actualmente es distribuido por MathWorks, Inc desde 1984. Algunas características importantes sobre MatLab, es relativamente lento en comparación con FORTRAN, ya que MatLab es un lenguaje de interpretación; al programar con MatLab es más corta la estructura, existe una gran variedad de ToolBoxes, es simple de entender y usar. FAMILIARIZANDOSE CON MATLAB 1. icono de acceso al programa Matlab: Indica el nombre del programa y la version UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 2. Pantalla principal de Matlab y pantallas auxiliares de Matlab Command Window Workspace (Ventana de Comandos) Current Directory (Estacion de Trabajo) (Directorio Actual) Lista de ficheros y carpetas en el directorio actual. Muestra las variables creadas así como su tipo y su valor. Aquí se introducen los comandos y también es posible recuperar instrucciones ejecutadas anteriormente con ayuda de la tecla (↑) del cursor. Esto nos ayuda a ahorrar tiempo Command History (Historial de Comando) Almacena las instrucciones introducidas indicando fecha y hora de la cesión. 3. Manejo de Dock y Undock: Undock UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 4. Manejo de los Menus: Edit Help (Ayuda) Deskop Hacer pruebas con las funciones Dock y Undock para ver su funcion. usar el menu Deskop para restablecer el Layout por defecto usar el menu Deskop para crear un Layout Personalizado. usar el menu Edit para Borrar la ventana de comando (Command window). usar el menu Edit para Borrar el historial de comandos (Command history). usar el menu Edit para borrar el espacio de trabajo (Workspace). 5. Manejo de Matrices en Matlab instrucciones: A continuación se detallan una serie de operaciones, realizar las operaciones solicitadas utilizando el programa Matlab. a. introducir la siguiente Matriz en Matlab y asignarle la Variable A A= 1 1 0 0 1 0 0 1 1 ¿Qué sucede en la Ventana de Variables? ¿Qué sucede en la ventana de Historial de Comandos? Matriz es un conjunto ordenado de elementos formados en filas y columnas de forma rectangular. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas b. introducir la siguiente Matriz en Matlab y asignarle la Variable B 0 1 1 B= 0 0 1 0 1 0 ¿Qué sucede en la Ventana de Variables? ¿Qué sucede en la Ventana de Historial de Comandos? c. crear una variable C que será la suma de la matriz A con la matriz B (hacerlo de forma manual) C= A + B C= 1 1 0 0 1 0 0 1 1 + 0 1 1 0 0 1 0 1 0 = ¿Qué sucede en la Ventana de Variables? ¿Qué sucede en la Ventana de Historial de Comandos? Para poder sumar o restar matrices, estas tienen que ser de igual dimensión. Se suma posición por posición respectivamente. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas d. Crear una variable D que sera la resta de la matriz A con la matriz B (hacerlo de forma manual) D= A - B D= 1 1 0 0 1 0 0 1 1 - 0 1 1 0 0 1 0 1 0 = e. Transpuesta de una Matriz: Encontrar la transpuesta de las matrices A y B (hacerlo de forma manual) A' B' A=m*n entonces A’=n*m. las filas de la matriz original pasan a ser columnas en la traspuesta. f. multiplicación de una matriz por un escalar. Realizar las siguientes operaciones: 6*A 9*B 5*C 7*A 10*D 3*C 4*B 8*C 7*D 6*D+1*A 8*B+3*C 10*A+21*B 5*A-2 g. realizar las siguientes operaciones con matrices: 3*A+2*C 2*B+A 5*B+A 7*B+3*C UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas LABORATORIO DE RECONSTRUCCION DE IMÁGENES BIOMEDICAS LABORATIO # 2 Procesamiento de Imágenes en MatLab Objetivos: 6. conversión de decimal a binario y viceversa 7. Que el estudiante conozca conceptos básicos de procesamiento de imágenes Introducción Matlab almacena las imágenes como vectores bidimensionales (matrices), en el que cada elemento de la matriz corresponde a un sólo pixel. Trabajar con imágenes en matlab es equivalente a trabajar con el tipo de dato matriz. Este laboratorio introduce algunos conceptos básicos de procesamiento de imagen. El ejemplo comienza con la lectura de una imagen en el espacio de trabajo de MATLAB. El ejemplo a continuación, realiza algún ajuste de contraste en la imagen. Por último, se escribe la imagen ajustada a un archivo UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Conversión de Decimal a Binario Con la ayuda del procedimiento enseñado en clase y el comando dec2bin para convertir los siguientes números decimales a binarios: dec2bin(#) UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Conversión de Binario a Decimal Con la ayuda del procedimiento enseñado en clase y el comando bin2dec para convertir los siguientes números decimales a binarios: bin2dec(‘#’) De binario a decimal UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas PROCEDIMIENTO: Pasos a realizar: Paso 1: Leer y mostrar una imagen Paso 2: Compruebe cómo aparece la imagen en el espacio de trabajo Paso 3: Mejora de contraste de imagen Paso 4: Escribir la imagen en un archivo de disco Paso 5: Compruebe el contenido del archivo recién escrita. PASO 1: leer y mostrar una imagen en primer lugar, limpiaremos el área de trabajo de MatLab de las variables y cerrar las ventanas abiertas. usamos el comando close all o clear all. para leer una imagen, utilice el comando imread. Este comando lee una de las imágenes de ejemplo incluidos en la caja de herramientas,cráneo.jpg , y la almacenamos en una matriz denominada I. >> l = imread ('craneo.jpg’); visualizar la imagen la caja de herramientas incluye dos funciones de visualización de la imagen: imshow e imtool. imshow: es la función fundamental de la caja de herramientas de visualizacion de images. este permite visualizar una imagen de tipo unit 8 o double. imtool: inicia la herramienta de imagen que presenta un entorno integrado para la visualización de imágenes y la realización de algunas tareas comunes de la imagen de proceso. la herramienta de imagen proporciona todas las capacidades de visualización de imágenes de imshow sino que también proporciona acceso a varias otras herramientas para la navegación y la exploración de imágenes, tales como barras de desplazamiento, la herramienta pixeles Región, la herramienta de información de la imagen y la herramienta de ajuste de contraste. >> imshow (I) muestra la imagen en escala de grises pount.tif >>imtool (I) muestra la imagen con la herramienta pixel region. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas PASO 2: Compruebe como parece la imagen en el espacio de trabajo La función imread devuelve los datos de imagen en la variable I, MATLAB puede almacenar imágenes como uint8, uint16, o matrices dobles. También puede obtener información sobre las variables del espacio de trabajo mediante una llamada al comando whos >> whos MatLab reponde con: Name I Size 239x211 Bytes Class Attributes 50429 uint8 PASO3: Mejora de contraste de imagen pout.tif es una imagen de contraste un poco bajo, para ver la distribución de las intensidades en pout.tif, puede crear un histograma llamando a la función imhist (preceda la llamada a imhist con el comando figure de modo que el histograma no sobrescriba la visualización de la imagen I en la ventana de la figura actual). UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas >> figure, imhist (I); nótese como el rango de intensidad es bastante estrecho. no cubre el rango potencial de [0, 255], y le faltan los valores altos y bajos que se traduciría en un buen contraste. la caja de herramientas ofrece varias formas de mejorar el contraste de una imagen. una forma es llamar a la función histeq para difundir los alores de intensidad en toda la gama de la imagen, un proceso llamado ecualización de histograma. >>I2=histeq (I); mostrar la nueva imagen ecualizada, I2 en una ventana nueva figura. >>figure, imshow (I2) nos muestra la versión ecualizada de cráneo.jpg UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Llame imshit de nuevo para crear un histograma de la imagen I2 ecualizada.. si se comparan los dos histogramas, el histograma de I2 está más extendido que el histograma de I1 >>figure, imhist (I2) la caja de herramientas incluye muchas otras funciones que llevan a cabo el ajuste de contraste, incluyendo las funciones imadjust adapthisteq. la caja de herramientas incluye una herramienta interactiva, llamada la herramienta de ajuste de contraste, que se puede utilizar para ajustar el contraste y el brillo de un imagen que aparece en la herramienta de imagen. Para utilizar esta herramienta, llame a la función imcontrast o acceda a la herramienta de imagen. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas >>imshow ('craneo.jpg') >>imcontrast (gca) PASO 4: Escribir la imagen en un archivo de disco para escribir la imagen recién ajustada I2 a un archivo, utilice la función imwrite. si se incluye la extensión de nombre de archivo. Png', la función imwrite escribe la imagen en un archivo portable “network” graphisc (PNG), pero se puede especificar otros formatos. >>imwrite (I2, 'craneo2.png'); PASO 5: Compruebe el contenido del archivo recién escrita. para ver que imwrite escribió al archivo, utilice la función imfinfo. >> imfinfo ('craneo2.png') la función imfinfo devuelve información sobre la imagen en el archivo, como su formato, tamaño, anchura y altura. ans = filename : ‘craneo2.png’ FileModDate: '02-jun-2014 13 :58 :20 ‘ FileSize: 52262 Formato: 'png' ormatVersion: [] Anchura: 335 Altura: 446 Bitdepth: 8 UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas ColorType: "grayscale" FormatSignature: [137 80 78 71 13 10 26 10] Mapa de colores: [] Histograma: [] InterlaceType: 'none' Transparencia: 'none' SimpleTransparencyData: [] BackgroundColor: [] RenderingIntent: [] Cromaticidades: [] Gamma: [] XResolution: [] YResolution: [] ResolutionUnit: [] XOffset: [] YOffset: [] OffsetUnit: [] SignificantBits: [] ImageModTime: '2 Jun 2014 19:58:20 +0000' Título: [] Autor: [] Descripción: [] Copyright: [] UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas CreationTime: [] Software: [] Descargo de responsabilidad: [] Advertencia: [] Fuente: [] Comentario: [] OtherText: [] UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas LABORATORIO DE RECONSTRUCCION DE IMÁGENES BIOMEDICAS LABORATORIO # 3 Procesamiento de Imágenes en MatLab Objetivos: 1. que el estudiante identifique los planos RGB en una imagen 2. que el estudiante reconstruya imágenes monocromáticas 3. que el estudiante sea capaz de cambia o mejorar las imágenes con los diferentes comandos de matlab. INTRODUCCION lo datos de una imagen digital son adquiridos y manipulados en una matriz de volumen de elementos llamada vóxel. una imagen se reconstruye analizando cada vóxel y proyectando el resultado en una superficie bidimensional subdividida en elementos de imagen llamados pixeles. la reconstrucción 3D de una imagen es un campo atractivo en general, por las técnicas de procesamiento digital de imágenes que en ella intervienen, especialmente en las imágenes biomédicas. Este tema sido muy desarrollado y ha sido aplicado en la práctica en casi todas las modalidades modernas aplicadas a la tomografía. Hay muchos problemas que todavía siguen sin resolverse o se puede mejorar. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas PROCEDIMIENTO: 1. Descomposición de una imagen RGB en sus 3 planos. Ejecute los siguientes pasos: >>RGB = imread('cerebro.jpg'); >>imshow(RGB) Identifique las propiedades de la imagen con el comando >>Whos De que tamaño es la imagen___________________________________________ Que clase es la imagen________________________________________________ Descomponiendo los planos Ejecutar todos los comandos: >>Im_R=RGB(:,:,1); >>Im_G=RGB(:,:,2); >>Im_B=RGB(:,:,3); Usando el comando “subplot” para mostrar las tres componentes (R G B) de una imagen RGB: Ejecute el siguiente comando: >>subplot(3,1,1), imshow(Im_R),subplot(3,1,2),imshow(Im_G),subplot(3,1,3), imshow(Im_B) 2. Reconstrucción de imágenes monocromáticas: Construye la matriz vinculada a la imagen de la figura 1. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 3. Construye la matriz vinculada a la imagen de la figura 2. 4. Extraer de la imagen de la figura 3 la región de interés mostrada en la figura 4. 5. Usar los siguientes comandos para extraer una porción de la imagen: I=imread(‘tumor.jpg’); Imshow(I); J=imcrop; Seleccionar con el ratón la región de interés Figure,imshow(J); __________________________ También se puede hacer fijando [xmin ymin ancho y alto] I=imread(‘tumor.jpg’); I1=imcrop(I, [60 40 100 90]); imshow(I) figure,imshow(I1) UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 6. Operaciones aritméticas y geométricas con imágenes a.- Realiza las siguientes operaciones con la figura (Imagen RM). Compara los diferentes tamaños de las imágenes resultantes. ¿Qué conclusiones sacas? Observación: El archivo de la imagen m83 se los proporcionará el Instructor. b.- Aumenta una cierta región de la imagen siguiente para verla mejor. Ejecutar los siguientes comandos: >>I=imread('m83.jpg'); >>imshow(I) >>zoom on %Marcar la región a aumentar %Dar clic con el mouse en el recuadro de selección %aparecerá la imagen de la región marcada c.- Modifica el tamaño de la imagen de la figura (Imagen RM). >>I=imread('m83.jpg'); >>J=imresize(I,0.5,'bilinear'); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas >>imshow(J) %Tambien se puede usar: >>J1=imresize(I,[30 40]); %Reduce la imagen al tamaño de 30*40; 3 %0 filas por 40 columnas >>imshow(J1) d.- Gira 30º la imagen anterior >>IR=imrotate(J,30); %Rota la imagen 30 grados >>imshow(IR) 6. Conectividad de píxeles Determina el objeto de la imagen de la figura “Letras”) que está en la posición (columna 43, fila 38), el que está en la posición (185, 68) y el que está en la posición (212, 181), suponiendo que un objeto viene dado por un conjunto de píxeles de igual tonalidad y conectados por vecindad (entornos de 8 vecinos). Letras Letras filtradas UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas >>BW1 = imread('text.png'); >>c = [43 185 212]; >>r = [38 68 181]; >>BW2 = bwselect(BW1,c,r,4); >>imshow(BW1), figure, imshow(BW2) 7. Histograma de una imagen Determina con MatLab el histograma de la imagen de la figura Lista de ficheros y carpetas en el directorio actual. Espina dorsal 8. Transformaciones puntuales Aplica a la imagen de la figura 9 una transformación que ajuste los tonos de gris al rango [0 255] La transformación más sencilla es la siguiente: El valor de la pendiente a se determina por la condición T(63)=255, es decir, a·60=255. Por lo tanto, a 4.05. Como la pendiente es mayor que uno la imagen aumenta su contraste en el intervalo [0 63]. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Figura Espina dorsal También se puede realizar un ajuste de los tonos de gris del intervalo [0 60] al intervalo [0 255] mediante el comando imadjust de MATLAB: Programa I=imread('spine.tif');imshow(I); J=imadjust(I,[0 0.247],[]); Observa que 63/255=0.247. figure,imshow(J) UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas LABORATORIO DE RECONSTRUCCION DE IMÁGENES BIOMEDICAS LAORATORIO # 4 Filtrado de Imágenes en MatLab objetivos: 1. La presente guía de laboratorio tiene como objetivo la familiarización de los alumnos con los conceptos filtrado de imágenes, Los beneficios que se obtienen con el filtrado y los comando usados. INTRODUCCION: Mostrando Diferentes Tipos de Imágenes Mostrando Imágenes Indexadas Mostrando Imágenes en Escala de Grises Mostrando Imágenes Binarias Mostrando Imágenes en Color Verdadero Si necesita ayuda, puede ver la ayuda en Image Types en el Toolbox. Mostrando Imágenes Indexadas Para mostrar imágenes indexadas, usando ya sea imshow ó imtool, hay que especificar ambos, la matriz de la Imagen y el mapa de color (colormap). En ésta guía usaremos la variable X para representar una Imagen indexada en el espacio de trabajo (workspace), y map para representar el mapa de color (colormap). imshow(X,map) Ó UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas imtool(X,map) Para cada pixel en X, estas funciones muestran el color guardado en la fila correspondiente del mapa. Si los datos de la matriz de Imagen son de clase doublé, el valor 1 indica la primera fila en el mapa de color, el valor 2 indica a la segunda fila, y así sucesivamente. No obstante, si los datos de la matriz de la Imagen es de clase uint8 ó uint16, el valor 0 indica la primera fila en el mapa de color (colormap), el valor 1 indica la segunda fila, y así sucesivamente. Este detalle es manejado automáticamente por las funciones imtool and imshow. Mostrando imágenes en Escala de Grises Para mostrar una Imagen en escala de grises, usando imshow ó imtool, hay que especificar la matriz de la Imagen como argumento. En ésta guía usaremos la variable I para representar una Imagen en escala de grises en el espacio de trabajo. imshow(I) ó imtool(I) Ambas funciones muestran la Imagen escalando los valores de intensidad para que funcionen como índices en el mapa de colores de escala de grises. Si la Imagen es tipo double, un valor de pixel de 0.0 es mostrado como negro, un valor de pixel de 1.0 es mostrado como blanco, los valores de pixel entre 0 y 1 son mostrados como tonos de gris. Si I es uint8, entonces un valor de pixel de 255 es mostrado como blanco. Si es de tipo Uint, entonces un valor de pixel de 65535 es mostrado como blanco. Imágenes en escala de grises que tienen Rangos inconvenientes: En algunos casos, los datos de la Imagen a mostrar en escala de grises pueden tener un rango de muestra que está afuera del rango convencional Por ejemplo: [0,1] para single ó Arreglos double, [0,255] para Arreglos uint8, [0,65535] para Arreglos uint16, ó [32767,32768] para Arreglos uint16 ). Por ejemplo si se filtra una Imagen en escala de grises, alguno de los datos de salida del filtro puede caer fuera del rango de los datos originales. Para mostrar rangos de datos no convencionales como imágenes, se puede especificar el rango de muestra directamente, usando la siguiente sintaxis para ambas funciones imshow e imtool, UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas imshow(I,'DisplayRange',[low high]) ó imtool(I,'DisplayRange',[low high]) Si se usa una matriz vacía ([]) para mostrar el rango, estas funciones escalan los datos automáticamente, configurando el Low y el High para el mínimo y el máximo valor dentro del arreglo. El ejemplo siguiente filtra una Imagen en escala de grises, creando un rango no convencional de datos. El ejemplo llama a la imtool para mostrar la Imagen , usando la opción automática de escalamiento. Note que en el ejemplo el rango de muestra de la Imagen en la esquina inferior derecha de la ventana del “Image Tool”. I = imread('testpat1.png'); J = filter2([1 2;-1 -2],I); imtool(J,'DisplayRange',[]); Mostrando Imágenes Binarias En MatLab, una Imagen binaria es de clase lógica. Imágenes binarias contienen solo ceros y unos. Los pixeles con el valor cero son mostrados con color negro; Los pixeles con el valor uno son mostrados con color blanco. Nota Para que Matlab interprete la Imagen como binaria, debe ser de clase lógica. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Para mostrar una Imagen binaria usando ya sea imshow o imtool, hay que especificar la matriz de la Imagen como argumento. El ejemplo siguiente lee una Imagen binaria en MatLab y muestra la Imagen . En ésta guía usaremos la variable BW para representar una Imagen binaria en el espacio de trabajo. BW = imread('circles.png'); Figure,imshow(BW) ó imtool(BW) Cambiando los colores de una Imagen Binaria Se puede invertir los colores de una Imagen binaria cuando son mostrados, de tal manera que los valores cero sean mostrados como blancos y los valores unos sean mostrados como negros. Para realizar esto se usa el operador NOT (~). Figure,imshow(~BW) ó figure,imtool(~BW) UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Se pueden mostrar también imágenes binarias usando la sintaxis del mapa de color indexado. Por ejemplo el siguiente comando especifica un mapa de color de 2 filas que muestra los ceros como rojo y los unos como azules. Imshow(BW,[1 0 0; 0 0 1]) ó imtool(BW,[1 0 0; 0 0 1]) Mostrando imágenes en Color Verdadero “Truecolor Images” Truecolor images ó imágenes en color verdadero, también llamadas imágenes RGB, representan valores de color directamente en lugar de hacerlo a través de un mapa de color (colormap). Una Imagen en color verdadero es un arreglo m*n*3. Para cada pixel (r,c) en la Imagen , el color es representado por la tripleta (r,c,1:3). Para mostrar imágenes en color verdadero, se debe usar imshow ó imtool, especificando la matriz de Imagen como argumento. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Por ejemplo, el código siguiente lee imágenes de color verdadero en los espacios de trabajo de MatLab y posteriormente las muestra en pantalla. En ésta guía usaremos la variable RGB para representar una Imagen de color verdadero en el espacio de trabajo. RGB = imread(`peppers.png'); imshow(RGB) ó imtool(RGB) Sistemas que usan 24 bits por el pixel de la pantalla pueden desplegar las imágenes truecolor directamente, porque ellos asignan 8 bits (256 niveles) cada uno a los planos rojo, verde y azul. En los sistemas con menos colores, el imshow despliega la Imagen usando una combinación de aproximación de color. ______________________________________________________________________________________ _______________________ Comprendiendo los filtros de Textura Las funciones que vamos a trabajar operan todas de manera similar: Ellas definen una vecindad alrededor del pixel de interés, calcula la estadística para cada vecindad y usa esos valores como los valores del pixel de interés en la Imagen de salida. Este ejemplo muestra como la función rangefilt opera en un arreglo (Imagen ) simple. A = [ 1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15; 16 17 18 19 20 ] A= UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 1 6 11 16 2 7 12 17 3 4 5 8 9 10 13 14 15 18 19 20 B = rangefilt(A) B= 6 11 11 6 7 12 12 7 7 7 6 12 12 11 12 12 11 7 7 6 La siguiente figura muestra como el valor del elemento B(2,4) fue calculado a partir de A(2,4). Por defecto, la función rangefilt usa una vecindad de 3*3 pero se puede especificar una vecindad de forma diferente y de tamaños diferentes. Determinando los Valores de los Pixeles en La Imagen filtrada de Salida Las funciones stdfilt y entropyfilt operan similarmente, definen una vecindad alrededor del pixel de interés y calculan la estadística para los vecinos para determinar el valor del pixel en la Imagen de salida. La función stdfiltf calcula la desviación estándar para todos los valores en la vecindad. La función entropyfilt calcula la entropía de las vecindades y asigna ese valor al pixel de salida. Es de hacer notar que la función entropyfilt define por defecto una vecindad de 9*9 alrededor del pixel de interés. Para calcular la entropía de una Imagen se usa la función ent.ropy UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Ejemplo: Usando las Funciones de Textura El siguiente ejemplo ilustra como las funciones filtros de textura pueden detector regiones de textura en una Imagen. En la figura de abajo el fondo es liso; Hay muy poca variación en los valores de escala de grises. En el primer plano la superficie del contorno de las monedas presenta más textura. En ésta Imagen , los pixeles en el primer plano tienen mayor variabilidad y por lo tanto mayor rango de valores. La función rangefilt hace que los bordes y contornos de las monedas sean más visibles. Ejemplo: 1. Lea la Imagen y muéstrela en pantalla I = imread('osea.jpg'); imshow(I) 2. Filtre la Imagen con la función rangefilt y muestre los resultados. Note que el filtro de rango realza los bordes y los contornos de las superficies de las monedas. K = rangefilt(I); figure, imshow(K) UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Realizando Filtrado Lineal de Imágenes Usando imfilter El filtrado de las imágenes usando ya sea la correlación ó la convolución puede realizarse usando la función imfilter. En éste ejemplo filtraremos una Imágen con un filtro de 5*5 conteniendo pesos iguales. De tal manera que éste filtro es usualmente denominado filtro promediador. I = imread('tac.png'); h = ones(5,5) / 25; I2 = imfilter(I,h); imshow(I), title('Original Image'); figure, imshow(I2), title('Filtered Image') Imágen Original Imágen Filtrada Cuando se filtra una Imágen Cuando se filtra una Imágen , un relleno de ceros puede resultar en una banda de color negro alrededor de la Imágen filtrada, como se muestra en el siguiente ejemplo. I = imread('eight.tif'); h = ones(5,5) / 25; I2 = imfilter(I,h); imshow(I), title('Original Image'); figure, imshow(I2), title('Imágen Filtrada con un borde negro') UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Imágen Original Imágen Filtrada Para eliminar el artefacto “relleno de ceros” alrededor de los bordes de las imágenes, la función imfilter ofrece la mejor solución denominada Replicación de Bordes. En la replicación de Bordes el valor de cualquier pixel fuera de la Imágen es determinado replicando el valor del pixel más cercano al borde. Esto es ilustrado en la siguiente figura: Pixeles del Borde Replicados Para filtrar usando la replicación de bordes, hay que agregar el argumento 'replicate' a la función imfilter. I3 = imfilter(I,h,'replicate'); figure, imshow(I3); title('Imágen filtrada Usando Replicación de Bordes') UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas La función imfilter soporta otras opciones de rellenado en bordes, tales como 'circular' y 'symmetric'.. Filtrado Multidimensional La función imfilter puede manejar imágenes multidimensionales y filtros multidimensionales. Una propiedad conveniente del filtrado es filtrar imágenes tri-dimensionales con un filtro de bi-dimensiones lo cual es equivalente a filtrar cada plano de las imágenes tridimensionales individualmente con el mismo filtro bi-dimensional. En el siguiente ejemplo se muestra lo fácil que es filtrar cada plano de color de una Imágen en color verdadero (truecolor) con el mismo filtro. 1. Lea una Imágen RGB y muéstrela en pantalla. rgb = imread('peppers.png'); imshow(rgb); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 2. Filter the image and display it. h = ones(5,5)/25; rgb2 = imfilter(rgb,h); figure, imshow(rgb2) Filtrando Imagen es con Filtros Predefinidos La función fspecial produce varios tipos de filtros predefinidos. Después de crear un filtro fspecial se puede aplicar a las imágenes usando imfilter. En éste ejemplo se ilustra la aplicación del filtro unsharp a una Imágen en escala de grises. La máscara de filtro unsharp tiene el efecto de hacer que los bordes y los detalles finos de la Imágen sean más realzados. I = imread('moon.tif'); h = fspecial('unsharp'); I2 = imfilter(I,h); imshow(I), title('Imágen Original) figure, imshow(I2), title('Imágen Filtrada') UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Imágen Original Imágen Filtrada UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Laboratorio #5 Reconstrucción Sagital y coronal a partir de los cortes axiales Objetivos: 1. Familiarización de los alumnos con los comandos usados por MatLab para reconstruir los cortos coronales y sagitales a de los cortes horizontales. Introducción: Explorando cortes de un conjunto de datos de MRI Este ejemplo muestra como explorar un volumen de datos extrayendo los cortes de un conjunto de datos de IRM usando las funciones imtrasformand , tformarray. Paso 1: cargar y ver el IRM Horizontal: Este ejemplo usa un conjunto de datos de IRM el cual está contenido en MatLab y que es usado en los ejemplos de ayuda. D está comprendido por 27 128 por 128 cortes horizontales de un conjunto de datos de escaneo de IRM de un cráneo humano. los valores en D van desde el rango o hasta 88, por lo que el mapa de color es necesario para generar una imagen con un rango visual útil. las primeras 2 dimensiones son espaciales, la tercera es la dimensión de color, con tamaño 1 debido a que es indexada en el mapa de color. en este caso la cuarta dimensión es espacial. de tal manera que tenemos 3 dimensiones espaciales en D y podemos usar los comandos imtransfrom o tformarray para convertir los cortes horizontales en cortes sagitales (mostrando la vista desde el lado de la cabeza) o cortes coronales (frontales, mostrando la vista desde el frente o por detrás de la cabeza). las dimensiones espaciales de d son ordenadas de la manera siguiente: Dimensión1: frontal hacia detrás de la cabeza (Rsotral/anterior a caudal/posterior). Dimensión 2: de izquierda a derecha de la cabeza. Dimensión 3: de abajo hacia arriba de la cabeza. Un factor importante es que los intervalos de muestreo no son los mismos a lo largo de las tres dimensiones. Las muestras a lo largo de la dimensión vertical son espaciadas 2.5 veces más anchos que a a lo largo de la dimensión horizontal. Cargue el conjunto de datos de IRM y vea los 27 cortes horizontales como un montaje. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas load mri; montage (D,map) title ('Cortes Horizontales'); paso2: extrayendo los cortes sagitales de los cortes horizontales usando el comando IMTRANSFORMT el comando siguiente extrae todo los datos necesarios para un corte mediosagital M1= D(: , 64, : , :) ; size (M1) ans= 128 1 1 27 no obstante no podemos ver M1 todavía ya que es una matriz 128 por 1 por 1 por 27. por lo que usamos el comando reshape (o squeeze) puede convertir M1 en una imagen 128 por 27 la cual si se puede mostrar con el imshow M2 = reshape (M1, [128 27 ]); size (M2) figure, imshow (M2, map); title ('sagital- Raw Data'); ans= UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas 128 27 . Las dimensiones de M2 son ordenadas de la manera siguiente: dimensión 1: frontal hacia detrás de la cabeza (rostral a caudal) dimensión 2: desde abajo hacia arriba de la cabeza (inferior a superior). podemos obtener una vista más satisfactoria transformando M2 para cambiar su orientación e incrementar el muestreo a lo largo de la vertical dimensión (inferior –superior) por un factor de 2.5 haciendo el intervalo de muestreo en las tres dimensiones espaciales. T0 = maketform ('addine', [0 -2.5; 1 0; 0 0 ]); R2=makeresampler ({'cubic','nearest'}, 'fill'); M3= imtransform (M2. T0,R2); figure, imshow (M3, map); title ('sagital – IMTRANSFORM') PASO3: Extrayendo los cortes sagitales desde los cortes horizontales usando TFORMARRAY UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas en este apso obtendremos los mismos resuoltados que en el paso 2, pero usando tformarray parair de 3 dimensiones espaciales a 2 dimensiones en una sola operación. T1=maketform ('affine',[-2.5 0; 0 1; 68.5 0]); inverseFcn = @(X,t) [X repmat (t .tdata, [size (X,1) 1])]; T2= maketform ('custum', 3,2, [],inverseFcn, 64); Tc = maketform ('composite',T1,T2); R3= makeresampler ({'cubic,'nearest','nearest'},'fill'); Tformarray tranasforma las tres dimensiones espcaiales de D en una salida "D enun solo paso. nuestra imagen de salida es de dimensiones 66 po 128. M4 = tformarray(D,Tc,R3,[4 1 2],[1 2],[66 128],[],0); el resultado es idéntico a la respuesta del paso anterior usando imtransform. figure, imshow (M4,map}; title ('sagital – TFORMARRAY'); PASO4: CREANDO Y MOSTRANDO LOS CORTES SAGITALES Creamos una matriz 4 d (la tercera dimensión es la dimensión del color) esto puede ser usado para crear una secuencia de imágenes que va desde la izquierda hacia la derecha. T3= maketform ('affine', [-2.5 0 0; 0 1 0; 0 0 0.5; 68.5 0 -14]); S=tformarray (D,T3,R3,[4 1 2 ], [1 2 4],[66 128 35],[],0); viendo los cortes sagitales como un montaje (separando cada imagen para verlos individualmente) S2=padarray (S, [6 0 0 0],0,'both'); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas figure, montage (S2,map) title ('Cortes Sagital'); paso 5: creando y mostrando los cortes coronales construir los cortes coronales es similar construir los cortes sagitales T4 =maketform('affine', [-2.5 0 0 ; 0 1 0; 0 0 -0.5; 68.5 0 61]); C=tformarray (D,T4,R3,[4 2 1],[1 2 4], [66 128 45],[],0); C2=padarray(C,[6 0 0 0], 0, 'both'); figure,montage (C2,map) title('Cortes Coronal'); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Laboratorio # 6 Técnicas de visualización de datos escalares de volumen objetivos: Introducción Típicamente los datos escalares de volumen están compuestos de arreglos de datos en 3D y arreglos de 3 coordenadas de las mismas dimensiones. los arreglos de coordenadas especifican las coordenadas x.y, z para cada punto de datos. Formas de mostrar datos de IRM cambiando el formato de los datos mostrando imágenes de datos IRM Mostrando un contorno de corte en 2D mostrando un contorno de corte en 3D mostrando isosuperficies agregando una isocapa para mostrar un corte superficial definiendo la vista agregando iluminación Cambiando el formato de los datos Los datos de IRM, D, son guardados como un arreglo de 128*128*1*27. la dimensión del tercer arreglo es típicamente usado para los datos de color de la imagen. No obstante dado que estas son imágenes indexadas (ya tienen cargado un mapa de color) por lo que no hay información adicional en la tercera dimensión, por lo que podemos remover esta dimensión usando el comando squeeze, el resultado es un arreglo de 128*128*27. Paso 1: es cargar los datos y transformarlas de 4D a 3D load mri D=squeeze (D); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Mostrando datos de imágenes IRM Para mostrar una imágen IRM, se usa el comando image, indexando la en la matriz de datos para obtener un octavo de la imagen, ajuste la escala axis, e instale el colormap IMR que está cargado junto con los datos. image_num=8; image(D(:,;,image_num)) axis image colormap (map) guarde los limites x , y para usarlas en las siguientes partes del ejemplo x=xlim; y=ylim; visualizando un contorno de corte "D se puede trabajar estos datos de IRM comoun volumen dado que es un cojunto de cortes tomados progresivamente de objetos 3D se usa el comando contourslice para mostrar un grafico de contorno de los cortes del volumen. para crear un grafico de contorno con la misma orientación y tamaño dal de la UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas imagen creada en la primer aporte de esta guia, se debe ajustar la dirección del eje, configurar los limites (xlim, ylim), y configurar la relación de aspecto de datos (daspect). contourslice (D,[],[],image_num) axis ij xlim(x) ylim(y) daspect ([1,1,1]) colormap ('default') este grafico de contorno usa el colormap para mapear el color a los valores de contorno. Visualizando cortes de contorno #d al igual que la imágenes que son objetos "d, los cortes de contorno son objetos #d que se pueden mostrar en cualquier orientación. Por ejemplo se pueden mostrar cuatro cortes de contorno en una vista #d. para mejorar la visibilidad de las lineas de contorno, se incrementa LineWidth a " puntos un punto es igual a 1/72 e una pulgada). UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas phandles= contourslice (D,[],[],(1,12,19,27],8); view (3); axis tight set (phandles,'LineWidth',2) visualizando una iso-superficie se puede usar iso-superficies para mostrar toda la estructura de un volumen, cuando se combina con iso.capas, esta técnica puede mostrar información del interior de las iso-superficies. primero, se alisan los datos con somooth3; después se usa isosurface para calcular los iso-datos (isodata). posteriormente se usa patch para mostrar los datos como un objeto grafico. Ds=smooth3(D); hiso= patch(isosurface (Ds,5),… 'FaceColor',*1,.75,.65+,… 'EdgeColor','none'); Agregando una isocapa para mostrar cortes separados de superficie Use isocaps para calcular los datos para otra rodaja que esta visualizada con el mismo iso-valor (5) como la superficie. use el comando usnsmoothed data (D) para mostrar los detalles del interior. Se puede observar este corte desligado de la parte superior de la cabeza en las imágenes de ilustración. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas hcap=patch(isocaps(D,5),… ‘FaceColor’,’interp’,… ‘EdgeColor’,’none’); Colormap (map) Definiendo la vista Defina la vista y configure la relación de aspecto con los comandos, view, axis, deaspect) View(45,30) Axis tight Daspect ([1,1,.4]) UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Agregando ilumincacion Agregue iluminación y recalcule los normales de la superficie basándose en el gradiente de los datos de volumen, lo cual produce una iluminación y alisado (camligth, lighting, isonormals]). Incremente la propiedad ambientStrength de la isocapa para agregarle brillo al color sin afecta la iso-superficieconfigure specularcolorFeflectance de la isosuperficie para hacer el color de la luz especular fegrejada más parecida al color de las iso.superficies para hacer el color de la luz especular reflejada más parecida al colo r de la iso-superficies; después use el comando SpecularExponent para reducir el tamaño del enfoque especular. Lightangle(305,30); Set (gcf, ‘Renderer’,’zbuffer’); ligthting phong Isonormals (Ds, hiso) Set (hcap,’AmbientStrength’,.6) Set (hiso,’SpecularColorReflectance’, 0, ‘SpecularExponent’,50) View (215,30); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas La iso-cqpa usa coloreando de rostro interpolado, lo cual significa que el mapa de color determina el color de la porción en cuestión. Este ejemplo usa el mapa de color provisto con los datos. Para visualizar las iso.capas en otrosw valores de datos, intente cambiando, el valor de iso..superficie o use el comando subvolume. Vea las referencias de la ayuda de matlab y los ejemplos isocaps y subvolume. Implay Mostrando secuencias de fotografías, secuencias de video Implay abre un reproductor de películas para mostrar secuencias de video e imágenes en matlab. Se usa el archivo de menú implay para seleccionar las secuencias de video o imágenes a reproducir. Los botones del menú de implay sirven APRA seleccionar una secuencia dentro en particular de todo el archivo, se puede cambiar la velocidad de los cuadros mostrados para ezplorar sus alcances. Se pueden abrir múltiples implay para ver secuencias diferentes al mismo tiempo. UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Secuencias animadas de imágenes Load cellsequence Implay (cellsequence,10); Exploracion de un conjunto de imágenes IRM Load mristack Implay (mrstack); Play an AVI fileImplay (‘rhinos.avi’); UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS FACULTAD DE CIENCIAS MEDICAS Departamento de Imagenes Biomedicas Bibliografía Traducido del manual de ayuda de MatLAB 7.7 Algunas imagines tomadas del internet