PROCESAMIENTO DE IMAGENES

Tareas

Instrucciones

A partir del Enunciado de la Tarea, Ud. deberá implementar -de manea individual- una solución en Matlab u otro lenguaje de programación. El código diseñado debe ser debidamente comentado y explicado, por favor sea lo más claro posible. La nota depende de 3 items: explicacion 20%, algoritmo 20%, calidad de los resultados 40% y prueba 20%. La prueba se tomará en la clase siguiente después de la entrega de la tarea. Los archivos de la solución (ver especificaciones en el párrafo siguiente) deberán comprimirse en un archivo zip. El nombre del archivo zip deberá ser Tx_Nombre_Apellido.zip donde x es el número de la tarea (por ejemplo para la tarea 2 de Juan Cifuentes el archivo seria T2_Juan_Cifuentes.zip). 

Para usuarios MATLAB: Ud. deberá usar la opción "Publish"(ver tutorial). En el archivo zip Ud. deberá incluir el código Matlab creado por Ud. que solucione el problema y los archivos html creados por la función "Publish".

Para usuarios de otros lenguajes de programación: Ud. deberá incluir el código, así como un mini-informe en que explique lo que se realizó con los resultados obtenidos.

INDICACIONES FINALES: El archivo zip debe subirse al sitio indicado en cada tarea antes de la hora acordada. El sitio se cierra a la hora acordada y no se reciben tareas posteriores. En esta página Ud. encontrará un ejemplo de Tarea, que llamamos la Tarea 0.

Tarea 0

Esto es sólo un ejemplo! La idea es que Ud. se familiarice con el tipo de tarea que debe realizar en este curso según las instrucciones.

[ Enunciado ] 

Esta tarea es sobre Análisis de Imágenes. Suponga que Ud. cuenta con una imagen que contiene granos de arroz tomada sobre un fondo oscuro. Ud. debe escribir un programa en Matlab que segmente cada grano de manera individual. Adicionalmente debe contar la cantidad de granos presentes en la imagen y calcular el área de cada grano (en pixels). Deberá presentar el promedio y la desviacón estándar del área. Para esta tarea use la imagen 'rice.png' disponible en Matlab.

[ Solución ] (entregada sólo para esta tarea)

La solución se encuentra en este archivo m-file. El archivo contiene las secciones y comentarios que explica cada uno de los pasos empleados, además se muestran los resultados intermedios. Por favor use en su solución tantos comentarios como sean necesarios para entender la solución. La página html creada por la opción "Publish" de Matlab se puede ver aquí. El archivo zip se encuentra aquí

Una solución en Python se encuentra disponible aquí (desarrollada por Pierre-Victor Chaumier).  

 


Código de Honor e Integridad Académica

Este curso adscribe el Código de Honor establecido por la Escuela de Ingeniería el que es vinculante. Todo trabajo evaluado en este curso debe ser propio. En caso de que exista colaboración permitida con otros estudiantes, el trabajo deberá referenciar y atribuir correctamente dicha contribución a quien corresponda. Como estudiante es su deber conocer la versión en línea del Código de Honor. Además, los estudiantes de este curso declaran conocer Política de Integridad Académica del Departamento de Ciencia de la Computación.


Tarea 1

Conversor de Reloj Analógico a Digital

Entrega: Jueves 30/08/18 - 6:30 pm

[ Enunciado ]

El objetivo de esta tarea es realizar un programa que determine automáticamente la hora de un reloj analógico. En esta carpeta se encuentran 4 fotografías a color de un reloj analógico dorado, que deben ser leídas por un programa y procesadas para determinar automáticamente la hora que aparece en el reloj. El reloj cuenta con tres manecillas: dos manecillas negras gruesas (la pequeña corresponde al horero y la grande al minutero) y una manecilla negra delgada (segundero). 

Se debe realizar un programa que i) encuentre el reloj  en la imagen (es necesario segmentarlo del fondo y del marco), ii) realice una corrección geométrica para que el reloj se vea como un rectángulo [opcional], iii) encuntre el horero, minutero y segundero, iv) estime los ángulos de cada manecilla; y v) calcule la hora señalada indicando horas, minutos y segundos. La entrada del programa es la imagen, la salida es la hora calculada.

El programa debe funcionar correctamente para las 4 imágenes contenidas en la carpeta, no es necesario que funcione para otro tipo de relojes. Este reloj no distingue entre AM y PM.

 

Subir la tarea aquí

Tarea 2

Van-gogh-ización de una foto

Entrega: Viernes 05/10/18 a las 6:30pm.

[ Enunciado ]

El objetivo de esta tarea es utilizar la Transformada de Fourier para detectar las frecuencias de una imagen a color y así transformarla en una imagen que parezca una pintura de Van-Gogh.

En este album de fotos de Chiloé escoja una fotografía, transférmela a una imagen de no más de 1 millón de pixeles manteniendo la proporción alto/ancho y genere una imagen que se parezca a una pintura de Van Gogh.

Subir la tarea aquí

Tarea 3

Restauración de Imágenes Borrosas 

Entrega: Viernes 9/11/18 a las 6:30pm

[ Enunciado ]

El objetivo de esta tarea es restaurar imágenes de caras de personas que hayan sido degradadas con máscaras gaussianas conocidas.

En la base de datos AR-gauss existen para 100 sujetos una imagen enfocada (C0) y 5 imágenes borrosas (G1, G2, G3, G4, G5) que han sido degradadas usando máscaras Gaussianas de 7x7, 19x19, 31x31, 43x43 y 55x55 pixeles. Las máscaras se encuentran guadradas en el mismo directorio AR-gauss como archivos de texto (MaskG1.txt, ..., MaskG5.txt).

En esta tarea Ud. deberá implementar y explicar al menos 5 métodos de restauración de imágenes (de los 5 métodos uno debe ser diseñado por Ud. y los otros 4 pueden ser de Matlab o de alguna librería conocida). Los métodos deben ser probados en las 5 imágenes G de los sujetos 001 y 051 solamente:

face_001_G1.png

face_001_G2.png

face_001_G3.png

face_001_G4.png

face_001_G5.png

face_051_G1.png

face_051_G2.png

face_051_G3.png

face_051_G4.png

face_051_G5.png

En la implementación se podrá usar la máscara Gaussiana correspondiente que produjo la degradación de la imagen.

Para cada una de las 10 imágenes, se debe reportar el error promedio de la restauración definido como el promedio del absoluto de la diferencia de cada pixel entre la imagen original (C0) y la imagen restaurada.

A manera de ejemplo si J es la imagen original del sujeto 001 (face_001_C0.png) y K es la imagen restaurada que se obtiene al restaurar la imagen G3 (face_001_G3.png), entonces el error promedio es el promedio de los valores de la matriz D que ha sido calculada como el absoluto de la diferencia entre J y K, en matlab este error es:

err = mean(abs(J(:)-K(:)));

IMPORTANTE: para este ejemplo, el método de restauración puede usar la imagen  face_001_G3.png y la máscara MaskG3.txt. En el método de restuaración no se puede usar la imagen original face_001_C0.png. La imagen original solo se usará para calcular el error promedio.

Subir la tarea aquí