FILTRO MEDIANA EN C

++
7/05/14

Abstract—En este informe se presentan los métodos para
poder realizar filtros de mediana de ventana 3 y de ventana 5,
estos filtros se hacen para vectores de 200 números aleatorios que
luego se almacenan en un nuevo vector, para la implementación
de los filtros se utilizo una lenguaje de programación llamado
C++. Posteriormente se analizan los resultados obtenidos en los
dos filtros y se concluye sobre la diferencia y eficiencia de cada
uno.

Keywords— Filtro mediana, ventana 3 y 5, Ordenamiento
burbuja, C++, outlier.
I. INTRODUCCIÓN

El filtro mediana surgió en 1970 cuando J. W. Tukey
propuso el uso de la mediana móvil para alisar series de una
dimensión en el dominio del tiempo. Posteriormente el filtro
tuvo una aplicación bidimensional en el procesamiento de
imágenes digitales, esto es debido a que el filtro mediana es
insensible a ruidos impulsivos y preserva transiciones abruptas
de las señales, es decir, que este filtro actúa como un
suavizador. En procesamiento de imágenes digitales, este es
un filtro de paso bajo y su función consiste en eliminar el
ruido de la imagen, mejorando su nitidez. En este laboratorio
se utilizó el FM de dimensión 1, con el objetivo de obtener la
mediana de un sucesión de números aleatorios.
II. MARCO TEÓRICO

Ordenación por método burbuja: Para ordenar los datos de
cada vector se usó el método burbuja, este consiste comparar
los primeros dos datos mirando cual es mayor y con base en
esto ir intercambiando las posiciones del que sea mayor, de
esta forma se van llevando los números mayores a las últimas
posiciones. A pesar de que este método de ordenamiento es
uno de los algoritmos de ordenamiento menos eficientes, tiene
la ventaja de ser de fácil implementación y es muy útil en
casos en que no se requiere tanta eficiencia dado a que los
vectores sean de muy pocas posiciones. [1]

Filtro mediana: Este consiste en organizar un nuevo arreglo
de datos obtenidos de medianas locales (pequeños vectores
formados de datos en una vecindad). Este tipo de filtro es
usado para poder prescindir de los valores atípicos de un
conjunto de datos, estos valores atípicos se les conoce como
ruido impulsivo (spikes). Se usa en filtrado de imágenes para
disipar los contrastes indeseados, suavizando la imagen pero
sin volverla borrosa, en estas generalmente se generan arreglos
de 3x3, este tipo de filtro es el más usado para eliminar ruido
impulsivo (como de “sal y pimienta”), tiene una muy alta
eficiencia, en ocasiones alcanza el 100%. [2]

Bloodshed Dev-C++: Es un ambiente integrado de desarrollo
(IDE) para los lenguajes de programación C/C++, que usa
Mingw para compilar los proyectos, diseñado para Windows,
es un software libre. [3]
III. DESARROLLO EXPERIMENTAL

PROCEDIMIENTO SEMANA 1

Filtro mediana ventana 3:

#include <iostream>
#include<time.h>
#include <stdlib.h>
int main()
{
int randoms[200];
int i, j, k, temp;
int tamano=3;
int vector[3];
int vecmed[198];
srand(time(0));

std::cout << "Aleatorios: \n";

for(i = 0; i < 200; i++)
{
randoms[i] = rand()%101;
}
for(i = 0; i < 200; i++)
{
printf("%3d ",randoms[i]);
}
for(k = 0; k < 198; k++)
{
vector[0]=randoms[k];
vector[1]=randoms[k+1];
vector[2]=randoms[k+2];
for (i = 0; i < (tamano - 1); i++)
{
for (j = i + 1; j < tamano; j++)
{
if (vector[j] < vector[i])
{
temp = vector[j];
vector[j] = vector[i];
vector[i] = temp;
}
}
}
vecmed[k]=vector[1];
}

printf ("\nLas medianas son:\n");
for (i = 0; i < 198; i++)
{
printf("%3d ", vecmed[i]);
FILTRO MEDIANA EN C++
GENERADOR DE SEÑALES
}
}

