⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iirgradient.m

📁 一种计算灰度图像的梯度幅值方法
💻 M
字号:
function [gx,gy]=IIRgradient(IM,As,Bs)
%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');


imgsize = size(IM);
fim=mat2gray(IM);
sx = imgsize(1); sy = imgsize(2);
for i = 1:sx
    for j = 1:sy
        GX(i,j) = (projfilter(j,As,Bs)*edgedetection(i,As,Bs))*IM(i,j);
        GY(i,j) = (projfilter(i,As,Bs)*edgedetection(j,As,Bs))*IM(i,j);
    end
end

gx = imfilter(fim,GX,'circular','conv');
gy = imfilter(fim,GY,'circular','conv');

function hy = projfilter(x,A,B)
hy = -exp(-A*x) * cos(B*A*x + pi/2);

function ey = edgedetection(x,A,B)
ey = (exp(-A*x)/A) * ((-cos(B*A*x + pi/2) + B*sin(A*B*x + pi/2)))/(1 + B^2);


% 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -