PARTE 1: NONOGRAMAS
El nonograma o puzzle japonés es un pasatiempo cuyo objetivo es descubrir un dibujo oculto rellenando la cuadrícula con bloques pintados. Los números de los laterales indican la longitud de los bloques pintados en la fila o columna correspondiente, en el mismo orden que estos. Entre dos bloques de cuadrados pintados tiene que haber al menos un cuadrado no pintado.
Observa en el siguiente ejemplo cómo se obtienen los números en los laterales de una imagen (este es el problema directo):
PARTE 2: TOMOGRAFÍAS DE IMÁGENES
La tomografía de una imagen en blanco y negro consiste en dos pasos:
La recogida de datos: La transformada de Radon mide "cuánto blanco" tiene la imagen en cada recta. Si conocemos la imagen, este es el problema directo. La información de la transformada de Radon puede mostrarse en el senograma.
La reconstrucción de la imagen a partir de los datos: Esto corresponde al problema inverso y se consigue aplicando la transformada de Radon inversa mejorada con filtros.
Puedes poner en práctica estas ideas utilizando OCTAVE, un lenguaje de programación para cálculo numérico de acceso libre.
Instrucciones generales
Descarga la siguiente carpeta con todo el material necesario para el taller. 📁
Probablemente se guarde en la carpeta Descargas (Baixades) como un archivo comprimido (.zip). Puedes moverla por ejemplo al Escritorio.
Para descomprimirla, haz clic en el botón derecho del ratón y elige la opción de Extraer (Extreu tot). Puedes elegir el mismo directorio/destino que el archivo descargado.
Abre el programa OCTAVE.
Elige como DIRECTORIO ACTUAL el de la carpeta descargada (.../Escritorio/AMV_Taller...).
En la VENTANA, teclea pkg load image y ejecuta (pulsando intro).
Ya puedes empezar los ejercicios escribiendo en la VENTANA los comandos indicados. No es necesario que abras los archivos .m ni que trabajes en el EDITOR.
* Para limpiar la ventana: clc.
EJERCICIO 1: DATOS PARA UN FANTASMA
El objetivo de este ejercicio es entender cómo se calcula la transformada de Radon y cómo se construye el senograma. Para ello, vamos a utilizar una imagen muy sencilla: un fantasma rectangular blanco en una habitación cuadrada negra.
Elige la posición y el tamaño del fantasma:
X=[X1, X2]; Y=[Y1, Y2];
donde tanto X1, X2 como Y1, Y2 tienen que ser números diferentes entre 1 y 100.
Ejemplo: X=[10, 40]; Y=[20, 50];
Ejecuta el script Ejercicio1.
Si no aparece ninguna imagen, revisa los comandos anteriores. Asegúrate de que después de los números X1 e Y1 hay una coma (sin espacio entre medias) y que todos los números que has escrito están entre 1 y 100.
En la figura 1 aparece la imagen del fantasma.
En la figura 2, tenemos la transformada de Radon para varios ángulos. Ten en cuenta que las gráficas de la transformada de Radon pueden estar rotadas. Fíjate en la siguiente imagen con un ejemplo:
La figura 3 es el senograma. Observa cómo concuerda con las gráficas de la figura 2.
Repite el ejercicio modificando la posición del fantasma. Intenta elegir X e Y de modo que se vea claramente la relación con la transformada de Radon.
EJERCICIO 2: DATOS PARA IMÁGENES
Ahora podemos hacer lo mismo que en el Ejercicio 1 para una imagen más compleja.
Elige la imagen:
I=imread("XXX");
donde XXX es el nombre de la imagen, incluyendo la extensión (p.ej. .jpg). Puedes elegir una imagen de las que aparecen en el EXPLORADOR DE ARCHIVOS (cuyo nombre empieza por "Imagen_") o descargar cualquier otra y copiarla en la misma carpeta.
Ejemplo: I=imread("Imagen_elefante.jpg");
Importante: no te olvides del punto y coma final.
Ejecuta el script Ejercicio2.
Si la imagen es a color, se convierte a escala de grises. También, para evitar trabajar con una imagen muy grande y acortar los tiempos de computación, la imagen puede ser reescalada.
En la figura 1 vemos la imagen usada después de las modificaciones anteriores.
En la figura 2 aparece la transformada de Radon para 0 grados. Recuerda que la altura de la función en cada punto es proporcional a la cantidad de blanco en la recta vertical correspondiente.
En la figura 3 tenemos el senograma de la imagen.
EJERCICIO 3: RECONSTRUCCIÓN DE UN FANTASMA
En este ejercicio vamos a intentar adivinar dónde están dos fantasmas (rectángulos blancos) en una habitación (cuadrado negro).
Ejecuta el script Ejercicio3_1. Esto sitúa a los fantasmas (aleatoriamente).
En la figura 1 aparece su transformada de Radon para 0 y 90 grados. ¿Puedes esbozar dónde están los fantasmas?
Ejecuta el script Ejercicio3_2.
La figura 2 es el senograma. ¿Puedes afinar tu predicción con esta información?
Solución: Ejecuta el script Ejercicio3_3.
En la figura 3, además de la imagen original de los fantasmas, vemos la reconstrucción a partir del senograma (datos completos) y de la transformada de Radon solo para 0 y 90 grados (datos parciales), con y sin filtro en ambos casos. La disposición de las imágenes es la siguiente:
Original | Reconstrucción con dato completo sin filtro | Reconstrucción con dato completo con filtro
Reconstrucción con dato parcial sin filtro | Reconstrucción con dato parcial con filtro
Repite el ejercicio para practicar la reconstrucción "a ojo".
EJERCICIO 4: RECONSTRUCCIÓN DE UNA IMAGEN
Ahora vamos a ver cómo reconstruye la imagen el programa.
Elige la imagen:
I=imread("XXX");
donde XXX es el nombre de la imagen, incluyendo la extensión (.jpg). Puedes elegir una imagen de las que aparecen en el EXPLORADOR DE ARCHIVOS o descargar cualquier otra y copiarla en la misma carpeta.
Ejemplo: I=imread("Imagen_perro.jpg");
Ejecuta el script Ejercicio4.
En la figura puedes ver la imagen original y la reconstrucción con y sin filtro (siempre con dato completo).