Memoria: Contenido Introducción ........................................................................................................................................ 2 ImageJ ............................................................................................................................................. 3 Anexo I. Uso de ImageJ ....................................................................................................................... 7 Conceptos básicos ........................................................................................................................... 7 Ventana ....................................................................................................................................... 7 Barra de herramientas ................................................................................................................ 7 Barra de estado ........................................................................................................................... 7 Barra de progreso........................................................................................................................ 7 Imágenes ..................................................................................................................................... 7 Stacks (pila) ................................................................................................................................. 8 Bibliografía ........................................................................................................................................ 10 Introducción El presente proyecto de fin de carrera se ha desarrollado para la segmentación de regiones de imágenes de ámbito general, aunque su aplicación esencial es la de segmentación de imágenes desde satélite, permitiendo la detección de nubes. // “Explicar que es segmentación de imágenes” La segmentación de imágenes es un paso esencial en el análisis de imágenes de alto nivel. Permite la cuantificación y visualización de los objetos de interés, y su calidad, depende de la metodología de extracción de la información para la mejor comprensión de los fenómenos en estudio y la posterior interpretación de la escena observada. Nuestra finalidad, la detección de nubes a partir de las imágenes proporcionadas. La segmentación de imágenes consiste en obtener un conjunto de regiones las cuales no se solapan y están bien diferenciadas entre sí, dónde sus fronteras están bien delimitadas. Dónde dichas regiones abarcan todo el espacio de la imagen. Una vez realizada la segmentación pueden observarse cambios relevantes, los cuales si son buenos proporcionarán una buena clasificación de los objetos que comprenden la imagen y por tanto, unos resultados bastante fiables No existe un único método de segmentación de imágenes, por lo que uno de los objetivos es desarrollar diferentes algoritmos de segmentación, utilizando para ello filtros “stack”, los cuales poseen un buen rendimiento para imágenes con ruido, preservando los bordes y detalles. Y terminan cuando satisface la tarea del observador. // “Explicar de dónde sacamos las imágenes y cómo son” // “Explicar de posibilidades de uso de los resultados” Los resultados obtenidos en este proyecto pueden ser aplicados a diferentes ámbitos entre ellos …. El objetivo principal de este proyecto no consistió únicamente en la segmentación de las imágenes sino en la utilización de imágenes con formato propio de la universidad y el uso para ello de la herramienta ImageJ. ImageJ ImageJ es un programa de procesamiento de imágenes de Java el cuál es de dominio público (software libre). Permite la visualización, edición, análisis, procesamiento, archivar e imprimir imágenes de 8, 16 y 32 bits. Así mismo, permite la lectura de diferentes formatos, incluyendo entre ellos TIFF, GIF, JPEG, BMP, DICOM, FITS y RAW. Para ello el ImageJ se apoya en el uso de "stacks", es decir, una serie de imágenes que comparten una única ventana. Cabe destacar el hecho de que es multithreaded, de modo que permite que se puedan realizar operaciones de lectura de archivos de imagen en paralelo con otras operaciones. Permite el cálculo del valor de un píxel determinado y el de estadísticas definidas por el usuario, así mismo, puede medir distancias y ángulos, crear histogramas de densidad. También se apoya en estándar de funciones de procesamiento de imagen, tales como la manipulación del contraste, nitidez, suavizado, borde de detección y filtrado de mediana. Es interesante mencionar que el programa soporta cualquier número de ventanas (imágenes) de manera simultánea, limitado solamente por la memoria disponible. Dispone de calibración de la densidad o escala de grises. 1º Adaptación del formato de las Imágenes al ImageJ Esta primera parte, fue sin duda una de las más relevantes a la hora de realizar el proyecto, ya que hasta el momento, no se disponía de ningún programa, aplicación ó herramienta que permitiese la apertura y guardado de imágenes con formato LCT. Dado que ImageJ fue diseñado con una arquitectura abierta, se pudo realizar la conversión de las imágenes que tenían formato propio. Para ello, hubo que modificar el código fuente de distintos archivos para que detectasen este nuevo formato LCT. Por lo que es un factor a destacar y relevante que la partir de ahora pueda permitirse trabajar, analizar y usarse este formato. Así, cómo volver a almacenar dicha información. Explicar cómo es el formato LCT (Lo de los canales y todo eso como eran.. dios dónde tendremos el papelito de los COJONES que estaba apuntado xD) La peculiaridad que se incluye en este formato que anteriormente no incluía el ImageJ es la apertura de imágenes comprimidas. Así mismo, no sólo se modificó el hecho de que abriese este nuevo formato, si no que se abriese ya en el número de bits indicado (8,16 ó 32). 2º Implementación de Algoritmos Cómo ImageJ proporciona extensibilidad a través de plugins de Java. Se pudo realizar la implementación de los diferentes plugins personalizando la adquisición obtenida. La creación de dichos plugins permitió añadir al ImageJ nuevas funcionalidades necesarias para llevar a cabo el tratamiento de imágenes. Concretamente, se desarrollaron diferentes técnicas para la segmentación de imángenes de satélites de manera que permitirán lograr este cometido. Un espacio de características es un mapeo de la entrada obtenida a través del procesamiento de los datos en pequeños subconjuntos cada vez (en el caso del espacio de color estos subconjuntos pueden ser píxeles individuales). Para cada subconjunto (pixel) una representación paramétrica de la característica es obtenida y mapeada como un punto en el espacio multidimensional del parámetro. En este espacio multidimensional se pueden localizar las características más significativas o importantes como clusters y la meta de este análisis es poder delinear o separar estos clusters. MeanShift Filter Mean-Shift es una técnica usada para el análisis de un espacio de características con densidades complejas multimodales. La utilización de esta técnica se basa en la aplicación recursiva del método para encontrar el punto estacionario más cercano de la función de densidad, ayudando así a encontrar las modas de la misma. Es decir, se repite recursivamente hasta cubrir un número determinado de de iteraciones o cuando no exista más posibles movimientos. Para el uso en los diversos cálculos del algoritmo se han de usar tienen en cuenta dos parámetros, ambos proporcionados por el usuario. o o Radio espacial: Representa el tamaño del Radio que se abarcará para cada pixel en cada una de las iteraciones. Distancia del color: Este concepto está relacionado con las distancia entre los colores dentro del Círculo Estándar de Color. Así, cuanta mayor es la distancia entre los colores dentro del círculo, mayor es el contraste entre ambos. Los casos de aplicación de esta técnica son el filtrado de imágenes preservando bordes y la segmentación. En ambos casos ciertos parámetros han de ser proporcionado por el usuario y puede trabajarse con imágenes tanto en color como en escala de grises (convirtiéndolas a RGB mediante el uso de stacks). Adaptativo Adaptativo que se mueve por valores ya existentes Adaptativo Normalizado //todo esto es una idea, para no olvidarme… pero hay que arreglarlo Adaptativos. Para su implementación hemos hecho uso de la estructura KDTree. Ésta es una estructura de datos particionado del espacio, que organiza los puntos en un Espacio euclídeo de k dimensiones. Lo usamos para hacer una eficiente búsqueda de los n vecinos más cercanos. Hemos usado el paquete KDTree implementado en Java para que busque los n vecinos más cercanos (en valores), por las distintas dimensiones. 1. Adaptativo Primero, inicializamos el kdtree con los valores de la imagen, por cada capa. Una vez inicializado, procedemos a evaluar el primer pixel, buscando los n vecinos más cercanos a él (en valor), y calculamos la media. Volvemos a buscar los n vecinos más cercanos al valor de la media, y así sucesivamente hasta que apenas haya diferencia, o que sobrepase las 100 iteraciones. En ese caso, le asignamos al pixel ese último valor. 2. Adaptativo (valores existentes). 3. Adaptativo Normalizado. Anexo I. Uso de ImageJ Conceptos básicos Ventana La ventana de ImageJ contiene una barra de menú, de herramientas, una barra de estado y otra de progreso. Las imágenes pueden ser copiadas en el cortapapeles, editadas, impresas y guardadas. Barra de herramientas La barra de herramientas cotniene herramientas para hacer selecciones, zoom y desplazamiento de imágenes, y para cambiar el color del dibujo. Al pasar el ratón sobre cada herramienta, aparecerá una breve descripción en la barra de estado. Las herramientas y menús de la parte derecha son creados usando las macros definidas en el fichero ImageJ/macros/StartupMacros.txt. Barra de estado La barra de estado, cuando el cursor está sobre una imagen, muestra las coordenadas del pixel y su valor. Después de ejecutar un filtro, se muestra el tiempo transcurrido y la tasa de procesamiento de píxeles por segundo. Barra de progreso La barra de progreso, localizada a la derecha de la barra de estado, muestra el progreso del tiempo consumido en las operaciones. En caso de que la operación requiera menos de un Segundo, esta barra no será mostrada. Imágenes ImageJ soporta 8 bits, 16-bit y 32-bit (real) y las imágenes en escala de grises de 8 bits y 32 bits de imágenes de color. Imágenes de 8 bits se representan mediante enteros sin firmar en el rango de 0 a 255. Imágenes de 16 bits usa unsigned enteros (0 a 65.535) y de 32 bits en escala de grises las imágenes utilización números de punto flotante. 16-bit y 32-bits en escala de grises las imágenes no son directamente mostrar en los monitores de ordenador, que normalmente sólo puede mostrar 256 tonos de gris. Por lo tanto, los datos se asignan a 8-bits por ventanas. La ventana se define la gama de grises que se muestran los valores: valores por debajo de la ventana son negro, mientras que valores por encima de la ventana son de color blanco. La ventana se define por valores mínimos y máximos que se pueden modificar utilizando Imagen> Ajustar> Brillo / Contraste. ImageJ permite que múltiples imágenes sean mostradas en la pantalla al mismo tiempo. La ventana activa tiene su barra de título resaltada. Todas las operaciones serán realizadas sobre la imagen activa. ImageJ soporta imágenes en escala de grises de 8-bit, 16-bit y 32-bit (real) e imágenes en color de 8-bit y 32-bit. Las imágenes de 8-bit son representadas usando enteros sin signo en el rango 0..255. Las imágenes de 16-bit usa enteros sin signo en el rago 0..65535, y las imágenes en escala de grises de 32-bit usa números en punto flotante. Las imágenes de 16-bit y 32-bit en escala de grises no son mostradas directamente en el monitor de ordenador, que normalmente solo puede mostrar 256 tonos de grises. Por lo tanto, los datos son mapeados a 8-bit por ventana. La ventana define la gama de grises que serán mostrados: valores por debajo de la ventana son negros, mientras que valores por encima de la ventana son de color blanco. La ventana es definida por un valor mínimo y máximo, que puede ser modificado en Image>Adjust> Brightness/Contrast. Stacks (pila) ImageJ abre múltiples archivos de imagen TIFF como una pila, y la guarda como pilas TIFFs multiimagen. Archivo> Importar> Crudo abre otras varias imágenes, los archivos sin comprimir. Archivo> Importar> la secuencia de la imagen se abre una carpeta de imágenes como una chimenea. Para crear una nueva pila, simplemente seleccione Archivo> Nueva> Imagen y defina el "Rodajas" campo a un valor superior a uno. La imagen> submenú Pila contiene los comandos para operaciones de pila común. ImageJ puede mostrar múltiples imágenes en una simple ventana. Estas series de imágenes son denominadas pilas(stacks). Las imágenes que componen una pila (stacks), son denominados “capas” (slices). Todas las capas de la pila deben tener el mismo tamaño y número de bits. Una barra de desplazamiento nos permite movernos por las distintas capas. Si realizamos un filtro, este filtro será aplicado en todas las capas de la pila. ImageJ abre múltiples imágenes TIFF como una pila, y salva pilas como mútiples imágenes TIFFs. El comando File>Import>Image Sequence abre una carpeta de imágenes como una pila. Para crear una nueva pila, simplemente elegimos File>New>Image y en el campo “Slices” introducimos un valor mayor a uno. El submenú Image>Stacks contiene comandos para las operaciones comunes de una pila. Bibliografía [1] Comaniciu, Dorin; Meer, Peter. Mean Shift: A Robust Approach Toward Feature Space Analysis. KDTree http://www.cs.wlu.edu/~levy/software/kd/ ImageJ http://rsbweb.nih.gov/ij/docs/concepts.html