1234567891011121314151617181920212223242526272829303132333435 |
- function [gx,gy]=gaussgradient(IM,sigma)
- %GAUSSGRADIENT Gradient using first order derivative of Gaussian.
- % [gx,gy]=gaussgradient(IM,sigma) outputs the gradient image gx and gy of
- % image IM using a 2-D Gaussian kernel. Sigma is the standard deviation of
- % this kernel along both directions.
- %
- % Contributed by Guanglei Xiong (xgl99@mails.tsinghua.edu.cn)
- % at Tsinghua University, Beijing, China.
- %determine the appropriate size of kernel. The smaller epsilon, the larger
- %size.
- epsilon=1e-2;
- halfsize=ceil(sigma*sqrt(-2*log(sqrt(2*pi)*sigma*epsilon)));
- size=2*halfsize+1;
- %generate a 2-D Gaussian kernel along x direction
- for i=1:size
- for j=1:size
- u=[i-halfsize-1 j-halfsize-1];
- hx(i,j)=gauss(u(1),sigma)*dgauss(u(2),sigma);
- end
- end
- hx=hx/sqrt(sum(sum(abs(hx).*abs(hx))));
- %generate a 2-D Gaussian kernel along y direction
- hy=hx';
- %2-D filtering
- gx=imfilter(IM,hx,'replicate','conv');
- gy=imfilter(IM,hy,'replicate','conv');
- function y = gauss(x,sigma)
- %Gaussian
- y = exp(-x^2/(2*sigma^2)) / (sigma*sqrt(2*pi));
- function y = dgauss(x,sigma)
- %first order derivative of Gaussian
- y = -x * gauss(x,sigma) / sigma^2;
|