|
@@ -1,21 +1,20 @@
|
1
|
|
-
|
2
|
1
|
#Recursión - Revolvedor de imágenes
|
3
|
2
|
|
4
|
|
-![main1-small.png](images/main1-small.png)
|
5
|
|
-![main2-small.png](images/main2-small.png)
|
6
|
|
-![main3-small.png](images/main3-small.png)
|
|
3
|
+![main1.png](images/main1-small.png)
|
|
4
|
+![main2.png](images/main2-small.png)
|
|
5
|
+![main3.png](images/main3-small.png)
|
7
|
6
|
|
8
|
7
|
|
9
|
8
|
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
|
9
|
|
11
|
|
-## Objetivos:
|
|
10
|
+##Objetivos:
|
12
|
11
|
|
13
|
12
|
1. Definir e implementar funciones recursivas.
|
14
|
13
|
2. Practicar el procesamiento de imágenes.
|
15
|
14
|
3. Practicar el uso de estructuras de control y repetición.
|
16
|
15
|
|
17
|
16
|
|
18
|
|
-## Pre-Lab:
|
|
17
|
+##Pre-Lab:
|
19
|
18
|
|
20
|
19
|
Antes de llegar al laboratorio debes haber:
|
21
|
20
|
|
|
@@ -25,13 +24,13 @@ Antes de llegar al laboratorio debes haber:
|
25
|
24
|
|
26
|
25
|
3. Haber tomado el quiz Pre-Lab que se encuentra en Moodle.
|
27
|
26
|
|
28
|
|
-
|
29
|
27
|
---
|
30
|
28
|
|
31
|
29
|
---
|
32
|
30
|
|
33
|
31
|
|
34
|
|
-## Revolver imágenes digitalmente
|
|
32
|
+
|
|
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]
|
37
|
36
|
|
|
@@ -114,7 +113,7 @@ Las siguientes figuras ilustran los intercambios que hacen los revoltillos de ni
|
114
|
113
|
---
|
115
|
114
|
|
116
|
115
|
|
117
|
|
-## Funciones adicionales provistas en el proyecto
|
|
116
|
+##Funciones adicionales provistas en el proyecto
|
118
|
117
|
|
119
|
118
|
El proyecto en el que trabajarás hoy contiene la función `cropSwap` que implementa la funcionalidad de intercambiar los píxeles contenidos en dos rectángulos congruentes dentro de una imagen. Su prototipo es:
|
120
|
119
|
|
|
@@ -123,9 +122,9 @@ void ImageScrambler::cropSwap(QImage &img, int x0, int y0, int x1, int y1, int w
|
123
|
122
|
```
|
124
|
123
|
|
125
|
124
|
Sus parámetros son:
|
126
|
|
-`img`: referencia a la imagen que se desea modificar (un objeto de clase `QImage`)
|
127
|
|
-`x0`, `y0`,`x0`, `y0`: coordenadas de las esquinas superior izquierda del los rectángulos.
|
128
|
|
-`width`, `height`: ancho y altura (en píxeles) de los rectángulos.
|
|
125
|
+* `img`: referencia a la imagen que se desea modificar (un objeto de clase `QImage`)
|
|
126
|
+* `x0`, `y0`,`x0`, `y0`: coordenadas de las esquinas superior izquierda del los rectángulos.
|
|
127
|
+* `width`, `height`: ancho y altura (en píxeles) de los rectángulos.
|
129
|
128
|
|
130
|
129
|
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í:
|
131
|
130
|
|
|
@@ -140,7 +139,7 @@ cropSwap(P, 0, 0, 0, 75, 100, 75 );
|
140
|
139
|
|
141
|
140
|
|
142
|
141
|
|
143
|
|
-## Sesión de laboratorio:
|
|
142
|
+##Sesión de laboratorio:
|
144
|
143
|
|
145
|
144
|
|
146
|
145
|
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.
|
|
@@ -148,37 +147,38 @@ El proyecto `ImageScrambler` contiene el esqueleto de una aplicación para revol
|
148
|
147
|
|
149
|
148
|
|
150
|
149
|
|
151
|
|
-### Ejercicio 1: Pseudocódigo de la función para revolver
|
|
150
|
+###Ejercicio 1: Pseudocódigo de la función para revolver
|
152
|
151
|
|
153
|
152
|
Escribe el pseudocódigo para expresar el algoritmo de revolver descrito arriba como una función recursiva.
|
154
|
153
|
|
155
|
154
|
|
156
|
155
|
|
157
|
|
-### Ejercicio 2: Función recursiva para revolver la imagen
|
|
156
|
+###Ejercicio 2: Función recursiva para revolver la imagen
|
158
|
157
|
|
159
|
|
-#### Instrucciones
|
|
158
|
+####Instrucciones
|
160
|
159
|
|
161
|
|
-1. Carga a QtCreator el proyecto `ImageScrambler` haciendo doble "click" en el archivo `ImageScrambler.pro` en el directorio `Documents/eip/Recursion-ImageScrambler` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/recursion-imagescrambler` para descargar la carpeta `Recursion-ImageScrambler` a tu computadora.
|
|
160
|
+1) Carga a QtCreator el proyecto `ImageScrambler` haciendo doble "click" en el archivo `ImageScrambler.pro` en el directorio `Documents/eip/Recursion-ImageScrambler` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/recursion-imagescrambler` para descargar la carpeta `Recursion-ImageScrambler` a tu computadora.
|
162
|
161
|
|
163
|
|
-2. El código que te proveemos crea la interfaz de la Figura 9.
|
|
162
|
+2) El código que te proveemos crea la interfaz de la Figura 9.
|
164
|
163
|
|
165
|
|
- ---
|
|
164
|
+---
|
166
|
165
|
|
167
|
|
- ![figure9.png](images/figure9.png)
|
|
166
|
+![figure9.png](images/figure9.png)
|
168
|
167
|
|
169
|
|
- **Figura 9.** Interfaz del proyecto `Image Scrambler`.
|
|
168
|
+**Figura 9.** Interfaz del proyecto `Image Scrambler`.
|
170
|
169
|
|
171
|
|
- ---
|
|
170
|
+---
|
172
|
171
|
|
173
|
|
- El botón que dice `Scramble Image` se programó para que invoque una función llamada `ScrambleFilter`.
|
|
172
|
+El botón que dice `Scramble Image` se programó para que invoque una función llamada `ScrambleFilter`.
|
174
|
173
|
|
175
|
|
-3. Completa la función `ScrambleFilter` contenida en el archivo `Filter.cpp` de modo que implemente el algoritmo recursivo de revolver imágenes. La función tiene el siguiente formato:
|
|
174
|
+3) Completa la función `ScrambleFilter` contenida en el archivo `Filter.cpp` de modo que implemente el algoritmo recursivo de revolver imágenes. La función tiene el siguiente formato:
|
176
|
175
|
|
177
|
176
|
```cpp
|
178
|
177
|
QImage ImageScrambler::ScrambleFilter(QImage image, int N, int sx, int sy, int width, int height);
|
179
|
|
-```
|
|
178
|
+ ```
|
|
179
|
+
|
180
|
180
|
|
181
|
|
-4. Baja la imagen contenida en http://i.imgur.com/ZiJ61Gk.png para que valides la función que implementaste.
|
|
181
|
+4) Baja la imagen contenida en http://i.imgur.com/ZiJ61Gk.png para que valides la función que implementaste.
|
182
|
182
|
|
183
|
183
|
---
|
184
|
184
|
|
|
@@ -205,10 +205,3 @@ Press, 2008, pp. 12661271.
|
205
|
205
|
[2] Dalhoum, Abdel Latif Abu, et al. "Digital Image Scrambling Using 2 D Cellular Automata." IEEE MultiMedia 19.4 (2012): 28-36.
|
206
|
206
|
|
207
|
207
|
[3] http://www.instructables.com/id/Python-Programming-recursion/
|
208
|
|
-
|
209
|
|
----
|
210
|
|
-
|
211
|
|
----
|
212
|
|
-
|
213
|
|
----
|
214
|
|
-
|