Browse Source

README-en.md edited on August 1, 2016

Jose R Ortiz Ubarri 8 years ago
parent
commit
2b4f508d37
1 changed files with 20 additions and 19 deletions
  1. 20
    19
      README-en.md

+ 20
- 19
README-en.md View File

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