Main Content

imnlmfilt

No local significa filtrar imágenes

Descripción

ejemplo

J = imnlmfilt(I) aplica un filtro no local basado en medios a la escala de grises o a la imagen en color y devuelve la imagen resultante en .IJ

ejemplo

J = imnlmfilt(I,Name,Value) utiliza pares nombre-valor para cambiar el comportamiento del filtro de medios no locales.

[J,estDoS] = imnlmfilt(___) también devuelve el grado de suavizado, , utilizado para estimar el valor de píxel desnoised.estDoS

Ejemplos

contraer todo

Lea una imagen en escala de grises.

I = imread('cameraman.tif');

Agregue ruido gaussiano blanco medio cero con una varianza de 0.0015 a la imagen utilizando la función.imnoise

noisyImage = imnoise(I,'gaussian',0,0.0015);

Elimine el ruido de la imagen a través del filtrado de medios no locales. La función calcula el grado de suavizado en función de la desviación estándar del ruido en la imagen.imnlmfilt

[filteredImage,estDoS] = imnlmfilt(noisyImage);

Muestre la imagen ruidoso (izquierda) y la imagen filtrada de medios no locales (derecha) como un montaje. Muestre el grado estimado de suavizado, , en el título de la figura.estDoS

El filtro de medios no local elimina el ruido de la imagen de entrada, pero conserva la nitidez de los bordes fuertes, como la silueta del hombre y los edificios. Esta función también suaviza las regiones con textura, como la hierba en primer plano de la imagen, lo que resulta en menos detalle en comparación con la imagen ruidoso.

montage({noisyImage,filteredImage}) title(['Estimated Degree of Smoothing, ', 'estDoS = ',num2str(estDoS)])

Lea una imagen en color.

imRGB = imread('peppers.png');

Añada ruido gaussiano blanco con media cero y varianza de 0,0015 a la imagen utilizando la función. imnoise Muestre la ruidoso imagen RGB.

noisyRGB = imnoise(imRGB,'gaussian',0,0.0015); imshow(noisyRGB)

Convierta la imagen RGB ruidoso al espacio de color L*a*b, de modo que el filtro de medios no locales suaviza los colores perceptualmente similares.

noisyLAB = rgb2lab(noisyRGB);

Extraiga un parche L*a*b homogéneo del fondo ruidoso para calcular la desviación estándar de ruido.

roi = [210,24,52,41]; patch = imcrop(noisyLAB,roi);

En este parche L*a*b, calcula la distancia euclidiana desde el origen, .edist A continuación, calcule la desviación estándar de para estimar el ruido.edist

patchSq = patch.^2; edist = sqrt(sum(patchSq,3)); patchSigma = sqrt(var(edist(:)));

Establezca el valor ' para que sea mayor que la desviación estándar del parche.DegreeOfSmoothing' Filtre la imagen no cableizada L*a*b* utilizando el filtrado de medios no locales.

DoS = 1.5*patchSigma; denoisedLAB = imnlmfilt(noisyLAB,'DegreeOfSmoothing',DoS);

Convierta la imagen L*a*b filtrada al espacio de color RGB. Visualice la imagen RGB filtrada.

denoisedRGB = lab2rgb(denoisedLAB,'Out','uint8'); imshow(denoisedRGB)

Compare un parche de la imagen RGB ruidoso (izquierda) y el mismo parche de la imagen RGB filtrada (derecha) de medios no locales.

roi2 = [178,68,110,110]; montage({imcrop(noisyRGB,roi2),imcrop(denoisedRGB,roi2)})

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 El tamaño de debe ser mayor o igual que 21 por 21.I

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

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: J = imnlmfilt(I,'DegreeOfSmoothing',10);

Grado de suavizado, especificado como el par separado por comas que consta de y un número positivo.'DegreeOfSmoothing' A medida que aumenta este valor, aumenta el suavizado en la imagen resultante.J Si no especifica , el valor predeterminado es la desviación estándar del ruido estimado de la imagen.'DegreeOfSmoothing' Para obtener más información, consulte .Grado predeterminado de suavizado

Tamaño de la ventana de búsqueda, especificado como el par separado por comas que consta de un entero positivo de valores impares, .'SearchWindowSize's La búsqueda de vecindades similares a un píxel se limita a la región -by- que rodea ese píxel. afecta al rendimiento linealmente en términos de tiempo. no puede ser mayor que el tamaño de la imagen de entrada, .ssSearchWindowSizeSearchWindowSizeI

