Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

imbilatfilt

Filtrado bilateral de imágenes con núcleos gaussianos

Descripción

J = imbilatfilt(I) aplica un filtro bilateral gaussiano que conserva los bordes a la imagen en escala de grises o RGB, I.

ejemplo

J = imbilatfilt(I,degreeOfSmoothing) especifica la cantidad de suavizado. Cuando degreeOfSmoothing es un valor pequeño, imbilatfilt suaviza los entornos con una varianza pequeña (áreas uniformes), pero no los entornos con una varianza grande, como los bordes pronunciados. Cuando aumenta el valor de degreeOfSmoothing, imbilatfilt suaviza tanto las áreas uniformes como los entornos con una varianza mayor.

J = imbilatfilt(I,degreeOfSmoothing,spatialSigma) también especifica la desviación estándar, spatialSigma, del núcleo de suavizado gaussiano espacial. Los valores más grandes de spatialSigma aumentan la contribución de los píxeles vecinos más distantes, aumentando efectivamente el tamaño del entorno.

J = imbilatfilt(___,Name,Value) usa pares nombre-valor para cambiar el comportamiento del filtro bilateral.

Ejemplos

contraer todo

Lea una imagen en escala de grises y muéstrela. Observe el artefacto de estriado horizontal en la región del cielo.

I = imread('cameraman.tif');
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

Inspeccione una sección de la imagen en la región del cielo. Calcule la varianza de la sección, que se aproxima a la varianza del ruido.

patch = imcrop(I,[170, 35, 50 50]);
imshow(patch)

Figure contains an axes object. The axes object contains an object of type image.

patchVar = std2(patch)^2;

Filtre la imagen utilizando filtrado bilateral. Establezca el grado de suavizado para que sea mayor que la varianza del ruido.

DoS = 2*patchVar;
J = imbilatfilt(I,DoS);
imshow(J)
title(['Degree of Smoothing: ',num2str(DoS)])

Figure contains an axes object. The axes object with title Degree of Smoothing: 51.9395 contains an object of type image.

El artefacto de estriado se reduce, pero no se elimina. Para mejorar el suavizado, aumente el valor de spatialSigma a 2 para que los píxeles vecinos distantes contribuyan más al núcleo de suavizado gaussiano. En la práctica, esto aumenta la extensión espacial del filtro bilateral.

K = imbilatfilt(I,DoS,2);
imshow(K)
title(['Degree of Smoothing: ',num2str(DoS),', Spatial Sigma: 2'])

Figure contains an axes object. The axes object with title Degree of Smoothing: 51.9395, Spatial Sigma: 2 contains an object of type image.

El artefacto de estriado en el cielo se elimina correctamente. Se han conservado la nitidez de los bordes intensos, como la silueta del hombre, y las regiones texturizadas, como la hierba en el primer plano de la imagen.

Lea una imagen RGB.

imRGB = imread("coloredChips.png");
imshow(imRGB)

Figure contains an axes object. The axes object contains an object of type image.

Convierta la imagen al espacio de color L*a*b*, de modo que el filtro bilateral suavice los colores que se perciben como similares.

imLAB = rgb2lab(imRGB);

Extraiga una sección que no contenga bordes nítidos. Calcule la varianza en la distancia euclidiana desde el origen, en el espacio de color L*a*b*.

patch = imcrop(imLAB,[34,71,60,55]);
patchSq = patch.^2;
edist = sqrt(sum(patchSq,3));
patchVar = std2(edist).^2;

Filtre la imagen en el espacio de color L*a*b* utilizando filtrado bilateral. Establezca el valor de DegreeOfSmoothing para que sea mayor que la varianza de la sección.

DoS = 2*patchVar;
smoothedLAB = imbilatfilt(imLAB,DoS);

Convierta la imagen de nuevo al espacio de color RGB y muestre la imagen suavizada.

smoothedRBG = lab2rgb(smoothedLAB,"Out","uint8");
montage({imRGB,smoothedRBG})
title("Original Image vs. Filtered Image with Degree of Smoothing: "+num2str(DoS))

Figure contains an axes object. The axes object with title Original Image vs. Filtered Image with Degree of Smoothing: 7.9771 contains an object of type image.

