|
@@ -1,4 +1,4 @@
|
1
|
|
-# Recursión - Revolvedor de imágenes
|
|
1
|
+# Recursión - Revolvedor de Imágenes
|
2
|
2
|
|
3
|
3
|
![main1.png](images/main1-small.png)
|
4
|
4
|
![main2.png](images/main2-small.png)
|
|
@@ -6,7 +6,7 @@
|
6
|
6
|
|
7
|
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
|
11
|
## Objetivos:
|
12
|
12
|
|
|
@@ -30,7 +30,6 @@ Antes de llegar al laboratorio debes haber:
|
30
|
30
|
---
|
31
|
31
|
|
32
|
32
|
|
33
|
|
-
|
34
|
33
|
## Revolver imágenes digitalmente
|
35
|
34
|
|
36
|
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,7 +52,7 @@ El método que utilizarás para revolver las imágenes funciona intercambiando r
|
53
|
52
|
|
54
|
53
|
![figure2.png](images/figure2.png)
|
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,8 +81,7 @@ Si continuamos el patrón, un revoltillo de *nivel 3* comienza intercambiando lo
|
82
|
81
|
|
83
|
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
|
87
|
Las siguientes figuras ilustran los intercambios que hacen los revoltillos de nivel 1, 2 y 3.
|
|
@@ -135,7 +133,7 @@ El proyecto en el que trabajarás hoy contiene la función `cropSwap` que implem
|
135
|
133
|
|
136
|
134
|
Sus parámetros son:
|
137
|
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
|
137
|
* `width`, `height`: ancho y altura (en píxeles) de los rectángulos.
|
140
|
138
|
|
141
|
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,17 +153,14 @@ Por ejemplo, si deseamos intercambiar los píxeles de la mitad superior e inferi
|
155
|
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
|
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
|
165
|
1. Carga a `QtCreator` el proyecto `ImageScrambler`. Hay dos maneras de hacer esto:
|
171
|
166
|
|
|
@@ -199,13 +194,13 @@ Escribe el pseudocódigo para expresar el algoritmo de revolver descrito arriba
|
199
|
194
|
|
200
|
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
|
205
|
[1] F. Maleki et al., ‘‘An Image Encryption System by
|
211
|
206
|
Cellular Automata with Memory,’’ Proc. 3rd Int’l
|