Tarea 2
Fecha de Entrega: martes 27 de octubre hasta las 23:59.
1. Introduccin
En esta tarea aprenders sobre procesamiento bsico de imgenes en Python. Adems de co-
nocer cmo representa una imagen el computador. El objetivo de la tarea es que apliques todo el
conocimiento que has aprendido durante el curso, en especial la materia de listas, arreglos y grficos.
2. Explicacin Previa
Para poder trabajar con imgenes es necesario entender como se representa una imagen en un
programa, y cmo se puede operar sobre ella.
En palabras sencillas, una imagen es una matriz donde cada celda representa un color. Cada una
de estas celdas es conocida como pixel. Ahora bien, cada color est representado por tres valores
enteros, uno que representa la intensidad de rojo, otro la intensidad de verde y el ltimo la intensidad
de azul, esto se conoce como el modelo RGB (por las siglas en ingls RedGreenBlue). La intensidad
de cada color va entre 0 y 255, siendo el nmero la cantidad de color. Por ejemplo, el blanco es
[255255255], el negro es [000] (ausencia de color), el amarillo es la mezcla entre rojo y verde, por lo
que estara representado por [2552550]. Para ms detalles se recomienda el siguiente link:
http://en.wikipedia.org/wiki/RGB
Figura 1: Una imagen como la de la izquierda est compuesta por pixeles, como los que se ven en
la figura de la derecha.
Para la tarea debers utilizar el anexo que se incluye al final del enunciado, donde se explica en
detalle cmo leer, mostrar y guardar una imagen en Python.
Al leer una imagen desde un archivo con Python obtendremos un arreglo tridimensional, donde
las dos primeras dimensiones tendremos la posicin del pixel y en la tercera las intensidades de rojo,
verde y azul del pixel respectivamente.
1
2
En la Figura 2, podemos ver una representacin de una imagen de 2x3 pixeles, y como estos
pixeles se ubican en un arreglo en Python.
2
En la Figura 3, podemos ver una representacin de una imagen de 2x3 pixeles, y las intensidades
que poseen cada uno.
Si leemos las imgenes que aparecen en la Figura 2 y Figura 3, la representacin grfica de los
arreglos se vera de la siguiente manera:
2
3. Descripcin del men
(0,5 puntos) A continuacin se detalla el men que debe incluir tu tarea y que acciones debe
realizar. El men tiene un contexto de que existe una imagen en memoria y esta va cambiando a
medida que el usuario le aplica rotaciones o filtros. Despus de finalizar cada accin el programa
debe volver al men principal. Adems, despus de aplicarle una rotacin o un filtro a la imagen
debe preguntarle al usuario si desea guardar la imagen, y en caso afirmativo debe preguntarle el
nombre del archivo con el cul quedar guardada la imagen (0,2 puntos, los cuales ya estn incluidos
en cada tem).
2. Aplicar rotacin (1,0 punto) Muestra al usuario los grados en que puede rotar la imagen
en sentido horario.
1. 90
2. 180
3. 270
3
Figura 5: Imagen original rotada en 90.
3. Aplicar filtro Muestra al usuario los distintos filtros que puede aplicarle a una imagen.
4
2. Sepia (1,0 punto)
Para aplicar filtro sepia a una imagen, el nuevo pixel viene dado por la siguiente
frmula:
rojoNuevo = (rojoOriginal * .393) + (verdeOriginal * .769) + (azulOriginal * .189)
verdeNuevo = (rojoOriginal * .349) + (verdeOriginal * .686) + (azulOriginal * .168)
azulNuevo = (rojoOriginal * .272) + (verdeOriginal * .534) + (azulOriginal * .131)
En caso de que alguna de las nuevas intensidades sobrepase el valor 255, este queda
como 255.
5
3.1. Bonus (1,0 punto)
Para poder acceder al bonus debe primero realizar el item Mostrar histograma.
3. Negativo (0,3 puntos)
Para aplicar filtro negativo, las intensidades del nuevo pixel, sern la diferencia entre
255 y el valor de la intensidad original. Por ejemplo, si tenemos [50 80 170], el nuevo
pixel quedara [205 175 85].
nuevaImagen[i][j] = G[i][j] K
Donde:
G[i][j] corresponde a la matriz de 3x3 formada por los valores de las intensidades
de los pixeles que rodean al pixel [i][j], siendo este el central.
2 1 0
K corresponde a la matriz de 3x3 definida por: 1 1 1
0 1 2
La es la convolusin
operatoria entre dos matrices, que se define como:
a b c 1 2 3
d e f * 4 5 6 = (1*a)+(2*b)+(3*c)+(4*d)+(5*e)+(6*f)+(7*g)+(8*h)+(9*i)
g h i 7 8 9
Observaciones:
a) Si el valor de la convolusin es menor a 0, esta toma el valor 0.
b) Si el valor de la convolusin es mayor a 255, esta toma el valor 255.
6
c) Al identificar la matriz G[i][j], esta debe referirse a los valores originales de la
imagen en escala de grises.
d) La matriz G debe ser de 3x3, luego los pixeles de los bordes de la imagen nueva
quedan sin modificaciones con respecto a la original.
7
4. Mostrar histograma (1,5 puntos) Un histograma de una imagen ilustra en un grfico
cmo estn distribuidos los pxeles de la imagen mostrando la cantidad de pxeles en cada
nivel de intensidad del color. Al mostrar los detalles de las sombras (en la parte izquierda),
los medios tonos (en el centro) y las iluminaciones (en la parte derecha), el histograma es una
buena manera de apreciar, de un vistazo, si una fotografa est muy oscura o muy clara.
Lo que debes mostrar es una figura con tres grficos, uno para cada intensidad (rojo, verde y
azul) mostrando las frecuencias de cada uno. Donde, en el eje horizontal, van los valores de 0
a 255, y en el eje vertical la frecuencia de cada valor. Para una mejor lectura de los grficos,
los valores del eje vertical lo limitaremos para que vaya desde 0 hasta el mximo valor de la
frecuencia entre las intensidades de rojo, verde y azul, para los valores entre 10 y 245 del eje
horizontal. Si luego de calcular el mximo, este tiene valor 0 (pasara con una foto que tiene
pixeles blancos y negros), se fija el valor como la mxima frecuencia entre 0 y 255.
8
4. Men del programa
Esto es un ejemplo de cmo debera ser la estructura y flujo de tu programa.
Bienvenido a PhotoPython!
1. Cargar una imagen
2. Salir
Ingrese una opcin: 1
Cargar Imagen
Ingrese ruta de la imagen: bob.png
Imagen cargada con xito!
Imagen: bob.png
1. Mostrar imagen
2. Aplicar rotacin
3. Aplicar filtro
4. Mostrar histograma
5. Salir
Ingrese una opcin: 2
Imagen: bob.png
Aplicar rotacin
1. 90
2. 180
3. 270
4. Volver
Ingrese una opcin: 1
9
5. Evaluacin y Entrega
Fecha de entrega: martes 27 de octubre hasta las 23:59, segn la hora del servidor de la pgina
del curso en https://saf.uandes.cl/ing/. Por ningn motivo se aceptarn tareas atrasadas.
Formato de entrega: Subir un solo archivo comprimido con todo el cdigo fuente de
su programa al mdulo de tareas de la pgina del curso en https://saf.uandes.cl/ing/, con
el nombre de archivo Tarea2-RUT.zip el cual deber contener los archivos de cdigo fuente en
Python (los .py), reemplazando RUT por su nmero de RUT sin puntos ni guin. Por ejemplo,
si su Rut es 18.123.122-K, el nombre de archivo debe ser Tarea2-18123122k.zip.
Aquellas tareas que no compilen, es decir, que no sea posible ejecutarlas, o produzcan errores al
hacerlo, tendrn como mximo nota 3,0 en la tarea. Debe asegurarse de que su tarea sea descargable
de forma ntegra (todos los archivos .py)
6. Consideraciones
El trabajo en las tareas es estrictamente individual, por lo que cuide su tarea para que no sea
copiada parcial o ntegramente por otros. Todas las tareas entregadas sern comparadas por un
sistema automtico de deteccin de plagios. Cualquier copia ser penalizada, recibiendo el mismo
castigo tanto quien copia como quien permite que le copien. Tambin es considerada copia cualquier
ayuda externa recibida directamente en la tarea, sin importar si proviene de un alumno del curso,
de la universidad, o de otro lugar. El castigo ser establecido por el Consejo de la Facultad, siendo
como mnimo un 1,0 de promedio en el curso.
10
7. Anexo
7.1. Leer una imagen desde un archivo
El mtodo leerImagen recibe la ruta de la imagen como string y devuelve un arreglo tridimen-
sional representando la imagen en el disco. Por ejemplo, el parmetro rutaImagen podra tomar los
siguientes valores: bob.png, magenes/bob.png.
Se recomienda utilizar imgenes con extensin png ya que es el tipo de imgenes que acepta nati-
vamente matplotlib sin ninguna librera externa.
Es posible que algunas imgenes png contengan un cuarto valor para representar un pixel, inten-
te evitar esas imgenes. NO puede utilizar libreras externas a las que hemos visto en clases, en
particular, PIL y Pillow.
11