Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

imbilatfilt

Filtrado bilateral de imágenes con kernels gaussianos

Descripción

J = imbilatfilt(I) aplica un filtro bilateral gaussiano que preserva el borde a la imagen en escala de grises o RGB, .I

ejemplo

J = imbilatfilt(I,degreeOfSmoothing) especifica la cantidad de suavizado. Cuando es un valor pequeño, suaviza las vecindades con una pequeña varianza (áreas uniformes) pero no suaviza las vecindades con una gran varianza, como bordes fuertes.degreeOfSmoothingimbilatfilt Cuando el valor aumenta, suaviza las áreas uniformes y las vecindades con mayor varianza.degreeOfSmoothingimbilatfilt

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

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

Ejemplos

contraer todo

Leer y mostrar una imagen en escala de grises. Observe el artefacto de estriación horizontal en la región del cielo.

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

Inspeccione un parche de la imagen de la región del cielo. Calcular la varianza del parche, que se aproxima a la varianza del ruido.

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

patchVar = std2(patch)^2;

Filtre la imagen mediante 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)])

El artefacto de estriación se reduce, pero no se elimina. Para mejorar el suavizado, aumente el valor de para que los píxeles vecinos distantes contribuyan más al kernel de suavizado gaussiano.spatialSigma2 Esto aumenta efectivamente la extensión espacial del filtro bilateral.

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

El artefacto de estración en el cielo se elimina con éxito. Se ha conservado la nitidez de los bordes fuertes, como la silueta del hombre, y las regiones texturizadas, como la hierba en primer plano de la imagen.

Lea una imagen RGB.

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

Convierta la imagen en el espacio de color L*a*b, de modo que el filtro bilateral suaviza los colores perceptualmente similares.

imLAB = rgb2lab(imRGB);

Extraiga un parche L*a*b que no contenga bordes afilados. Calcular la varianza en la distancia euclidiana desde el origen, en el espacio 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* mediante el filtrado bilateral. Establezca el valor para que sea mayor que la varianza del parche.DegreeOfSmoothing

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

Vuelva a convertir la imagen en el 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)])

Los colores de las fichas y la pluma negra parecen más uniformes, pero los granos horizontales de la tabla siguen siendo visibles. Aumente la extensión espacial del filtro para que la vecindad efectiva del filtro abarque el espacio entre los granos horizontales (esta distancia es de aproximadamente siete píxeles). También aumente la para suavizar estas regiones de forma más agresiva.DegreeOfSmoothing

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

El color de la mesa de madera es más uniforme con el vecindario más grande y mayor grado de suavizado. Se conserva la nitidez del borde de las virutas y la pluma.

Argumentos de entrada

contraer todo

Imagen a filtrar, especificada como una imagen en escala de grises 2D de tamaño -por- o una imagen en color 2-D de tamaño -por- -por-3.mnmn

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

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

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

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: realiza un filtrado bilateral de la imagen utilizando una vecindad de 7 por 7 píxeles.imbilatfilt(I,'NeighborhoodSize',7)I

Tamaño de vecindad, especificado como el par separado por comas que consta de y un entero positivo de valores impares.'NeighborhoodSize' De forma predeterminada, el tamaño de vecindad es 2*ceil(2*SpatialSigma)+1 Píxeles

Ejemplo: 'NeighborhoodSize',7

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

Relleno, especificado como el par separado por comas que consta de y uno de estos valores.'Padding'

ValorDescripción
'replicate'Se supone que los valores de matriz de entrada fuera de los límites de la matriz son iguales al valor de borde de matriz más cercano.
'symmetric'

Los valores de matriz de entrada fuera de los límites de la matriz se calculan reflejando la matriz a través del borde de la matriz.

escalar numérico,xA los valores de imagen de entrada 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 una matriz numérica del mismo tamaño y tipo de datos que la imagen de entrada, .I

Sugerencias

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

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

  • Aumento de aumentos, lo que aumenta el tiempo de ejecución del filtro.spatialSigmaNeighborhoodSize Puede especificar una precisión de comercio más pequeña para un tiempo de ejecución más rápido.NeighborhoodSize

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.

Introducido en R2018a