|
|
|
|
1
|
-#Recursion - Image Scrambler
|
|
|
|
|
1
|
+# Recursion - Image Scrambler
|
2
|
|
2
|
|
3
|
![main1.png](images/main1-small.png)
|
3
|
![main1.png](images/main1-small.png)
|
4
|
![main2.png](images/main2-small.png)
|
4
|
![main2.png](images/main2-small.png)
|
5
|
![main3.png](images/main3-small.png)
|
5
|
![main3.png](images/main3-small.png)
|
6
|
|
6
|
|
7
|
-[Verano 2016 - Rafa - Ive]
|
|
|
|
|
7
|
+[Verano 2016 - Coralys]
|
8
|
|
8
|
|
9
|
-One commonly used programming technique is *recursion*. With this technique, problems are solved by solving similar problems but for smaller cases. We can construct sets of objects or tasks using *recursive rules* and *initial values*. *Recursive functions* are functions that are self-invoking, using smaller sets or elements each time, until reaching a point where an initial value is used instead of self-invoking. In this laboratory experience you will practice the definition and implementation of recursive functions to scramble an image and make it incomprehensible.
|
|
|
|
|
9
|
+One commonly used programming technique is *recursion*. With this technique, problems are solved by solving similar problems, but for smaller cases. We can build sets of objects or tasks using *recursive rules* and *initial values*. *Recursive functions* are functions that are self-invoking, using smaller sets or elements each time, until reaching a point where the initial value is used instead of self-invoking. In this laboratory experience, you will practice the definition and implementation of recursive functions to scramble an image and make it incomprehensible.
|
10
|
|
10
|
|
11
|
-##Objectives:
|
|
|
|
|
11
|
+## Objectives:
|
12
|
|
12
|
|
13
|
1. Define and implement recursive functions.
|
13
|
1. Define and implement recursive functions.
|
14
|
|
14
|
|
|
|
|
|
16
|
|
16
|
|
17
|
3. Practice the use of decision and repetition structures.
|
17
|
3. Practice the use of decision and repetition structures.
|
18
|
|
18
|
|
19
|
-##Pre-Lab:
|
|
|
|
|
19
|
+## Pre-Lab:
|
20
|
|
20
|
|
21
|
Before arriving at the laboratory you should have:
|
21
|
Before arriving at the laboratory you should have:
|
22
|
|
22
|
|
|
|
|
|
30
|
|
30
|
|
31
|
---
|
31
|
---
|
32
|
|
32
|
|
33
|
-##Scrambling images digitally
|
|
|
|
|
33
|
+## Scrambling images digitally
|
34
|
|
34
|
|
35
|
When scrambling images digitally we reorder the pixels of the image to break the relation between adjacent pixels, making the original image incomprehensible. This technique is used frequently to cypher images and hide data. [1]
|
35
|
When scrambling images digitally we reorder the pixels of the image to break the relation between adjacent pixels, making the original image incomprehensible. This technique is used frequently to cypher images and hide data. [1]
|
36
|
|
36
|
|
|
|
|
|
42
|
|
42
|
|
43
|
---
|
43
|
---
|
44
|
|
44
|
|
45
|
-There exist many methods that have been proposed to scramble images. In this laboratory experience you will use a simple method that has a natural implementation with recursive functions.
|
|
|
|
|
45
|
+There are many methods that have been proposed to scramble images. In this laboratory experience, you will use a simple method that has a natural implementation with recursive functions.
|
46
|
|
46
|
|
47
|
### Scramble it!
|
47
|
### Scramble it!
|
48
|
|
48
|
|
|
|
|
|
52
|
|
52
|
|
53
|
![figure2.png](images/figure2.png)
|
53
|
![figure2.png](images/figure2.png)
|
54
|
|
54
|
|
55
|
-**Figure 2.** Level 1 scramble: (a) is the original image divided in quadrants, (b) is the image after scrambling the first level by exchanging diagonal quadrants.
|
|
|
|
|
55
|
+**Figure 2.** Level 1 scramble: (a) is the original image divided in quadrants, (b) is the image after scrambling it the first level by exchanging diagonal quadrants.
|
56
|
|
56
|
|
57
|
---
|
57
|
---
|
58
|
|
58
|
|
59
|
-The next level scramble, *level 2*, first exchanges the left and right halves of the image. Afterwards the *level 1* scramble is applied to each quadrant. Observe that the level 1 scramble is applied to each of the four quadrants of the original image.
|
|
|
|
|
59
|
+The next level scramble, *level 2*, first exchanges the left and right halves of the image. Afterwards, the *level 1* scramble is applied to each quadrant. Observe that the level 1 scramble is applied to each of the four quadrants of the original image.
|
60
|
|
60
|
|
61
|
---
|
61
|
---
|
62
|
|
62
|
|
|
|
|
|
81
|
|
81
|
|
82
|
To scramble an image repeat this process for a certain *level N*. What is the pattern? How would a *level 4* scramble start? In how many quadrants will we have divided the original image after completing the scramble?
|
82
|
To scramble an image repeat this process for a certain *level N*. What is the pattern? How would a *level 4* scramble start? In how many quadrants will we have divided the original image after completing the scramble?
|
83
|
|
83
|
|
84
|
-The algorithm to scramble that was just described is its own inverse. That is, if you apply the same algorithm to the scrambled image you should obtain the original image.
|
|
|
|
|
84
|
+The algorithm to scramble that was just described, is its own inverse. That is, if you apply the same algorithm to the scrambled image, you should obtain the original image.
|
85
|
|
85
|
|
86
|
|
86
|
|
87
|
The following figures illustrate the exchanges that are done by level 1, 2 and 3 scrambles.
|
87
|
The following figures illustrate the exchanges that are done by level 1, 2 and 3 scrambles.
|
|
|
|
|
97
|
|
97
|
|
98
|
![figure7.png](images/figure7.png)
|
98
|
![figure7.png](images/figure7.png)
|
99
|
|
99
|
|
100
|
-**Figure 7.** Level 2 scramble: (a) the left and right halves are exhanged, (b) a level 1 scramble is applied to each quadrant.
|
|
|
|
|
100
|
+**Figure 7.** Level 2 scramble: (a) the left and right halves are exchanged, (b) a level 1 scramble is applied to each quadrant.
|
101
|
|
101
|
|
102
|
|
102
|
|
103
|
---
|
103
|
---
|
|
|
|
|
134
|
|
134
|
|
135
|
Its parameters are:
|
135
|
Its parameters are:
|
136
|
* `img`: reference to the image that we wish to modify (an object of the `QImage` class)
|
136
|
* `img`: reference to the image that we wish to modify (an object of the `QImage` class)
|
137
|
-* `x0`, `y0`,`x0`, `y0`: coordinates of the upper left corners of the rectangles.
|
|
|
|
|
137
|
+* `x0`, `y0`,`x1`, `y1`: coordinates of the upper left corners of the rectangles.
|
138
|
* `width`, `height`: width and height (in pixels) of the rectangles.
|
138
|
* `width`, `height`: width and height (in pixels) of the rectangles.
|
139
|
|
139
|
|
140
|
For example, if we wish to exchange the pixels of the upper and lower halves of an image *P* with width 100 and height 150, we invoke the function:
|
140
|
For example, if we wish to exchange the pixels of the upper and lower halves of an image *P* with width 100 and height 150, we invoke the function:
|
|
|
|
|
151
|
The project `ImageScrambler` contains the skeleton of an application to scramble and unscramble images. In today’s laboratory experience you will work in the `Filter.cpp` file to complete the application.
|
151
|
The project `ImageScrambler` contains the skeleton of an application to scramble and unscramble images. In today’s laboratory experience you will work in the `Filter.cpp` file to complete the application.
|
152
|
|
152
|
|
153
|
|
153
|
|
154
|
-###Exercise 1: Pseudocode for the scrambling function
|
|
|
|
|
154
|
+### Exercise 1: Pseudocode for the scrambling function
|
155
|
|
155
|
|
156
|
Write the pseudocode to express the scrambling algorithm described above as a recursive function.
|
156
|
Write the pseudocode to express the scrambling algorithm described above as a recursive function.
|
157
|
|
157
|
|
158
|
|
158
|
|
159
|
-###Exercise 2: Recursive function to scramble an image
|
|
|
|
|
159
|
+### Exercise 2: Recursive function to scramble an image
|
160
|
|
160
|
|
161
|
-####Instructions
|
|
|
|
|
161
|
+**Instructions**
|
162
|
|
162
|
|
163
|
1. Load the project `ImageScrambler` into `QtCreator`. There are two ways to do this:
|
163
|
1. Load the project `ImageScrambler` into `QtCreator`. There are two ways to do this:
|
164
|
|
164
|
|
165
|
- * Using the virtual machine: Double click the file `ImageScrambler.pro` located in the folder `/home/eip/labs/recursion-imagescrambler` of your virtual machine.
|
|
|
166
|
- * Downloading the project’s folder from `Bitbucket`: Use a terminal and write the command `git clone http:/bitbucket.org/eip-uprrp/recursion-imagescrambler` to download the folder `recursion-imagescrambler` from `Bitbucket`. Double click the file `ImageScrambler.pro` located in the folder that you downloaded to your computer.
|
|
|
|
|
165
|
+ * Using the virtual machine: Double click the file `ImageScrambler.pro` that can be found in the folder `/home/eip/labs/recursion-imagescrambler` of your virtual machine.
|
|
|
166
|
+
|
|
|
167
|
+ * Downloading the project’s folder from `Bitbucket`: Use the terminal found in your virtual machine and write the `git clone http:/bitbucket.org/eip-uprrp/recursion-imagescrambler` command to download the folder `recursion-imagescrambler` from `Bitbucket`. Double click the file `ImageScrambler.pro` located in the folder that you downloaded to your computer.
|
167
|
|
168
|
|
168
|
2. The code that we provide creates the interface in Figure 9.
|
169
|
2. The code that we provide creates the interface in Figure 9.
|
169
|
|
170
|
|
|
|
|
|
191
|
|
192
|
|
192
|
1. Use “Deliverable 1” in Moodle to upload the file with the pseudocode for the recursive function.
|
193
|
1. Use “Deliverable 1” in Moodle to upload the file with the pseudocode for the recursive function.
|
193
|
|
194
|
|
194
|
-2. Use "Deliverable 2" in Moodle to upload the `Filter.cpp` file that contains the functions you implemented in this laboratory experience. Remember to use good programming techniques, include the names of the programmers involved, and to document your program.
|
|
|
|
|
195
|
+2. Use "Deliverable 2" in Moodle to upload the `Filter.cpp` file that contains the functions you implemented in this laboratory experience. Remember to use good programming techniques, by including the names of the programmers involved, and documenting your program.
|
195
|
|
196
|
|
196
|
|
197
|
|
197
|
---
|
198
|
---
|
198
|
|
199
|
|
199
|
---
|
200
|
---
|
200
|
|
201
|
|
201
|
-##References
|
|
|
|
|
202
|
+## References
|
202
|
|
203
|
|
203
|
[1] F. Maleki et al., ‘‘An Image Encryption System by
|
204
|
[1] F. Maleki et al., ‘‘An Image Encryption System by
|
204
|
Cellular Automata with Memory,’’ Proc. 3rd Int’l
|
205
|
Cellular Automata with Memory,’’ Proc. 3rd Int’l
|