¿Qué función realiza el filtro mediana?
- Elimina los valores atípicos (Outliers) de un conjunto de
datos.
- Desde el punto de vista de un sistema en el que se tiene
una entrada continua que tiene un variación anormal en
el tiempo, al ser aplicada al filtro mediana la salida va a
conservar la forma general de la señal de entrada pero
reduciendo los valores indeseados.
- Para este laboratorio el filtro mediana se diseñó para que
en una vecindad de 3 datos numéricos, los nuevos
valores en la salida fueran más cercanos entre si.

PROCEDIMIENTO SEMANA 2

Filtro mediana ventana 5:

#include <iostream>
#include<time.h>
#include <stdlib.h>

int main()
{
int randoms[200];
int i, j, k, temp;
int tamano=5;
int vector[5];
int vecmed[196];
srand(time(0));

std::cout << "Aleatorios: \n";

for(i = 0; i < 200; i++)
{
randoms[i] = rand()%101;
}
for(i = 0; i < 200; i++)
{
printf("%3d ",randoms[i]);
}
for(k = 0; k < 196; k++)
{
vector[0]=randoms[k];
vector[1]=randoms[k+1];
vector[2]=randoms[k+2];
vector[3]=randoms[k+3];
vector[4]=randoms[k+4];
for (i = 0; i < (tamano - 1); i++)
{
for (j = i + 1; j < tamano; j++)
{
if (vector[j] < vector[i])
{
temp = vector[j];
vector[j] = vector[i];
vector[i] = temp;
}
}
}
vecmed[k]=vector[2];
}
printf ("\nLas medianas son:\n");
for (i = 0; i < 196; i++)
{
printf("%3d ", vecmed[i]);
}
}

¿Qué diferencia hay entre estos dos tipos de filtros?

- Los datos obtenidos en la salida del filtro de ventana 5
son menos que los obtenidos en el filtro de ventana 3.
- Dado a que la cantidad de elementos por vector en el
filtro de ventana 5 es mayor que en el de ventana 3,
podemos observar que los datos obtenidos en la salida
del filtro de ventana 5 son más cercanos entre ellos que
los del filtro de ventana 3. Este implicaría que el filtro de
ventana 5 suaviza más la varianza de los datos de
entrada, lo cual representa un filtro de mayor orden que
el de ventana 3.
De ejemplos prácticos donde se podrían usar.
- En procesamiento de imágenes, los filtros de mediana
permiten homogenizar la imagen, eliminando los
picos de intensidad baja o alta de luz en una
vecindad, de esta forma logrando eliminar errores en
la imagen sin volver la misma borrosa.
- En procesamiento de señales continuas, el filtro de
mediana ayuda eliminar los spikes que se pueden
producir en una onda. Por ejemplo como el producido
en la figura 1. Después de haber pasado por el filtro
de mediana se podrá apreciar la onda sin el pico que
se muestra en la figura.
Fig. 1. Señal con spike. [4]
IV. RESULTADOS

Para el procedimiento de la semana 1 el resultado fue el de la
figura 2, en la primera parte está el vector de 200 números
aleatorios y luego la lista de las mediana en vecindades de 3
datos este segundo vector es de 198 datos.

FILTRO MEDIANA EN C++
3

Fig. 2. Filtro de ventana 3
Para el procedimiento de la semana 2 el resultado fue el de la
figura 3, como en el anterior, en la primera parte está el vector
de 200 números aleatorios y luego la lista de las mediana en
vecindades de 5 datos, este último vector es de 196 datos.

Fig. 3. Filtro de ventana 5
V. CONCLUSIONES
- Para una entrada que puede tener picos a la cual se le
aplica un filtro de mediana se obtiene una salida del filtro
que está suavizada, logrando una aproximación más real
de la señal que se quiere.
- Del laboratorio se puede observar que con un filtro de
mayor ventana se obtienen vecindades con valores más
próximos.
- Con el método de ordenamiento burbuja se logra realizar
un algoritmo de menor extensión que el algoritmo que se
usaría si se comparara cada dato con el resto de los datos.
VI. REFERENCIAS

[1]http://www.estructuradedatos.galeon.com/burbujatext.htm
[2]http://www.academicos.ccadet.unam.mx/jorge.marquez/cur
sos/imagenes_neurobiomed/Mediana_filtro.pdf
[3] http://www.bloodshed.net/devcpp.html
[4]http://www.ipej.org/0902/oswald.htm