El filtro mediano es una técnica de filtrado digital no lineal , que a menudo se utiliza para eliminar el ruido de una imagen o señal. Dicha 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 medio se usa mucho en el procesamiento de imágenes digitales porque, bajo ciertas condiciones, preserva los bordes mientras elimina el ruido (pero vea la discusión a continuación), y también tiene aplicaciones en el procesamiento de señales .
Descripción del algoritmo
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 denomina "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 mayor dimensión) la ventana debe incluir todas las entradas dentro de un radio o región elipsoidal determinada (es decir, el filtro de mediana no es un filtro separable ).
Ejemplo unidimensional resuelto
Para demostrar, usando un tamaño de ventana de tres con una entrada inmediatamente antes y después de cada entrada, se aplicará un filtro de mediana a la siguiente señal unidimensional simple:
- x = (2, 3, 80, 6, 2, 3).
Entonces, la señal de salida filtrada mediana y será:
- y 1 = med (2, 3, 80) = 3,
- y 2 = med (3, 80, 6) = med (3, 6, 80) = 6,
- y 3 = med (80, 6, 2) = med (2, 6, 80) = 6,
- y 4 = med (6, 2, 3) = med (2, 3, 6) = 3,
es decir, y = (3, 6, 6, 3).
Problemas de límites
En el ejemplo anterior, debido a que no hay ninguna entrada que preceda al primer valor, el primer valor se repite, como con el último valor, para obtener suficientes entradas para llenar la ventana. Esta es una forma de manejar las entradas de ventana que faltan en los límites de la señal, pero hay otros esquemas que tienen propiedades diferentes que podrían ser preferibles en circunstancias particulares:
- Evite procesar los límites, con o sin recortar la señal o el límite de la imagen posteriormente,
- Obteniendo entradas de otros lugares en la señal. Con imágenes, por ejemplo, se pueden seleccionar entradas desde el límite horizontal o vertical lejano,
- Reducir la ventana cerca de los límites, para que todas las ventanas estén llenas.
Pseudocódigo de filtro mediano bidimensional
El código para un algoritmo de filtro mediano bidimensional simple podría verse así:
1. asignar outputPixelValue [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: = (altura de la ventana / 2) redondeado hacia abajo para x de edgex a ancho de imagen - edgex do para y de edgey a alto de imagen - edgey do i = 0 para fx desde 0 hasta el ancho de la ventana hacer para fy desde 0 hasta la altura de la ventana hacer ventana [i]: = inputPixelValue [x + fx - edgex] [y + fy - edgey] yo: = yo + 1 ordenar entradas en la ventana [] outputPixelValue [x] [y]: = ventana [ancho de ventana * alto de ventana / 2]
Este algoritmo:
- Procesa un solo canal de color,
- Adopta el enfoque de "no procesar límites" (ver la discusión anterior sobre cuestiones de límites).
Problemas de implementación de algoritmos
Por lo general, la mayor parte del esfuerzo y el tiempo de cálculo se dedican 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 se puede ejecutar 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) usan 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]
Propiedades de conservación de bordes
El filtrado de la mediana es un tipo de técnica de suavizado, al igual que el filtrado lineal gaussiano . Todas las técnicas de suavizado son eficaces para eliminar el ruido en parches suaves 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 mediano es demostrablemente mejor que el desenfoque gaussiano para eliminar el ruido mientras conserva 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 ruido de moteado y ruido de sal y pimienta (ruido impulsivo), es particularmente efectivo. [3] Debido a esto, el filtrado de la mediana es muy utilizado en el procesamiento de imágenes digitales .
Ver también
Referencias
- ^ Huang, Thomas S .; Yang, George J .; Tang, Gregory Y. (febrero de 1979). "Un algoritmo de filtrado medio bidimensional rápido" (PDF) . Transacciones IEEE sobre acústica, habla y procesamiento de señales . 27 (1): 13-18. doi : 10.1109 / TASSP.1979.1163188 .
- ^ Arias-Castro, Ery; Donoho, David L. (junio de 2009). "¿El filtrado de mediana realmente conserva los bordes mejor que el filtrado lineal?" . Annals of Statistics . 37 (3): 1172-2009. arXiv : matemáticas / 0612422 . Bibcode : 2006math ..... 12422A . doi : 10.1214 / 08-AOS604 . Señor 2509071 . Zbl 1160.62086 .
- ^ Arce, Gonzalo R. (2005). Procesamiento de señales no lineales: un enfoque estadístico . Nueva Jersey, Estados Unidos: Wiley. ISBN 0-471-67624-1.
enlaces externos
- Implementación rápida del filtro mediano unidimensional de MATLAB
- Función Mathematica MedianFilter
- Filtro de mediana
- Filtro de mediana bidimensional rápido
- Implementación de un filtro mediano bidimensional en tiempo constante (licencia GPL) : el tiempo de ejecución por píxel de este algoritmo es proporcional al número de elementos de un histograma (normalmente es, donde n es el número de bits por canal), aunque esto a su vez es una constante.
- Implementación escrita en diferentes lenguajes de programación (en Rosetta Code )
- Artículo del Dr. Dobbs
- Filtro de mediana ponderado 100+ veces más rápido
- Filtro de mediana de círculo Filtro de mediana para datos con valores de círculo, como imágenes de fase u orientación (C ++ / Matlab)