You are on page 1of 3

FILTRO MEDIANA EN C++

7/05/14

AbstractEn este informe se presentan los mtodos para
poder realizar filtros de mediana de ventana 3 y de ventana 5,
estos filtros se hacen para vectores de 200 nmeros aleatorios que
luego se almacenan en un nuevo vector, para la implementacin
de los filtros se utilizo una lenguaje de programacin 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. INTRODUCCIN

El filtro mediana surgi en 1970 cuando J. W. Tukey
propuso el uso de la mediana mvil para alisar series de una
dimensin en el dominio del tiempo. Posteriormente el filtro
tuvo una aplicacin bidimensional en el procesamiento de
imgenes digitales, esto es debido a que el filtro mediana es
insensible a ruidos impulsivos y preserva transiciones abruptas
de las seales, es decir, que este filtro acta como un
suavizador. En procesamiento de imgenes digitales, este es
un filtro de paso bajo y su funcin consiste en eliminar el
ruido de la imagen, mejorando su nitidez. En este laboratorio
se utiliz el FM de dimensin 1, con el objetivo de obtener la
mediana de un sucesin de nmeros aleatorios.
II. MARCO TERICO

Ordenacin por mtodo burbuja: Para ordenar los datos de
cada vector se us el mtodo 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 nmeros mayores a las ltimas
posiciones. A pesar de que este mtodo de ordenamiento es
uno de los algoritmos de ordenamiento menos eficientes, tiene
la ventaja de ser de fcil implementacin 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 (pequeos vectores
formados de datos en una vecindad). Este tipo de filtro es
usado para poder prescindir de los valores atpicos de un
conjunto de datos, estos valores atpicos se les conoce como
ruido impulsivo (spikes). Se usa en filtrado de imgenes 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 ms 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 programacin C/C++, que usa
Mingw para compilar los proyectos, diseado 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 SEALES
}
}

Qu funcin realiza el filtro mediana?
- Elimina los valores atpicos (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 variacin anormal en
el tiempo, al ser aplicada al filtro mediana la salida va a
conservar la forma general de la seal de entrada pero
reduciendo los valores indeseados.
- Para este laboratorio el filtro mediana se dise para que
en una vecindad de 3 datos numricos, los nuevos
valores en la salida fueran ms 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 ms cercanos entre ellos que
los del filtro de ventana 3. Este implicara que el filtro de
ventana 5 suaviza ms la varianza de los datos de
entrada, lo cual representa un filtro de mayor orden que
el de ventana 3.
De ejemplos prcticos donde se podran usar.
- En procesamiento de imgenes, 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 seales 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. Despus de haber pasado por el filtro
de mediana se podr apreciar la onda sin el pico que
se muestra en la figura.
Fig. 1. Seal 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 nmeros
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 nmeros 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 aproximacin ms real
de la seal que se quiere.
- Del laboratorio se puede observar que con un filtro de
mayor ventana se obtienen vecindades con valores ms
prximos.
- Con el mtodo de ordenamiento burbuja se logra realizar
un algoritmo de menor extensin que el algoritmo que se
usara 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