Respuesta

7

Convolving con un núcleo Laplaciano es similar a usar información de segunda derivada sobre los cambios de intensidad. Como esta derivada es sensible al ruido, con frecuencia suavizamos la imagen con un gaussiano antes de aplicar el filtro laplaciano.


Aquí está un ejemplo de MATLAB similar a lo que @belisarius colocado:

f='http://upload.wikimedia.org/wikipedia/commons/f/f4/Noise_salt_and_pepper.png'; 
I = imread(f); 

kAvg = fspecial('average',[5 5]); 
kLap = fspecial('laplacian',0.2); 

lapMask = @(I) imsubtract(I,imfilter(I,kLap)); 

subplot(131), imshow(I) 
subplot(132), imshow(imfilter(lapMask(I),kAvg)) 
subplot(133), imshow(lapMask(imfilter(I,kAvg))) 

enter image description here

+0

NIZA ¡Gracias! Entonces, ¿qué pasó cuando se revertieron los procedimientos? – Glove

+0

@biz: 'thron of three' lo explicó bien, refiérase a su respuesta – Amro

3

Numéricamente los resultados no son los mismos, pero las imágenes se ven bastante similares.

Ejemplo en Mathematica:

enter image description here

Editar

Como respuesta a @thron comentario en su respuesta acerca de la conmutación de filtros lineales y el relleno, basta con considerar las siguientes operaciones.

Mientras que la conmutación de un filtro gaussiano y laplaciano sin relleno es cierto:

list = {1, 3, 5, 7, 5, 3, 1}; 
gauss[x_] := GaussianFilter[ x, 1] 
lapl[x_] := LaplacianFilter[x, 1] 
Print[gauss[lapl[list]], lapl[gauss[list]]] 
(* 
->{5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139}  
    {5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139} 
*) 

Hacer lo mismo con el acolchado, dan como resultado una diferencia en los bordes:

gauss[x_] := GaussianFilter[ x, 1, Padding -> 1] 
lapl[x_] := LaplacianFilter[x, 1, Padding -> 1] 
Print[gauss[lapl[list]], lapl[gauss[list]]] 

(* 
->{4.68233,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.68233} 
    {4.58295,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.58295} 
*) 
+0

wow Muchas gracias si no se le pide demasiado, ¿puede hacer un ejemplo en Matlab? – Glove

+0

@biz Lo siento, no tengo Matlab disponible. Estoy seguro de que otros miembros pueden publicarlo. HTH! –

+0

Gracias de todos modos por su ayuda – Glove

6

Digamos que tiene dos filtros F1 y F2, y una imagen I. Si pasa su imagen a través de los dos filtros, se llega a una respuesta que se define como

X = ((I * F1) * F2) 

Donde aquí estoy usando * para representar convolution.

Por la regla asociativa de convolución, esto es lo mismo que.

X = (I * (F1 * F2)) 

usando conmutatividad, podemos decir que

X = (I * (F2 * F1)) = ((I * F2) * F1) 

Por supuesto, esto es en el buen dominio continuo de matemáticas, hacer estas cosas en una máquina significa que habrá errores de redondeo y algunos datos pueden estar perdido. También debe pensar si sus filtros son FIR, de lo contrario, todo el concepto de pensar en el filtrado digital como convolución comienza a desmoronarse ya que su filtro no puede comportarse como usted lo deseaba.


EDITAR

La convolución discreta se define como

conv2 uses a straightforward formal implementation of the two-dimensional convolution equation in spatial form

por lo que añadir ceros en los bordes de ustedes de datos no cambia nada en un sentido matemático.

Como han señalado algunas personas, obtendrás diferentes respuestas numéricamente, pero esto se espera cada vez que trabajamos con el cálculo de datos reales. Estas variaciones deben ser pequeñas y estar limitadas a los componentes de baja energía de la salida de la convolución (es decir, los bordes).

También es importante considerar cómo está funcionando la operación de convolución. La aplicación de dos conjuntos de datos de longitud X y longitud Y dará como resultado una respuesta que es X+Y-1 de longitud. Hay algunos detrás de la magia detrás de escenas para programas como MATLAB y Mathematica para darle una respuesta que es de longitud X o Y.

Por lo que respecta a la publicación de @belisarius, parecería que realmente estamos diciendo lo mismo.

+0

muy bien hecho gracias! – Glove

+0

La aplicación de filtros de imagen generalmente requiere algo de relleno (particularmente ajustado para cada filtro, dependiendo de los valores en el límite de la imagen). Y eso rompe la propiedad de conmutación. –

+0

@belisarius No estoy seguro de estar siguiendo cómo el relleno (cero o de otro modo) rompería la propiedad conmutativa para la convolución. ¿Puedes proporcionar una prueba? –