Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Indicaciones Tarea 3

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 11

U NIVERSIDAD DE I NGENIERÍA

Y T ECNOLOGÍA - UTEC

Tarea 3
Fecha de inicio: 25 de Mayo, 2022
Fecha de entrega: 12 de Junio, 2022

Curso: Programación 1 (1100) – Entrega mediante: Gradescope

Indicaciones generales

1. Recuerda que la tarea es individual. Los casos de copia/plagio serán sanciona-


dos con nota cero (0) en la asignatura.

2. (a) La fecha límite de entrega es el domingo 12 de Junio a las 23:59 hrs.


(b) Es altamente recomendable no esperar hasta la última hora.
(c) Gradescope desactivará automáticamente los envíos pasada dicha hora límite.
(d) No se aceptarán entregas atrasadas ni entregadas por otros medios.

3. Revisa bien lo que entregas, aunque en esta oportunidad podrás entregar ilimi-
tadas veces la tarea, la última enviada será la evaluada.

4. Recuerda que Gradescope corrige automáticamente tu entrega. Dicha plataforma


mostrará si has realizado correctamente las pruebas y mostrará algunos mensajes
en color verde. Puedes ver un ejemplo de este caso en el anexo 6.

5. Es posible que hayas subido tu entrega pero hayas modificado algo que no se
debió en el template. En ese escenario, Gradescope te mostrará algunos mensajes
de error. Puedes ver un ejemplo de esto en el anexo 7.

Gradescope

1. Nosotros les proporcionaremos un código base de donde deberán partir para


completar dicho ejercicio. Este archivo es llamado solution.py y lo encontrarán
en la indicación de la tarea en CANVAS.

2. Al finalizar, solo subir el archivo solution.py (NO cambiar el nombre del archivo
y NO comprimirlo).

1
Programación 1 (1100) – Tarea 3 2

3. Cada pregunta tiene diversos casos de prueba. Para obtener la nota completa en
una pregunta, el algoritmo debe obtener la respuesta correcta en dichos casos de
prueba.

4. Si un caso de prueba falla, visualizarán un mensaje de error con sugerencias. Lee


el error, revisa el código e inténtalo de nuevo.

5. Los input de los casos de prueba son confidenciales.

Indicaciones específicas

1. En el anexo B, se puede ver la plantilla de código.

2. Ustedes deben escribir dentro de la sección y a la misma altura de donde esta es-
crito "Código comienza aquí". Además, no deben modificar nada debajo de "Código
acaba aquí". Recuerden tener cuidado con las indentaciones.

3. Los input del ejercicio se encuentran en la plantilla. Recuerden usar estas vari-
ables para resolver el ejercicio.

4. Ustedes podrán utilizar la imagen ’programacion.bmp’ para hacer la prueba de


su implementación. Es importante que esta imagen se encuentre en la misma
dirección que su solution.py. Si desean utilizar otra imagen, tiene que tener un
formato BMP de 24 bits.

5. La respuesta de los ejercicios debe ser retornada en una lista de tres dimensiones,
el mismo formato de imágenes vistas en clase de matrices gráficas, según se en-
cuentra especificado en la plantilla otorgada.

6. Para resolver esta tarea van a tener que utilizar las funciones leer_imagen y
guardar_imagen con el objetivo de convertir la imagen en formato BMP a una
lista tridimensional y de una lista tridimensional a una imagen en formato BMP.

7. Si realizan cálculos donde el resultado es un número con decimales luego de


aplicar una operación matemática, tienen que utilizar la función round para re-
dondearlo al entero más cercano o asegurarse que su operación retorne un valor
de tipo int usando la operación de división entera antes de guardarlo en la lista
final.

Para la resolución de esta tarea, se utilizará la siguiente imagen como referencia:

CS UTEC
Programación 1 (1100) – Tarea 3 3

Figure 1: Representación de la imagen original

Se solicita que realicen cambios a la imagen original para que se vea de distintas for-
mas. Por lo cual en cada pregunta se implementarán diferentes filtros que modifiquen
la imagen original.

Pregunta 1: Filtro Negativo - (5 pts)

En este filtro se quiere convertir la imagen original de colores a un modo negativo.


Para que la imagen se convierta en negativo se tiene que restar el color blanco en su
formato RGB (255,255,255), con el color de cada píxel de la imagen original. Por lo que,
si todo los pixeles cumplen esta condición, la imagen se verá negativa.
Por ejemplo, dada una matriz de tres dimensiones:
!
[83, 118, 194] [31, 130, 58]
[222, 194, 38] [252, 10, 252]

