Explicación del cálculo del filtro de la mediana
Para la explicación del filtro de la mediana se utilizará una imagen en tono de grises, el formato de las variables es uint8 de tamaño 10x10 pixeles como la que se indica a continuación.
A veces, se incluyen ceros en los extremos de la figura para tener en cuenta los pixeles laterales, de lo contrario estos serán ignorados. En la programación se incluyen en la matriz los ceros en los extremos y se realizan los cálculos matemáticos para generar la convolución de las matrices.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 2 | 255 | 248 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
El filtro máscara se utiliza es una matriz de 3x3 que se sobrepone sobre la imagen, este puede ser de varios tamaños 3x3, 5x5, 9x9 se elige según la aplicación y el número de datos a filtrar.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 2 | 255 | 248 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Los datos que se enmarcan en la máscara son:
| 0 | 0 | 0 |
| 0 | 2 | 255 |
| 0 | 250 | 226 |
Se organizan los pixeles en orden ascendente.
| 0 | 0 | 0 | 0 | 0 | 2 | 226 | 250 | 255 |
Realizar la operación mediana, en donde los valores que están alrededor del valor de la mediana no se tienen en cuenta para la operación. En la imagen se tachan con una línea de color negro y se deja el valor a utilizar en el centro del vector y se marca con el color verde, estas ilustraciones son de carácter académico porque en la práctica estos procesos se deben realizar utilizando algoritmos matemáticos para identificar el valor de la mediana.
| 0 | 0 | 0 | 0 | 0 | 2 | 226 | 250 | 255 |
El valor 0 se coloca en el centro del filtro de 3x3 y se remplaza el número 2.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 255 | 248 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Continuando con el siguiente valor, la matriz de 3x3 se desplaza un pixel a la derecha, a este proceso se le denomina convolución de matrices.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 255 | 248 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Los datos que envuelva la matriz de 3x3 ahora son lo que se indican.
| 0 | 0 | 0 |
| 0 | 255 | 248 |
| 250 | 226 | 232 |
| 0 | 0 | 0 | 0 | 226 | 232 | 248 | 250 | 255 |
Realizar la operación mediana y remplazar el 255 por el valor 226.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 226 | 248 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Al realizar el remplazo del nuevo valor, la matriz quedaría como se indica a continuación al desplazarse otro pixel a la derecha.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 226 | 248 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Los datos que envuelva la matriz de 3x3 ahora son lo que se indican:
| 0 | 0 | 0 |
| 226 | 248 | 253 |
| 226 | 232 | 120 |
| 0 | 0 | 0 | 120 | 226 | 226 | 232 | 248 | 253 |
Realizar la operación mediana y remplazar el 248 por el valor 226.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 226 | 226 | 253 | 254 | 254 | 241 | 255 | 248 | 0 | 0 |
| 0 | 250 | 226 | 232 | 120 | 255 | 245 | 224 | 255 | 255 | 252 | 0 |
| 0 | 249 | 235 | 132 | 12 | 115 | 255 | 255 | 216 | 241 | 247 | 0 |
| 0 | 255 | 25 | 189 | 114 | 206 | 255 | 0 | 10 | 253 | 36 | 0 |
| 0 | 234 | 246 | 247 | 225 | 255 | 247 | 255 | 203 | 235 | 212 | 0 |
| 0 | 255 | 253 | 221 | 201 | 246 | 248 | 174 | 67 | 146 | 251 | 0 |
| 0 | 187 | 239 | 139 | 108 | 174 | 55 | 208 | 167 | 216 | 218 | 0 |
| 0 | 117 | 191 | 213 | 173 | 61 | 25 | 6 | 197 | 255 | 0 | 0 |
| 0 | 169 | 243 | 246 | 233 | 196 | 68 | 140 | 249 | 14 | 223 | 0 |
| 0 | 242 | 30 | 223 | 8 | 255 | 0 | 242 | 26 | 226 | 38 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Continuando el proceso con todos los pixeles la matriz filtrada resultante de la imagen es:
| 0 | 226 | 226 | 232 | 245 | 241 | 241 | 241 | 248 | 0 |
| 226 | 235 | 232 | 232 | 253 | 254 | 254 | 248 | 248 | 241 |
| 226 | 232 | 132 | 132 | 206 | 245 | 245 | 241 | 247 | 241 |
| 234 | 235 | 189 | 189 | 225 | 255 | 247 | 235 | 216 | 212 |
| 234 | 246 | 221 | 221 | 246 | 247 | 203 | 174 | 203 | 146 |
| 234 | 239 | 225 | 221 | 225 | 246 | 203 | 203 | 212 | 212 |
| 187 | 213 | 201 | 174 | 173 | 174 | 167 | 174 | 197 | 146 |
| 169 | 191 | 213 | 174 | 108 | 68 | 140 | 197 | 216 | 14 |
| 117 | 213 | 213 | 213 | 68 | 68 | 68 | 197 | 197 | 14 |
| 0 | 169 | 30 | 196 | 8 | 68 | 26 | 26 | 26 | 0 |
Código para aplicar el filtro de la mediana
El código permite comprobar el funcionamiento de la función del filtro de la mediana utilizado en Matlab.
(Para ampliar la imagen haga clic sobre ella)
