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.

locallapfilt

Filtrado rápido laplaciano local de imágenes

Sintaxis

B = locallapfilt(A,sigma,alpha)
B = locallapfilt(A,sigma,alpha,beta)
B = locallapfilt(___,Name,Value,...)

Descripción

ejemplo

B = locallapfilt(A,sigma,alpha) filtra la escala de grises o la imagen RGB A con un filtro laplaciano local rápido y consciente de aristas. sigma caracteriza la amplitud de bordes en A. alpha controla el suavizado de los detalles.

B = locallapfilt(A,sigma,alpha,beta) filtra la imagen mediante beta para controlar el rango dinámico de A.

ejemplo

B = locallapfilt(___,Name,Value,...) filtra la imagen mediante pares nombre-valor para controlar los aspectos avanzados del filtro. Los nombres de los parámetros pueden abreviarse.

Ejemplos

contraer todo

Importar una imagen RGB

A = imread('peppers.png');

Fije los parámetros del filtro para aumentar los detalles más pequeños que 0,4.

sigma = 0.4; alpha = 0.5;

Usar filtrado rápido de Laplaciano local

B = locallapfilt(A, sigma, alpha);

Mostrar las imágenes originales y filtradas lado a lado.

imshowpair(A, B, 'montage')

El filtrado local de Laplaciano es un algoritmo de cálculo intensivo. Para acelerar el procesamiento, locallapfilt aproxima el algoritmo al discretear el rango de intensidad en una serie de muestras definidas por el parámetro 'NumIntensityLevels'. Este parámetro se puede utilizar para balancear velocidad y calidad.

Importar una imagen RGB y mostrarla.

A = imread('peppers.png'); figure imshow(A) title('Original Image')

Utilice un valor sigma para procesar los detalles y un valor alpha para aumentar el contraste, mejorando eficazmente el contraste local de la imagen.

sigma = 0.2; alpha = 0.3;

El uso de menos muestras aumenta la velocidad de ejecución, pero puede producir artefactos visibles, especialmente en áreas de contraste plano. Tiempo de la función con sólo 20 niveles de intensidad.

t_speed = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20))  
t_speed = 0.4566 

Ahora, procesar la imagen y mostrarla.

B_speed = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 20); figure imshow(B_speed) title(['Enhanced with 20 intensity levels in ' num2str(t_speed) ' sec'])

Un mayor número de muestras produce resultados más buscados a expensas de más tiempo de procesamiento. Tiempo de la función con 100 niveles de intensidad.

t_quality = timeit(@() locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100))
t_quality = 2.0132 

Procese la imagen con niveles de intensidad de 100 y mostrarla:

B_quality = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', 100); figure imshow(B_quality) title(['Enhancement with 100 intensity levels in ' num2str(t_quality) ' sec'])

Trate de variar el número de niveles de intensidad en sus propias imágenes. Intente también aplanar el contraste (con alpha > 1). Usted verá que el número óptimo de niveles de intensidad es diferente para cada imagen y varía con alpha. De forma predeterminada, locallapfilt utiliza una heurística para equilibrar la velocidad y la calidad, pero no puede predecir el mejor valor para cada imagen.

Importar una imagen de color, reducir su tamaño y mostrarla.

A = imread('car2.jpg'); A = imresize(A, 0.25); figure imshow(A) title('Original Image')

Defina los parámetros del filtro para aumentar dramáticamente los detalles más pequeños que 0,3 (fuera de un rango normalizado de 0 a 1).

sigma = 0.3; alpha = 0.1;

Vamos a comparar los dos modos diferentes de filtrado de color. Procese la imagen filtrando su intensidad y filtrando cada canal de color por separado:

B_luminance = locallapfilt(A, sigma, alpha); B_separate  = locallapfilt(A, sigma, alpha, 'ColorMode', 'separate');

Mostrar las imágenes filtradas.

figure imshow(B_luminance) title('Enhanced by boosting the local luminance contrast')

figure imshow(B_separate) title('Enhanced by boosting the local color contrast')

Se ha aplicado una cantidad igual de realce de contraste a cada imagen, pero los colores están más saturados al configurar 'ColorMode' a 'separate'.

Importar una imagen. Convertir la imagen a punto flotante para que podamos añadir ruido artificial más fácilmente.

A = imread('pout.tif'); A = im2single(A);

Agregue el ruido de Gauss con la media cero y la variación 0,001.

A_noisy = imnoise(A, 'gaussian', 0, 0.001); psnr_noisy = psnr(A_noisy, A); fprintf('The peak signal-to-noise ratio of the noisy image is %0.4f\n', psnr_noisy);        
The peak signal-to-noise ratio of the noisy image is 30.0234 

Defina la amplitud de los detalles para suavizar y, a continuación, defina la cantidad de suavizado que se aplicará.