al sustraer los colores originales al color blanco:


!
[255, 255, 255] − [83, 118, 194] [255, 255, 255] − [31, 130, 58]
[255, 255, 255] − [222, 194, 38] [255, 255, 255] − [252, 10, 252]

Se generará una nueva matriz tridimensional con filtro negativo.


!
[172, 137, 61] [224, 125, 197]
[33, 61, 217] [3, 245, 3]

Después de aplicar el filtro tendremos como resultado la siguiente imagen:

CS UTEC
Programación 1 (1100) – Tarea 3 4

Figure 2: Representación de la imagen negativa

Pregunta 2: Filtro Forma Circular - (5 pts)

Para este ejercicio se va a hacer un filtro de forma circular. Para ello, se necesita que el
círculo se encuentre en el centro de la imagen con coordenadas Cx, Cy. Para hacer la
forma circular deben de utilizar la fórmula
 2
2 2 h
( j − Cx ) + (i − Cy ) < (1)
2

donde h es la altura de la imagen, w es el ancho de la imagen, i y j son la i-ésima fila,


dado 0 ≤ i ≤ h − 1, y j-ésima columna, dado 0 ≤ j ≤ w − 1, de la matriz. Esta fórmula
da como resultado un pixel que cae dentro del círculo.
Observaciones. Todo lo que esté dentro del circulo debe ser la imagen original, lo
demás debe de ser el color negro.
Por ejemplo, dada una imagen de 720 × 720, su centro sería

Cx = 360, Cy = 360.

Para calcular si un pixel cualquiera cae dentro del círculo, debemos ver su posición,
i = 200, j = 120, y al reemplazar en la fórmula:
 2
2 2 720
(120 − 360) + (200 − 360) <
2

, obtenemos como resultado

CS UTEC
Programación 1 (1100) – Tarea 3 5

83200 < 129600

Al ser cierta la afirmación podemos indicar que el pixel ubicado en i = 200, j = 120
cae dentro del círculo, por lo que el pixel debe tener su color original. Si hubiese sido
falsa la afirmación debería de tener el color negro en formato RGB(0,0,0).

Figure 3: Representación de la imagen con corte circular

Pregunta 3: Filtro Reflejo Vertical con formato BGR - (5 pts)

El objetivo de aplicar este filtro es rotar la imagen verticalmente por lo que cualquier
pixel que se encuentre en la posición de abajo debería de ir arriba y los que están en
la posición de arriba deberían de ir abajo. Además, a este filtro también se le tiene
que cambiar del formato RGB (rojo, verde, azul) al formato BGR (azul, verde, rojo).
Es decir, los colores que se encuentran en la posición R pasan a la posición B y los
colores que se encuentran en la posición B pasan a la posición R. Solo los colores que
se encuentran en la posición G mantienen su posición.
Por ejemplo:
[235, 45, 67] → [67, 45, 235] (2)

En este ejemplo, se tiene el valor de un pixel de la imagen original en el formato


RGB. Por ello el valor númerico de la escala en rojo es 235, el valor del verde es 45 y
el valor del azul es 67. Entonces, para cambiarlo al formato BGR, se tiene que cambiar
el valor de rojo por el valor del azul y el valor del azul por el valor del rojo. Lo que
resultaría en que la imagen final tendría como valor númerico de la escala en rojo a 67
y la escala en azul ahora su valor numérico sería 235. El único color que mantiene su

CS UTEC
Programación 1 (1100) – Tarea 3 6

valor númerico es el verde. Lo que esto convertiría a la imagen final en un formato


BGR.

Figure 4: Representación de la imagen con reflejo vertical formato BGR

Pregunta 4: Filtro de color modificado - (5 pts)

Para este ejercicio, se requiere que luego de aplicar el filtro se tenga una imagen con
tonalidad medio violeta. Para obtener esta tonalidad se tienen que modificar los val-
ores del píxel en base a los valores originales. Y para lograr dicha tonalidad tienen que
utilizar las siguientes fórmulas y reemplazarlos con los valores de la lista tridimen-
sional original:

Modi f icacion_rojo = 0.298 ∗ original_rojo + 0.578 ∗ original_verde + 0.132 ∗ original_azul

Modi f icacion_verde = 0.254 ∗ original_rojo + 0.495 ∗ original_verde + 0.111 ∗ original_azul

