www.pudn.com > edege_detection.rar > edege_detection.m


%基于小波变换模极大的多尺度图像边缘检测matlab源代码 该算法采用的是样条小波, 
% 为了更好的检测边缘,用a tuous 算法代替了mallat算法。  
% 该算法和mallat快速算法主要区别:  
% 1 a tuous 算法不需要抽取偶数样本,所以奇异检测定位更准确,相应的重构是不需要插零。 
% 2 a tuous 算法需要对滤波器进行伸缩。  
 
clear all; 
load woman; 
I = ind2gray(X,map); 
imshow(I); 
I1 = imadjust(I,stretchlim(I),[0,1]); 
figure;imshow(I1); 
[N,M] = size(I); 
 
h = [0.125,0.375,0.375,0.125]; 
g = [0.5,-0.5]; 
delta = [1,0,0]; 
 
J = 2; 
 
a(1:N,1:M,1,1:J+1) = 0; 
dx(1:N,1:M,1,1:J+1) = 0; 
dy(1:N,1:M,1,1:J+1) = 0; 
d(1:N,1:M,1,1:J+1) = 0; 
 
a(:,:,1,1) = conv2(h,h,I,'same'); 
dx(:,:,1,1) = conv2(delta,g,I,'same'); 
dy(:,:,1,1) = conv2(g,delta,I,'same'); 
 
x = dx(:,:,1,1); 
y = dy(:,:,1,1); 
d(:,:,1,1) = sqrt(x.^2+y.^2); 
I1 = imadjust(d(:,:,1,1),stretchlim(d(:,:,1,1)),[0 1]); 
figure; 
imshow(I1); 
 
lh = length(h); 
lg = length(g); 
 
for j = 1:J+1 
    lhj = 2^j*(lh-1)+1; 
    lgj = 2^j*(lg-1)+1; 
    hj(1:lhj)=0; 
    gj(1:lgj)=0; 
    for n = 1:lh 
        hj(2^j*(n-1)+1)=h(n); 
    end 
    for n = 1:lg 
        gj(2^j*(n-1)+1)=g(n); 
    end 
    a(:,:,1,j+1) = conv2(hj,hj,a(:,:,1,j),'same'); 
    dx(:,:,1,j+1) = conv2(delta,gj,a(:,:,1,j),'same'); 
    dy(:,:,1,j+1) = conv2(gj,delta,a(:,:,1,j),'same'); 
    x = dx(:,:,1,j+1); 
    y = dy(:,:,1,j+1); 
    dj(:,:,1,j+1) = sqrt(x.^2+y.^2); 
    I1 = imadjust(dj(:,:,1,j+1),stretchlim(dj(:,:,1,j+1)),[0 1]); 
    figure;imshow(I1); 
end