sigma = 0.1; alpha = 4.0;

Aplique el filtro para bordes.

B = locallapfilt(A_noisy, sigma, alpha); psnr_denoised = psnr(B, A); fprintf('The peak signal-to-noise ratio of the denoised image is %0.4f\n', psnr_denoised);
The peak signal-to-noise ratio of the denoised image is 32.3065 

Observe una mejora en la RNPS de la imagen.

Mostrar las tres imágenes de lado a lado. Observe que los detalles se alisan y las variaciones de intensidad aguda a lo largo de los bordes no cambian.

figure subplot(1,3,1), imshow(A), title('Original') subplot(1,3,2), imshow(A_noisy), title('Noisy') subplot(1,3,3), imshow(B), title('Denoised')

Importar la imagen, redimensionarla y mostrarla

A = imread('car1.jpg'); A = imresize(A, 0.25); figure imshow(A) title('Original Image')

El coche está sucio y cubierto de marcas. Vamos a tratar de borrar el polvo y las marcas en el cuerpo. Defina la amplitud de los detalles para suavizar y establezca una gran cantidad de suavizado para aplicar.

sigma = 0.2; alpha = 5.0;

Al suavizar (alpha > 1), el filtro produce resultados de alta calidad con un pequeño número de niveles de intensidad. Defina un pequeño número de niveles de intensidad para procesar la imagen más rápidamente.

numLevels = 16;

Aplicar el filtro.

B = locallapfilt(A, sigma, alpha, 'NumIntensityLevels', numLevels);

Mostrar el coche "limpio".

figure imshow(B) title('After smoothing details')

Argumentos de entrada

contraer todo

Imagen en escala de grises o RGB que se filtrará, especificada como una matriz real, no dispersa, m-por-n o m-por-n-por-3.

Tipos de datos: single | int8 | int16 | uint8 | uint16

Amplitud de aristas, especificada como escalar no negativo. sigma debe estar en el intervalo [0,1] para imágenes de enteros y para imágenes individuales definidas sobre el intervalo [0,1]. Para las imágenes individuales definidas en un rango diferente [a, b], sigma también debe estar en el rango [a, b].

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

Suavizado de detalles, especificado como escalar positivo. Los valores típicos de alpha están en la gama [0,01, 10].

ValorDescripción
alpha menos que 1Aumenta los detalles de la imagen de entrada, mejorando eficazmente el contraste local de la imagen sin afectar los bordes ni introduciendo halos.
alpha mayor que 1Suaviza los detalles de la imagen de entrada mientras conserva los bordes nítidos
alpha igual a 1Los detalles de la imagen de entrada se dejan sin cambios.

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

Rango dinámico, especificado como escalar no negativo. Los valores típicos de beta están en la gama [0.5]. beta afecta al rango dinámico de A.

ValorDescripción
beta menos que 1Reduce la amplitud de los bordes de la imagen, comprimiendo eficazmente el rango dinámico sin afectar a los detalles.
beta mayor que 1Expande el rango dinámico de la imagen.
beta igual a 1El rango dinámico de la imagen se deja sin cambios. Este es el valor predeterminado.

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

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos Name,Value . Name es el nombre del argumento y Value es el valor correspondiente. Name debe aparecer dentro de comillas simples (' '). Puede especificar varios argumentos de par de nombre y valor en cualquier orden como Name1,Value1,...,NameN,ValueN.

Ejemplo:

Método utilizado para filtrar imágenes RGB, especificada como uno de los siguientes valores. Este parámetro no afecta a las imágenes en escala de grises.

ValorDescripción
'luminance'locallapfilt convierte la imagen RGB de entrada en escala de grises antes de filtrar y volver a introducir el color después del filtrado, lo que cambia el contraste de la imagen de entrada sin afectar a los colores.
'separate'locallapfilt filtra cada canal de color de forma independiente.

Tipos de datos: char | string

Número de muestras de intensidad en el rango dinámico de la imagen de entrada, especificada como 'auto' o entero positivo. Un número más alto de muestras da los resultados más cerca al filtrado local exacto de Laplaciano. Un número más bajo aumenta la velocidad de ejecución. Los valores típicos están en la gama [10, 100]. Si se establece en 'auto', locallapfilt elige automáticamente el número de niveles de intensidad para equilibrar la calidad y la velocidad basándose en otros parámetros del filtro.

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 clase que la imagen de entrada.

Referencias

[1] Paris, Sylvain, Samuel W. Hasinoff, and Jan Kautz. Local Laplacian filters: edge-aware image processing with a Laplacian pyramid, ACM Trans. Graph. 30.4 (2011): 68.

[2] Aubry, Mathieu, et al. Fast local laplacian filters: Theory and applications. ACM Transactions on Graphics (TOG) 33.5 (2014): 167.

Consulte también

|

Introducido en R2016b