stringtranslate.com

Filtro de mediana

Ejemplo de 3 filtros medianos de diferentes radios aplicados a la misma fotografía ruidosa.

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 .

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 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 ]

Ejemplo unidimensional resuelto

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:

x = (2, 3, 80, 6, 2, 3).

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á:

y 0 = med(0, 2, 3) = 2, (el valor límite se toma como 0)
y 1 = med(2, 3, 80) = 3, (ya 2, 3 y 80 están en orden creciente, por lo que no es necesario ordenarlos)
y 2 = med(3, 80, 6) = med(3, 6, 80) = 6, (3, 80 y 6 se reorganizan para encontrar la mediana)
y 3 = med(80, 6, 2) = med(2, 6, 80) = 6,
y 4 = med(6, 2, 3) = med(2, 3, 6) = 3,
y 5 = med(2, 3, 0) = med(0, 2, 3) = 2,

es decir,

y = (2, 3, 6, 6, 3, 2).

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.


Cuestiones de límites

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:

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 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:

Uso de un filtro mediano para mejorar una imagen severamente dañada por píxeles defectuosos

Problemas de implementación del 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]

Ejemplo bidimensional resuelto

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:

  1. Selección de ventana :
    • Elija una ventana de un tamaño específico (por ejemplo, 3x3, 5x5) centrada alrededor del píxel que se va a filtrar.
    • Para nuestro ejemplo, utilizaremos una ventana de 3x3.
  2. Recopilar valores de píxeles :
    • Recopila los valores de los píxeles dentro de la ventana.
    • Para el píxel central, tenemos los siguientes valores:
      • Ventana:
      • Píxel central: 8
  3. Ordenar los valores :
    • Ordene los valores de píxeles recopilados en orden ascendente.
    • Para el píxel central, los valores ordenados son: [1, 2, 3, 4, 5, 6, 7, 8, 9]
  4. Elija el valor mediano :
    • El valor mediano es el valor medio en la lista ordenada.
    • En nuestro caso, el valor mediano es 5.
  5. Reemplazar el píxel central :
    • Reemplace el valor del píxel central original (8) con el valor medio (5).
  6. Repetir para todos los píxeles :
    • Repita los pasos 2 a 5 para todos los píxeles de la imagen.

Imagen convertida

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.

Propiedades de conservación de los bordes

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 .

Véase también

Referencias

  1. ^ Huang, Thomas S.; Yang, George J.; Tang, Gregory Y. (febrero de 1979). "Un algoritmo rápido de filtrado de mediana bidimensional" (PDF) . IEEE Transactions on Acoustics, Speech, and Signal Processing . 27 (1): 13–18. doi :10.1109/TASSP.1979.1163188.
  2. ^ Arias-Castro, Ery; Donoho, David L. (junio de 2009). "¿El filtrado de mediana realmente preserva los bordes mejor que el filtrado lineal?". Annals of Statistics . 37 (3): 1172–2009. arXiv : math/0612422 . Bibcode :2006math.....12422A. doi : 10.1214/08-AOS604 . MR  2509071. Zbl  1160.62086.
  3. ^ Arce, Gonzalo R. (2005). Procesamiento de señales no lineales: un enfoque estadístico . Nueva Jersey, EE. UU.: Wiley. ISBN 0-471-67624-1.

Enlaces externos