Tamaño de ventana de comparación, especificado como el par separado por comas que consta de un entero positivo de valores impares, .'ComparisonWindowSize'c La función calcula los pesos de similitud utilizando los píxeles circundantes de la vecindad por. debe ser menor o igual que .imnlmfiltccComparisonWindowSizeSearchWindowSize Para obtener más información, consulte .Valor de píxel deruido estimado

Argumentos de salida

contraer todo

No local significa imagen filtrada, devuelta como una imagen en escala de grises 2D o una imagen en color 2D del mismo tamaño y tipo de datos que la imagen de entrada, .I

Grado estimado de suavizado, devuelto como un número positivo. Si especifica , devuelve el mismo valor en .DegreeOfSmoothingimnlmfiltestDoS De lo contrario, devuelve el grado predeterminado de suavizado estimado utilizando .imnlmfiltGrado predeterminado de suavizado

Sugerencias

  • Para suavizar los colores visiblemente cerrados en una imagen RGB, convierta la imagen al espacio de color CIE L*a*b* utilizando antes de aplicar el filtro de medios no locales.rgb2lab Para ver los resultados, primero convierta la imagen Filtrada L*a*b* al espacio de color RGB utilizando .lab2rgb

  • Si el tipo de datos de es , los cálculos se realizan en el tipo de datos .Idoubledouble De lo contrario, los cálculos se realizan en el tipo de datos .single

Algoritmos

contraer todo

Grado predeterminado de suavizado

El valor predeterminado de es la desviación estándar del ruido estimado de la imagen.'DegreeOfSmoothing' Para estimar la desviación estándar, convolves la imagen con un filtro de 3 por 3 propuesto por J. Immerk-r .imnlmfilt[2] Cuando es una imagen en color, el valor predeterminado de es las desviaciones estándar de ruido promediado a través de los canales.I'DegreeOfSmoothing'

Valor de píxel deruido estimado

El algoritmo de filtrado no local calcula el valor denoised de píxel mediante estos pasos.p

  1. Para un píxel específico, , en la ventana de búsqueda, calcule la distancia euclidiana ponderada entre los valores de píxel en las ventanas de comparación -by- que rodean y .qccpq Para imágenes en color, incluya todos los canales en el cálculo de distancia euclidiana.

    El peso es una función exponencial decreciente cuya tasa de descomposición está determinada por el cuadrado de .'DegreeOfSmoothing' Cuando una imagen es ruidoso, es grande y todos los píxeles contribuyen al cálculo de la distancia euclidiana.'DegreeOfSmoothing' Cuando una imagen tiene poco ruido, es pequeña y solo los píxeles con valores similares contribuyen al cálculo de la distancia euclidiana.'DegreeOfSmoothing'

    El resultado es un escalar numérico que indica la similitud entre el barrio de y el barrio de .pq

    Nota

    En la implementación por A. Buades et al. , la distancia euclidiana entre dos ventanas de comparación se corresponde con un núcleo gaussiano de tamaño -por- .[1]cc Esta convolución da más peso a la distancia euclidiana entre los valores de píxel para píxeles cerca del centro de la ventana de comparación. La función omite este paso para la eficiencia computacional.imnlmfilt

  2. Repita este cálculo para cada uno de los otros píxeles en la ventana de búsqueda -por-, encontrando la distancia euclidiana ponderada entre el píxel y cada uno de esos píxeles.ssp El resultado es una matriz de similitud -por- que indica similitud entre la vecindad de y las otras vecindades en la ventana de búsqueda.ssp

  3. Normalizar la matriz de similitud.

  4. Utilizando los pesos de la matriz de similitud normalizada, calcule el promedio ponderado de los valores de píxel en la ventana de búsqueda -por- alrededor del píxel.ssp El resultado es el valor denoised de .p

Referencias

[1] Buades, A., B. Coll, and J.-M. Morel. "A Non-Local Algorithm for Image Denoising." 2005 IEEE® Computer Society Conference on Computer Vision and Pattern Recognition. Vol. 2, June 2005, pp. 60–65.

[2] Immerkær, J. "Fast Noise Variance Estimation." Computer Vision and Image Understanding. Vol. 64, Number 2, Sept. 1996, pp. 300–302.

Introducido en R2018b