El filtro de mediana es una técnica de filtrado digital no lineal que se utiliza a menudo para eliminar el ruido de una imagen o señal. Esta reducción de ruido es un paso típico de preprocesamiento para mejorar los resultados del procesamiento posterior (por ejemplo, detección de bordes en una imagen). El filtrado de mediana se utiliza mucho en el procesamiento de imágenes digitales porque, en determinadas condiciones, conserva los bordes a la vez que elimina el ruido (pero consulte la discusión a continuación para saber qué tipos de ruido), y también tiene aplicaciones en el procesamiento de señales .
La idea principal del filtro de mediana es recorrer la señal entrada por entrada, reemplazando cada entrada con la mediana de la entrada y sus entradas vecinas. La idea es muy similar a un filtro de promedio móvil , que reemplaza cada entrada con la media aritmética de la entrada y sus vecinas. El patrón de vecinas se llama "ventana", que se desliza, entrada por entrada, sobre toda la señal. Para señales unidimensionales, la ventana más obvia son solo las primeras entradas anteriores y posteriores, mientras que para datos bidimensionales (o de dimensiones superiores), la ventana debe incluir todas las entradas dentro de un radio dado o una región elipsoidal o rectangular (es decir, el filtro de mediana no es un filtro separable ). [ cita requerida ]
Para demostrarlo, utilizando un tamaño de ventana de tres con una entrada inmediatamente anterior y posterior a cada entrada, y límites rellenados con ceros, se aplicará un filtro mediano a la siguiente señal unidimensional simple:
Esta señal tiene principalmente entradas de valores pequeños, excepto una entrada que es inusualmente alta y se considera un pico de ruido, y el objetivo es eliminarla. Por lo tanto, la señal de salida filtrada mediana y será:
es decir,
Está claro que el pico de ruido se ha eliminado esencialmente (y la señal también se ha suavizado un poco). El resultado de un filtro de promedio móvil con el mismo ancho de ventana en el mismo conjunto de datos sería y = (1,7; 28,3; 29,7; 29,3; 3,7; 1,7). Se puede ver que el pico de ruido ha infectado a los elementos vecinos en la señal de promedio móvil y que el filtro de mediana ha funcionado mucho mejor (para este tipo de ruido impulsivo). El filtrado de mediana funciona bien tanto para impulsos positivos (picos) como para impulsos negativos (pérdidas), siempre que se pueda elegir una ventana de modo que el número de entradas infectadas con ruido impulsivo sea (casi) siempre menor que la mitad del tamaño de la ventana.
Al implementar un filtro de mediana, los límites de la señal deben manejarse con especial cuidado, ya que no hay suficientes entradas para llenar una ventana completa. Existen varios esquemas que tienen diferentes propiedades que podrían ser preferibles en circunstancias particulares:
El código para un algoritmo de filtro mediano bidimensional simple podría verse así:
1. asignar outputPixelValue[ancho de la imagen][alto de la imagen]2. asignar ventana[ancho de ventana × alto de ventana]3. edgex := (ancho de ventana / 2) redondeado hacia abajo4. edgey := (altura de la ventana / 2) redondeado hacia abajo
para x desde edgex hasta el ancho de la imagen - edgex hacer para y desde edgey hasta la altura de la imagen - edgey hacer yo = 0 para fx desde 0 hasta el ancho de la ventana, hazlo para fy desde 0 hasta la altura de la ventana , hazlo ventana[i] := inputPixelValue[x + fx - edgex][y + fy - edgey] yo := yo + 1 ordenar entradas en ventana[] outputPixelValue[x][y] := ventana[ancho de la ventana * alto de la ventana / 2]
Este algoritmo:
Por lo general, la mayor parte del esfuerzo computacional y del tiempo se dedica a calcular la mediana de cada ventana. Debido a que el filtro debe procesar cada entrada en la señal, para señales grandes como imágenes, la eficiencia de este cálculo de la mediana es un factor crítico para determinar qué tan rápido puede ejecutarse el algoritmo. La implementación ingenua descrita anteriormente ordena cada entrada en la ventana para encontrar la mediana; sin embargo, dado que solo se requiere el valor medio en una lista de números, los algoritmos de selección pueden ser mucho más eficientes. Además, algunos tipos de señales (muy a menudo el caso de las imágenes) utilizan representaciones de números enteros: en estos casos, las medianas de histograma pueden ser mucho más eficientes porque es simple actualizar el histograma de ventana a ventana, y encontrar la mediana de un histograma no es particularmente oneroso. [1]
El filtro de mediana funciona considerando una ventana local (también conocida como núcleo) alrededor de cada píxel de la imagen. Los pasos para aplicar el filtro de mediana son los siguientes:
Después de aplicar el filtro de mediana a todos los píxeles, la imagen convertida se convierte en: Esta imagen filtrada elimina eficazmente los píxeles ruidosos y conserva las características importantes. Recuerde que asumimos filas y columnas virtuales con valores de píxeles de borde repetidos para manejar los píxeles de borde.
El filtrado de mediana es un tipo de técnica de suavizado, al igual que el filtrado gaussiano lineal . Todas las técnicas de suavizado son eficaces para eliminar el ruido en parches o regiones suaves de una señal, pero afectan negativamente a los bordes. Sin embargo, a menudo, al mismo tiempo que se reduce el ruido en una señal, es importante preservar los bordes. Los bordes son de importancia crítica para la apariencia visual de las imágenes, por ejemplo. Para niveles pequeños a moderados de ruido gaussiano, el filtro de mediana es demostrablemente mejor que el desenfoque gaussiano para eliminar el ruido mientras se preservan los bordes para un tamaño de ventana fijo dado. [2] Sin embargo, su rendimiento no es mucho mejor que el desenfoque gaussiano para niveles altos de ruido, mientras que, para el ruido moteado y el ruido de sal y pimienta (ruido impulsivo), es particularmente eficaz. [3] Debido a esto, el filtrado de mediana se usa ampliamente en el procesamiento de imágenes digitales .