|
|
|
|
89
|
|
89
|
|
90
|
### Mediana de pixeles
|
90
|
### Mediana de pixeles
|
91
|
|
91
|
|
92
|
-El método que usaremos en este lab para hallar la mediana de varios píxeles será el siguiente: hallaremos la mediana de sus componentes rojos, verdes, azules y luego compondremos un nuevo pixel usando esas medianas. El siguiente ejemplo ilustra el procedimiento.
|
|
|
|
|
92
|
+El método que usaremos en esta experiencia de laboratorio para hallar la mediana de varios píxeles será el siguiente: hallaremos la mediana de sus componentes rojos, verdes, azules y luego compondremos un nuevo píxel usando esas medianas. El siguiente ejemplo ilustra el procedimiento.
|
|
|
93
|
+
|
|
|
94
|
+####Ejemplo:
|
|
|
95
|
+Supón que debemos hallar la mediana de los tres píxeles con valores `0xff223344`, `0xff112233`, `0xff001155`.
|
93
|
|
96
|
|
94
|
-Ejemplo: Suponga que debemos hallar la mediana de los tres pixeles con valores `0xff223344`, `0xff112233`, `0xff001155`.
|
|
|
95
|
* La mediana del componente rojo es 0x11 (dado que los componentes rojos son `0x22`, `0x11` y `0x00`.
|
97
|
* La mediana del componente rojo es 0x11 (dado que los componentes rojos son `0x22`, `0x11` y `0x00`.
|
96
|
* La mediana del componente verde es 0x22 (dado que los componentes verdes son `0x33`, `0x22` y `0x11`.
|
98
|
* La mediana del componente verde es 0x22 (dado que los componentes verdes son `0x33`, `0x22` y `0x11`.
|
97
|
* La mediana del componente azul es 0x44 (dado que los componentes azules son `0x44`, `0x33` y `0x55`.
|
99
|
* La mediana del componente azul es 0x44 (dado que los componentes azules son `0x44`, `0x33` y `0x55`.
|
98
|
-Por lo tanto, la mediana de los píxeles sera `0xff112244`, compuesto por las medianas de los componentes de colores rojo, verde y azul.
|
|
|
99
|
-
|
|
|
100
|
-Note que el resultado puede ser un píxel con un color que no existía entre los originales. Sin embargo, ese detalle no afecta mucho la aplicación que estamos realizando en este lab.
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
104
|
|
100
|
|
105
|
----
|
|
|
106
|
-
|
|
|
107
|
----
|
|
|
108
|
-
|
|
|
109
|
-!INCLUDE "../../eip-diagnostic/pesky-tourist/es/diag-pesky-tourist-01.html"
|
|
|
|
|
101
|
+Por lo tanto, la mediana de los píxeles sera `0xff112244`, compuesto por las medianas de los componentes de colores rojo, verde y azul.
|
110
|
|
102
|
|
|
|
103
|
+Nota que el resultado puede ser un píxel con un color que no existía entre los originales. Sin embargo, ese detalle no afecta mucho la aplicación que estamos realizando en esta experiencia de laboratorio.
|
111
|
|
104
|
|
112
|
-!INCLUDE "../../eip-diagnostic/pesky-tourist/es/diag-pesky-tourist-02.html"
|
|
|
113
|
|
105
|
|
114
|
-!INCLUDE "../../eip-diagnostic/pesky-tourist/es/diag-pesky-tourist-03.html"
|
|
|
115
|
|
106
|
|
116
|
|
107
|
|
117
|
---
|
108
|
---
|
|
|
|
|
158
|
|
149
|
|
159
|
2. Si la siguiente imagen `4 x 4` de píxeles representa el objeto `originalImage`,
|
150
|
2. Si la siguiente imagen `4 x 4` de píxeles representa el objeto `originalImage`,
|
160
|
|
151
|
|
161
|
- ![main1.png](images/main1.png)
|
|
|
|
|
152
|
+ ![main1.png](images/main1.png)
|
162
|
|
153
|
|
163
|
- entonces `originalImage.pixel(2,1)` devuelve un valor `rgb` que representa el color azul (`0x0000ff`).
|
|
|
|
|
154
|
+ entonces `originalImage.pixel(2,1)` devuelve un valor `rgb` que representa el color azul (`0x0000ff`).
|
164
|
|
155
|
|
165
|
3. La siguiente instrucción asigna el color rojo al píxel en posición `(2,3)` en la imagen editada:
|
156
|
3. La siguiente instrucción asigna el color rojo al píxel en posición `(2,3)` en la imagen editada:
|
166
|
|
157
|
|
167
|
- `editedImage.setPixel(2,3,qRgb(0xff,0x00,0x00));`.
|
|
|
|
|
158
|
+ `editedImage.setPixel(2,3,qRgb(0xff,0x00,0x00));`.
|
168
|
|
159
|
|
169
|
|
160
|
|
170
|
4. La siguiente instrucción le asigna a `greenContent` el valor del tono de verde que contiene el pixel `(1,1)` de `originalImage`:
|
161
|
4. La siguiente instrucción le asigna a `greenContent` el valor del tono de verde que contiene el pixel `(1,1)` de `originalImage`:
|
171
|
|
162
|
|
172
|
- `int greenContent = qGreen(originalImage.pixel(1,1));`.
|
|
|
|
|
163
|
+ `int greenContent = qGreen(originalImage.pixel(1,1));`.
|
173
|
|
164
|
|
174
|
|
165
|
|
175
|
5. El siguiente código le asigna al componente rojo del píxel `(1,1)` de `editedImage` el promedio de los valores del tono de rojo que contiene el píxel `(1,1)` de `originalImage1` y `originalImage2` y lo mismo hace con los componentes verde y de azul.
|
166
|
5. El siguiente código le asigna al componente rojo del píxel `(1,1)` de `editedImage` el promedio de los valores del tono de rojo que contiene el píxel `(1,1)` de `originalImage1` y `originalImage2` y lo mismo hace con los componentes verde y de azul.
|
|
|
|
|
218
|
2. P es un vector de tamaño N
|
209
|
2. P es un vector de tamaño N
|
219
|
|
210
|
|
220
|
3. Asignar a los elementos de P los valores
|
211
|
3. Asignar a los elementos de P los valores
|
221
|
- de los pixeles en la posicion x,y de las N imágenes de VI
|
|
|
|
|
212
|
+ de los píxeles en la posicion (x,y) de las N imágenes de VI
|
222
|
|
213
|
|
223
|
-4. M = mediana de los pixeles de P
|
|
|
|
|
214
|
+4. M = mediana de los píxeles de P
|
224
|
|
215
|
|
225
|
-5. Asignar el valor de M al pixel x,y de la imagen sin ruido
|
|
|
|
|
216
|
+5. Asignar el valor de M al píxel x,y de la imagen sin ruido
|
226
|
```
|
217
|
```
|
227
|
|
218
|
|
228
|
### Ejercicio 1: Implementar una función para ordenar un vector de enteros
|
219
|
### Ejercicio 1: Implementar una función para ordenar un vector de enteros
|
229
|
|
220
|
|
230
|
-Para hallar la mediana de los componentes de colores de los pixeles, debemos contar con una función de ordenamiento. En esta parte implementarás selecton sort.
|
|
|
|
|
221
|
+Para hallar la mediana de los componentes de colores de los píxeles, debemos contar con una función de ordenamiento. En esta parte implementarás el ordenamiento de selección.
|
231
|
|
222
|
|
232
|
#### Instrucciones
|
223
|
#### Instrucciones
|
233
|
|
224
|
|
234
|
|
225
|
|
235
|
-1. Carga a QtCreator el proyecto `PeskyTourist` haciendo doble "click" en el archivo `PeskyTourist.pro` en el directorio `Documents/eip/Sort-PeskyTourist` de tu computadora. También puedes ir a `http://bitbucket.org/eip-uprrp/sort-peskytourist` para descargar la carpeta `Sort-PeskyTourist` a tu computadora.
|
|
|
|
|
226
|
+1. Carga a QtCreator el proyecto `PeskyTourist` haciendo doble "click" en el archivo `PeskyTourist.pro` en el directorio `Documents/eip/Sort-PeskyTourist` de tu computadora. También puedes ir a `http://bitbucket.org/raarceupr/sort-peskytourist` para descargar la carpeta `Sort-PeskyTourist` a tu computadora.
|
236
|
|
227
|
|
237
|
2. El código que te proveemos crea la interfaz de la Figura 3.
|
228
|
2. El código que te proveemos crea la interfaz de la Figura 3.
|
238
|
|
229
|
|
239
|
---
|
230
|
---
|
240
|
|
231
|
|
241
|
- ![figure3.png](images/figura3.png)
|
|
|
|
|
232
|
+ ![figure3.png](images/figure3.png)
|
242
|
|
233
|
|
243
|
**Figura 3.** Interfaz del editor de imágenes.
|
234
|
**Figura 3.** Interfaz del editor de imágenes.
|
244
|
|
235
|
|
245
|
3. Marca el botón `Load Images` y busca el directorio `ImagesPeskyTourist` que contiene las imágenes con el turista impertinente.
|
236
|
3. Marca el botón `Load Images` y busca el directorio `ImagesPeskyTourist` que contiene las imágenes con el turista impertinente.
|
246
|
|
237
|
|
247
|
-4. Tu primera tarea es completar la función `Sort` que recibe un vector de enteros. La función debe ordenar los enteros del vector en orden ascendente utilizando el método de burbuja o de selección.
|
|
|
|
|
238
|
+4. Tu primera tarea es completar la función `Sort` que recibe un vector de enteros. La función debe ordenar los enteros del vector en orden ascendente utilizando el método de selección.
|
248
|
|
239
|
|
249
|
5. Crea una prueba unitaria para validar la función `Sort` e invócala desde la función `RemoveNoise`.
|
240
|
5. Crea una prueba unitaria para validar la función `Sort` e invócala desde la función `RemoveNoise`.
|
250
|
|
241
|
|
|
|
|
|
253
|
|
244
|
|
254
|
#### Instrucciones
|
245
|
#### Instrucciones
|
255
|
|
246
|
|
256
|
-Completa la función `Median` que recibe un vector de enteros. La función `Median` debe invocar la función `Sort` para ordenar los enteros y calcular la mediana. La función devuelve la mediana calculada.
|
|
|
|
|
247
|
+1. Completa la función `Median` que recibe un vector de enteros. La función `Median` debe invocar la función `Sort` para ordenar los enteros y calcular la mediana. La función devuelve la mediana calculada.
|
257
|
|
248
|
|
258
|
-Crea una prueba unitaria para validar la función `Median` e invócala desde la función `RemoveNoise`.
|
|
|
|
|
249
|
+2. Crea una prueba unitaria para validar la función `Median` e invócala desde la función `RemoveNoise`.
|
259
|
|
250
|
|
260
|
|
251
|
|
261
|
### Ejercicio 3: Calcular la mediana de cada píxel
|
252
|
### Ejercicio 3: Calcular la mediana de cada píxel
|
|
|
|
|
266
|
|
257
|
|
267
|
#### Algoritmo:
|
258
|
#### Algoritmo:
|
268
|
|
259
|
|
269
|
-Para computar la mediana del píxel, para cada uno de los componentes de color (rojo, verde y azul), extrae el componente en un vector e invoca la función `Median` para calcular la mediana sobre ese vector. Por ejemplo, si recibimos un vector con los píxeles 0xff112233, 0x113344, y 0x224455, una de las primeras tareas del algoritmo sería extraer los componentes rojos y crear un vector con ellos: 0x11, 0x11 y 0x22. Luego se enviaría ese vector a la función Median para obtener la mediana (y obtendremos 0x11 como resultado). Esto se realizaría también para los componentes verde y azul.
|
|
|
|
|
260
|
+Para computar la mediana del píxel, para cada uno de los componentes de color (rojo, verde y azul), extrae el componente en un vector e invoca la función `Median` para calcular la mediana sobre ese vector. Por ejemplo, si recibimos un vector con los píxeles 0xff112233, 0x113344, y 0x224455, una de las primeras tareas del algoritmo sería extraer los componentes rojos y crear un vector con ellos: 0x11, 0x11 y 0x22. Luego se enviaría ese vector a la función `Median` para obtener la mediana (y obtendremos 0x11 como resultado). Esto se realizaría también para los componentes verde y azul.
|
270
|
|
261
|
|
271
|
|
262
|
|
272
|
### Ejercicio 4: Remover ruido
|
263
|
### Ejercicio 4: Remover ruido
|
273
|
|
264
|
|
274
|
-Tu última tarea es completar la función `RemoveNoise` que recibe un vector de imágenes con ruido y la referencia a la imagen editada que tendrá el ruido removido
|
|
|
|
|
265
|
+Tu última tarea es completar la función `RemoveNoise` que recibe un vector de imágenes con ruido y la referencia a la imagen editada que tendrá el ruido removido.
|
275
|
|
266
|
|
276
|
#### Algoritmo:
|
267
|
#### Algoritmo:
|
277
|
|
268
|
|
|
|
|
|
296
|
|
287
|
|
297
|
##Referencias
|
288
|
##Referencias
|
298
|
|
289
|
|
299
|
-[1] John Nicholson, http://nifty.stanford.edu/2014/nicholson-the-pesky-tourist/
|
|
|
|
|
290
|
+[1] John Nicholson, http://nifty.stanford.edu/2014/nicholson-the-pesky-tourist/
|