matriz - low pass filter matlab
Derivado del filtro gaussiano en Matlab (3)
¿Hay una derivada de la función de filtro gaussiano en Matlab? ¿Sería apropiado convolucionar el filtro gaussiano con [1 0 -1] para obtener el resultado?
Hasta donde yo sé, no existe una derivada incorporada del filtro gaussiano. Puede crear uno fácilmente para usted de la siguiente manera:
Para 2D
G1=fspecial(''gauss'',[round(k*sigma), round(k*sigma)], sigma);
[Gx,Gy] = gradient(G1);
[Gxx,Gxy] = gradient(Gx);
[Gyx,Gyy] = gradient(Gy);
Donde k determina el tamaño de la misma (depende de la medida en que desee soporte).
Para 1D es lo mismo, pero no tiene dos direcciones de gradiente, solo una. También crearías el filtro gaussiano de otra manera y supongo que ya tienes tu método preferido.
Aquí te di hasta el segundo orden, pero puedes ver el patrón aquí para proceder a nuevas órdenes.
El filtro en convolución que publicaste ([1 0 -1]) parece una diferencia finita. Aunque creo que el suyo es conceptualmente correcto, la forma más correcta y común de hacerlo es con [1 -1] o [-1 1], con ese 0 en el medio omite la muestra central al aproximar la derivada. Esto también puede funcionar (pero teniendo en cuenta que es una aproximación que para órdenes superiores difiere del resultado verdadero ), pero generalmente prefiero el método que publiqué anteriormente.
Nota: Si está interesado en los filtros 2D, Derivative of Gaussian tiene la propiedad de capacidad de direccionamiento, lo que significa que puede crear fácilmente un filtro para una derivada de gaussiano en cualquier dirección desde la que le entregué. Suponiendo que la dirección que desea se define como
cos(theta), sin(theta)
Entonces la derivada de Gauss en esa dirección es
Gtheta = cos(theta)*Gx + sin(theta)*Gy
Si vuelve a aplicar esto recursivamente, puede ir a cualquier orden que desee.
Simplemente use la derivada de un gaussiano que no es más difícil que calcular el propio gaussiano.
G(x,y) = exp(-(x^2+y^2)/(2*s^2))
d/dx G(x, y) = -x/s^2
d/dy G(x, y) = -y/s^2
function [ y ] = dgaus( x,n )
%DGAUS nth derivative of exp(-x.^2)
odd=0*x;
even=exp(-x.^2);
for order=0:(floor(n/2)-1)
odd=-4*order*odd-2*x.*even;
even=-(4*order+2)*even-2*x.*odd;
end
if mod(n,2)==0
y=even;
else
y=-2*(n-1)*odd-2*x.*even;
end
end