FILTRO MEDIANA EN C++
FILTRO MEDIANA EN C++ 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. I NTRODUCCIÓ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
7/05/14
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 #include #include 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]); ",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 me dianas son:\n"); for (i = 0; i < 198; i++) { printf("%3d ", vecmed[i]); vecm ed[i]);
GENERADOR DE SEÑALES }
vector[i] = temp;
}
} }
¿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 #include #include 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];
} 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. R ESULTADOS
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.
3 FILTRO MEDIANA EN C++
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