Los colores de las fichas y el bolígrafo negro se muestran más uniformes, pero las vetas horizontales de la mesa aún son visibles. Aumente la extensión espacial del filtro para que el entorno efectivo del filtro abarque el espacio entre las vetas horizontales (esta distancia es aproximadamente de siete píxeles). Aumente también el DegreeOfSmoothing para suavizar estas regiones de forma más agresiva.

DoS2 = 4*patchVar;
sigma = 7;
smoothedLAB2 = imbilatfilt(imLAB,DoS2,sigma);
smoothedRBG2 = lab2rgb(smoothedLAB2,"Out","uint8");
montage({imRGB,smoothedRBG2})
title("Original Image vs. Filtered Image with Degree of Smoothing: "+num2str(DoS)+ ...
    " and Spatial Sigma: "+sigma)

Figure contains an axes object. The axes object with title Original Image vs. Filtered Image with Degree of Smoothing: 7.9771 and Spatial Sigma: 7 contains an object of type image.

El color de la mesa de madera es más uniforme con este entorno más extenso y el mayor grado de suavizado. Se conserva la nitidez de los bordes de las fichas y el bolígrafo.

Argumentos de entrada

contraer todo

Imagen que se desea filtrar, especificada como imagen 2D en escala de grises de tamaño m por n o imagen 2D en color de tamaño m por n por 3.

Tipos de datos: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Grado de suavizado, especificado como número positivo. El valor predeterminado de degreeOfSmoothing depende del tipo de datos de la imagen I y se calcula como 0.01*diff(getrangefromclass(I)).^2. Por ejemplo, el grado de suavizado predeterminado es 650.25 para imágenes con tipo de datos uint8 y de 0.01 para imágenes con tipo de datos double con valores de píxeles en el intervalo [0, 1].

Desviación estándar del núcleo de suavizado gaussiano espacial, representada como número positivo.

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

Ejemplo: imbilatfilt(I,NeighborhoodSize=7) realiza un filtrado bilateral en la imagen I utilizando un entorno de píxeles de 7 por 7.

En las versiones anteriores a la R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: imbilatfilt(I,"NeighborhoodSize",7) realiza un filtrado bilateral en la imagen I utilizando un entorno de píxeles de 7 por 7.

Tamaño del entorno, especificado como entero positivo impar. De forma predeterminada, el tamaño del entorno es de 2*ceil(2*SpatialSigma)+1 píxeles.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Relleno, especificado como uno de estos valores.

ValorDescripción
"replicate"Los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se asumen iguales que el valor de borde más cercano del arreglo.
"symmetric"

Los valores del arreglo de entrada que se encuentran fuera de los límites del arreglo se calculan reflejando en espejo el arreglo a lo largo de su borde.

Escalar numérico, xA los valores de la imagen de entrada que se encuentran fuera de los límites de la imagen se les asigna el valor x.

Ejemplo: Padding="symmetric"

Ejemplo: Padding=128

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

Argumentos de salida

contraer todo

Imagen filtrada, devuelta como arreglo numérico del mismo tamaño y tipo de datos que la imagen de entrada, I.

Sugerencias

  • El valor de degreeOfSmoothing corresponde a la varianza del núcleo gaussiano de intervalo del filtro bilateral [1]. El intervalo gaussiano se aplica a la distancia euclidiana de un valor de píxel a partir de los valores de sus vecinos.

  • Para suavizar perceptivamente los colores cercanos de una imagen RGB, convierta la imagen al espacio L*a*b* CIE utilizando rgb2lab antes de aplicar el filtro bilateral. Para ver los resultados, convierta la imagen filtrada a RGB utilizando lab2rgb.

  • Al aumentar spatialSigma aumenta NeighborhoodSize, lo que aumenta el tiempo de ejecución del filtro. Se puede especificar un NeighborhoodSize más pequeño para lograr un tiempo de ejecución más rápido a costa de la precisión.

Referencias

[1] Tomasi, C., and R. Manduchi. "Bilateral Filtering for Gray and Color Images". Proceedings of the 1998 IEEE® International Conference on Computer Vision. Bombay, India. Jan 1998, pp. 836–846.

Capacidades ampliadas

Historial de versiones

Introducido en R2018a

expandir todo