Modi f icacion_azul = 0.177 ∗ original_rojo + 0.343 ∗ original_verde + 0.74 ∗ original_azul

Para que el filtro sea válido, deben de redondear los valores obtenidos a un entero
utilizando la función round. Tengan en consideración que si el valor es mayor a 255
(valor máximo en RGB), saldrá un error. En otras palabras, si esos valores llegan a ser
de la siguiente forma:
R > 255, G > 255, V > 255 (3)

van a estar pintando un pixel con un color que no existe ya que el formato RGB se
encuentra en un rango [0, 255]. Por esa razón, se tienen que asegurar no pasar ese
valor máximo que es 255.

CS UTEC
Programación 1 (1100) – Tarea 3 7

Figure 5: Representación de la imagen con el filtro modificado

CS UTEC
Programación 1 (1100) – Tarea 3 8

Apéndices

A. Ejemplos Gradescope

Figure 6: Casos de prueba correctos en Gradescope.

CS UTEC
Programación 1 (1100) – Tarea 3 9

Figure 7: Entrega incorrecta en Gradescope.

CS UTEC
Programación 1 (1100) – Tarea 3 10

B. Template

1 import imageio
2 import numpy as np
3

4 def leer_imagen ( ruta ) :


5 """
6 La funci ó n leer_imagen recibe un string con la ruta
7 de una imagen en formato BMP y retorna una lista de
8 tres dimensiones con el mapa de bits de la imagen .
9 Asimismo , convertimos la lista de numpy a una lista
10 com ú n y corriente .
11 """
12 np_array = np . array ( imageio . imread ( ruta ) , dtype = ’ int ’)
13 # noinspection PyTypeChecker
14 lista_3d = np_array . tolist ()
15 return lista_3d
16

17

18 def guardar_imagen ( ruta , lista_3d ) :


19 """
20 La funci ó n guardar_imagen recibe una lista de 3
21 dimensiones con el mapa de bits de la imagen
22 y retorna la imagen en formato bmp .
23 """
24 return imageio . imwrite ( ruta , np . array ( lista_3d , dtype = ’ uint8 ’) )
25

26

27 class Solution :
28

29 def aplicar_negativo ( self , lista_3d = leer_imagen ( ’ playa (1) . bmp ’) ) :


30 result = list ()
31 # SU SOLUCION EMPIEZA AQUI
32

33

34 # SU SOLUCION TERMINA AQUI


35 return result
36

37 def a p l i c a r _ c o r t e _ c i r c u l a r ( self , lista_3d = leer_imagen ( ’ playa (1) . bmp


’) ) :
38 result = list ()
39 # SU SOLUCION EMPIEZA AQUI
40

41

42 # SU SOLUCION TERMINA AQUI


43 return result
44

CS UTEC
Programación 1 (1100) – Tarea 3 11

45 def a p l i c a r _ r e f l e j o _ v e r t i c a l _ B G R ( self , lista_3d = leer_imagen ( ’ playa


(1) . bmp ’) ) :
46 result = list ()
47 # SU SOLUCION EMPIEZA AQUI
48

49

50 # SU SOLUCION TERMINA AQUI


51 return result
52

53 def ap l i c a r _ s e p i a _ m o d i f i c a d o ( self , lista_3d = leer_imagen ( ’ playa (1) .


bmp ’) ) :
54 result = list ()
55 # SU SOLUCION EMPIEZA AQUI
56

57

58

59 # SU SOLUCION TERMINA AQUI


60 return result
61

62 if __name__ == ’ __main__ ’:
63 s = Solution ()
64 print ( " Pregunta #1: " )
65 guardar_imagen ( ’ negativo . bmp ’ ,s . aplicar_negativo () )
66 print ( " Pregunta #2: " )
67 guardar_imagen ( ’ corte_circular . bmp ’ ,s . a p l i c a r _ c o r t e _ c i r c u l a r () )
68 print ( " Pregunta #3: " )
69 guardar_imagen ( ’ reflejo_BGR . bmp ’ ,s . a p l i c a r _ r e f l e j o _ v e r t i c a l _ B G R () )
70 print ( " Pregunta #4: " )
71 guardar_imagen ( ’ sepia_mod . bmp ’ ,s . a p l i c a r _ s e p i a _ m o d i f i c a d o () )

Listing 1: Template solution.py.

CS UTEC

También podría gustarte