|
|
|
|
1
|
-# Recursión - Revolvedor de imágenes
|
|
|
|
|
1
|
+# Recursión - Revolvedor de Imágenes
|
2
|
|
2
|
|
3
|

|
3
|

|
4
|

|
4
|

|
|
|
|
|
6
|
|
6
|
|
7
|
[Verano 2016 - Ive - Coralys]
|
7
|
[Verano 2016 - Ive - Coralys]
|
8
|
|
8
|
|
9
|
-La recursión es una técnica muy utilizada en programación. Con esta técnica se resuelven problemas resolviendo un problema similar, pero para casos más pequeños. Podemos construir conjuntos de objetos o procesos utilizando *reglas recursivas* y *valores iniciales*. Las *funciones recursivas* son funciones que se auto-invocan, utilizando cada vez conjuntos o elementos más pequeños, hasta llegar a un punto en donde se utiliza la condición inicial en lugar de auto-invocarse. En esta experiencia de laboratorio, practicarás la definición e implementación de funciones recursivas para revolver una imagen y hacerla incomprensible.
|
|
|
|
|
9
|
+La recursión es una técnica muy utilizada en programación. Con esta técnica se resuelven problemas resolviendo un problema similar, pero para casos más pequeños. Podemos construir conjuntos de objetos o procesos utilizando *reglas recursivas* y *valores iniciales*. Las *funciones recursivas* son funciones que se auto-invocan, utilizando cada vez conjuntos o elementos más pequeños, hasta llegar a un punto en donde se utiliza la condición inicial en lugar de auto-invocarse. En esta experiencia de laboratorio practicarás la definición e implementación de funciones recursivas para revolver una imagen y hacerla incomprensible.
|
10
|
|
10
|
|
11
|
## Objetivos:
|
11
|
## Objetivos:
|
12
|
|
12
|
|
|
|
|
|
30
|
---
|
30
|
---
|
31
|
|
31
|
|
32
|
|
32
|
|
33
|
-
|
|
|
34
|
## Revolver imágenes digitalmente
|
33
|
## Revolver imágenes digitalmente
|
35
|
|
34
|
|
36
|
Al revolver las imágenes digitalmente reordenamos los píxeles de las imágenes para romper la relación entre píxeles adyacentes y así hacer que la imagen original sea incomprensible. Esta técnica se usa mucho para cifrar imágenes y esconder datos. [1]
|
35
|
Al revolver las imágenes digitalmente reordenamos los píxeles de las imágenes para romper la relación entre píxeles adyacentes y así hacer que la imagen original sea incomprensible. Esta técnica se usa mucho para cifrar imágenes y esconder datos. [1]
|
|
|
|
|
53
|
|
52
|
|
54
|

|
53
|

