El filtro mediano 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, la detección de bordes en una imagen). El filtrado mediano se usa muy ampliamente en el procesamiento de imágenes digitales porque, bajo ciertas condiciones, preserva los bordes mientras elimina el ruido (pero consulte la discusión a continuación), 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 las entradas vecinas. El patrón de vecinos 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 siguientes, mientras que para datos bidimensionales (o de dimensiones superiores), la ventana debe incluir todas las entradas dentro de un radio o región elipsoidal determinado (es decir, la ventana más obvia). El filtro mediano no es un filtro separable ). [ cita necesaria ]
Para demostrarlo, utilizando un tamaño de ventana de tres con una entrada inmediatamente antes y después de cada entrada, y límites rellenos con ceros, se aplicará un filtro mediano a la siguiente señal unidimensional simple:
Entonces, la señal de salida filtrada mediana y será:
es decir, y = (2, 3, 6, 6, 3, 2).
Al implementar un filtro mediano, los límites de la señal deben manejarse con especial cuidado, ya que no hay suficientes entradas para llenar una ventana completa. Hay varios esquemas que tienen diferentes propiedades que podrían preferirse en circunstancias particulares:
El código para un algoritmo de filtro de mediana bidimensional simple podría verse así:
1. asignar salidaPixelValue [ancho de imagen] [alto de imagen]2. asignar ventana [ancho de ventana × alto de ventana]3. edgex := (ancho de ventana / 2) redondeado hacia abajo4. edgey := (alto 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, haga para fy desde 0 hasta la altura de la ventana, haga ventana[i] := inputPixelValue[x + fx - edgex][y + fy - edgey] yo := yo + 1 ordenar entradas en la ventana [] salidaPixelValue[x][y] := ventana[ancho de ventana * alto de ventana / 2]
Este algoritmo:
Normalmente, la mayor parte del tiempo y esfuerzo computacional se dedica a calcular la mediana de cada ventana. Debido a que el filtro debe procesar cada entrada de la señal, para señales grandes como imágenes, la eficiencia de este cálculo mediano 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 sólo se requiere el valor medio de 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 los histogramas pueden ser mucho más eficientes porque es sencillo actualizar el histograma de una ventana a otra y encontrar la mediana de un histograma. no es particularmente oneroso. [1]
El filtrado mediano 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 de 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 mediano es demostrablemente mejor que el desenfoque gaussiano para eliminar el ruido y al mismo tiempo preservar los bordes para un tamaño de ventana fijo determinado. [2] Sin embargo, su rendimiento no es mucho mejor que el desenfoque gaussiano para altos niveles de ruido, mientras que, para ruido moteado y ruido de sal y pimienta (ruido impulsivo), es particularmente efectivo. [3] Debido a esto, el filtrado mediano se usa muy ampliamente en el procesamiento de imágenes digitales .