Aplicación de filtro sigma

El filtro sigma es un filtro que calcula los promedios sobre todos los pixeles dentro del vecindario del kernel siempre que su valor no difiera en más de un Sigma del valor del pixel central. En caso de que solamente un pixel cumpla con este requisito, se reemplaza por el promedio global.

En principio, el filtro sigma provee un suavizado más débil que un filtro promedio, tratando de preservar los bordes dentro de la imagen.

Podemos implementar el filtro sigma y aplicarlo sobre una imagen usando el siguiente código y la librería scipy:

import numpy as np
from scipy.ndimage import generic_filter


def sigma_filter(values, median=False):
    
    mean = values[int((values.size)//2)]
    if median:
      mean = np.median(values)

    std = np.std(values)
    filtered_values = values[(values > mean - std) & (values < mean + std)]
    return np.mean(values) if filtered_values.size<=1 else np.mean(filtered_values)


filtered_image = generic_filter(imagen, sigma_filter, size=(N,M))

Noten que a través de la función generic_filter es posible aplicar el filtro sigma sobre un vecindario de NxM especificado en el parámetro opcional size.

Es posible también pasarle el atributo opcional median al llamar generic_filter usando el atributo opcional extra_arguments que espera una tupla con todos los argumentos poricionales para mandar al filtro. En este caso, para usar la versión con sigma se debería añadir extra_arguments=(True,)

Last updated