|
55
|
|
54
|
|
56
|
-**Figura 2.** Revoltillo de nivel 1: (a) es la imagen original dividida en cuadrantes, (b) es la imagen luego de revolverla el primer nivel intercambiando cuadrantes diagonales.
|
|
|
|
|
55
|
+**Figura 2.** Revoltillo de nivel 1: (a) es la imagen original dividida en cuadrantes, (b) es la imagen luego de revolverla con el primer nivel intercambiando cuadrantes diagonales.
|
57
|
|
56
|
|
58
|
---
|
57
|
---
|
59
|
|
58
|
|
|
|
|
|
82
|
|
81
|
|
83
|
Para revolver una imagen hacemos este proceso para un cierto *nivel N*. ¿Cuál es el patrón? ¿Cómo comenzaría el revoltillo de *nivel 4*? ¿En cuántos cuadrantes habremos dividido la figura original al completar el revoltillo?
|
82
|
Para revolver una imagen hacemos este proceso para un cierto *nivel N*. ¿Cuál es el patrón? ¿Cómo comenzaría el revoltillo de *nivel 4*? ¿En cuántos cuadrantes habremos dividido la figura original al completar el revoltillo?
|
84
|
|
83
|
|
85
|
-El algoritmo para revolver que se acaba de describir es su propio inverso. Esto es, si le aplicas el mismo algoritmo a la imagen revuelta debes obtener la imagen original.
|
|
|
86
|
-
|
|
|
|
|
84
|
+El algoritmo para revolver que se acaba de describir es su propio inverso. Esto es, si le aplicas el mismo algoritmo a la imagen revuelta, debes obtener la imagen original.
|
87
|
|
85
|
|
88
|
|
86
|
|
89
|
Las siguientes figuras ilustran los intercambios que hacen los revoltillos de nivel 1, 2 y 3.
|
87
|
Las siguientes figuras ilustran los intercambios que hacen los revoltillos de nivel 1, 2 y 3.
|
|
|
|
|
135
|
|
133
|
|
136
|
Sus parámetros son:
|
134
|
Sus parámetros son:
|
137
|
* `img`: referencia a la imagen que se desea modificar (un objeto de clase `QImage`)
|
135
|
* `img`: referencia a la imagen que se desea modificar (un objeto de clase `QImage`)
|
138
|
-* `x0`, `y0`,`x1`, `y1`: coordenadas de las esquinas superior izquierda del los rectángulos.
|
|
|
|
|
136
|
+* `x0`, `y0`,`x1`, `y1`: coordenadas de las esquinas superior izquierda de los rectángulos.
|
139
|
* `width`, `height`: ancho y altura (en píxeles) de los rectángulos.
|
137
|
* `width`, `height`: ancho y altura (en píxeles) de los rectángulos.
|
140
|
|
138
|
|
141
|
Por ejemplo, si deseamos intercambiar los píxeles de la mitad superior e inferior de una imagen *P* de ancho 100 y alto 150, invocamos la función así:
|
139
|
Por ejemplo, si deseamos intercambiar los píxeles de la mitad superior e inferior de una imagen *P* de ancho 100 y alto 150, invocamos la función así:
|
|
|
|
|
155
|
El proyecto `ImageScrambler` contiene el esqueleto de una aplicación para revolver y "des-revolver" imágenes. En la experiencia de laboratorio de hoy trabajarás con el archivo `Filter.cpp` para completar la aplicación.
|
153
|
El proyecto `ImageScrambler` contiene el esqueleto de una aplicación para revolver y "des-revolver" imágenes. En la experiencia de laboratorio de hoy trabajarás con el archivo `Filter.cpp` para completar la aplicación.
|
156
|
|
154
|
|
157
|
|
155
|
|
158
|
-
|
|
|
159
|
-
|
|
|
160
|
-### Ejercicio 1: Pseudocódigo de la función para revolver
|
|
|
|
|
156
|
+### Ejercicio 1 - Pseudocódigo de la función para revolver
|
161
|
|
157
|
|
162
|
Escribe el pseudocódigo para expresar el algoritmo de revolver descrito arriba como una función recursiva.
|
158
|
Escribe el pseudocódigo para expresar el algoritmo de revolver descrito arriba como una función recursiva.
|
163
|
|
159
|
|
164
|
|
160
|
|
|
|
161
|
+### Ejercicio 2 - Función recursiva para revolver la imagen
|
165
|
|
162
|
|
166
|
-### Ejercicio 2: Función recursiva para revolver la imagen
|
|
|
167
|
-
|
|
|
168
|
-**Instrucciones**
|
|
|
|
|
163
|
+#### Instrucciones
|
169
|
|
164
|
|
170
|
1. Carga a `QtCreator` el proyecto `ImageScrambler`. Hay dos maneras de hacer esto:
|
165
|
1. Carga a `QtCreator` el proyecto `ImageScrambler`. Hay dos maneras de hacer esto:
|
171
|
|
166
|
|
|
|
|
|
199
|
|
194
|
|
200
|
1. Utiliza "Entrega 1" en Moodle para entregar el archivo con el pseudocódigo de la función para revolver.
|
195
|
1. Utiliza "Entrega 1" en Moodle para entregar el archivo con el pseudocódigo de la función para revolver.
|
201
|
|
196
|
|
202
|
-2. Utiliza "Entrega 2" en Moodle para entregar el archivo `Filter.cpp` que contiene las funciones que implementaste en esta experiencia de laboratorio. Recuerda utilizar buenas prácticas de programación, al incluir el nombre de los programadores y documentar tu programa.
|
|
|
|
|
197
|
+2. Utiliza "Entrega 2" en Moodle para entregar el archivo `Filter.cpp` que contiene las funciones que implementaste en esta experiencia de laboratorio. Recuerda utilizar buenas prácticas de programación, incluye el nombre de los programadores y documenta tu programa.
|
203
|
|
198
|
|
204
|
---
|
199
|
---
|
205
|
|
200
|
|
206
|
---
|
201
|
---
|
207
|
|
202
|
|
208
|
-##Referencias
|
|
|
|
|
203
|
+## Referencias
|
209
|
|
204
|
|
210
|
[1] F. Maleki et al., ‘‘An Image Encryption System by
|
205
|
[1] F. Maleki et al., ‘‘An Image Encryption System by
|
211
|
Cellular Automata with Memory,’’ Proc. 3rd Int’l
|
206
|
Cellular Automata with Memory,’’ Proc. 3rd Int’l
|