![]() |
麻烦各位高手帮忙看看—小波模极大值多尺度边缘检测程序!
I=imread('duanku.jpg');
% X=double(imread('1.bmp')); X=rgb2gray(I); SIZE=length(X); % 图像尺寸 % 多尺度 m=1.0; delta=2^m; % 构造高斯函数的偏导 N=20; % 滤波器长度(需要调整,必须是偶数) for index_x=1:N; for index_y=1:N; x=index_x-(N+1)/2; y=index_y-(N+1)/2; phi_x(index_x,index_y)=(x/delta^2).*exp(-(x.*x+y.*y)/(2*delta^2)); phi_y(index_x,index_y)=(y/delta^2).*exp(-(x.*x+y.*y)/(2*delta^2)); end end phi_x=phi_x/norm(phi_x); % 能量归一化 phi_y=phi_y/norm(phi_y); % 能量归一化 % 对图象做行列卷积 Gx=conv2(X,phi_x,'same'); Gy=conv2(X,phi_y,'same'); % 求梯度 Grads=sqrt((Gx.*Gx)+(Gy.*Gy)); % 求幅角(梯度方向) angle_array=zeros(SIZE,SIZE); % 角度 % 遍历 for i=1:SIZE; for j=1:SIZE if (abs(Gx(i,j))>eps*100) % x的绝对值足够大 p=atan(Gy(i,j)/Gx(i,j))*180/pi; % 反正切求角度值(1,4象限) if (p<0) % 负的幅角(4象限) p=p+360; end if (Gx(i,j)<0 & p>180) % 2象限的特殊处理 p=p-180; elseif (Gx(i,j)<0 & p<180) % 3象限的特殊处理 p=p+180; end else % 90或270度 p=90; end angle_array(i,j)=p; % 幅角赋值 end end % 找边缘 edge_array=zeros(SIZE,SIZE); % 遍历 for i=2:SIZE-1 for j=2:SIZE-1 if ((angle_array(i,j)>=(-22.5) & angle_array(i,j)<=22.5) | ... (angle_array(i,j)>=(180-22.5) & angle_array(i,j)<=(180+22.5))) % 0/180 if (Grads(i,j)>Grads(i+1,j) & Grads(i,j)>Grads(i-1,j)) edge_array(i,j)=Grads(i,j); end elseif ((angle_array(i,j)>=(90-22.5) & angle_array(i,j)<=(90+22.5)) | ... (angle_array(i,j)>=(270-22.5) & angle_array(i,j)<=(270+22.5))) % 90/270 if (Grads(i,j)>Grads(i,j+1) & Grads(i,j)>Grads(i,j-1)) edge_array(i,j)=Grads(i,j); end elseif ((angle_array(i,j)>=(45-22.5) & angle_array(i,j)<=(45+22.5)) | ... (angle_array(i,j)>=(225-22.5) & angle_array(i,j)<=(225+22.5))) % 45/225 if (Grads(i,j)>Grads(i+1,j+1) & Grads(i,j)>Grads(i-1,j-1)) edge_array(i,j)=Grads(i,j); end else % 135/215 if (Grads(i,j)>Grads(i+1,j-1) & Grads(i,j)>Grads(i-1,j+1)) edge_array(i,j)=Grads(i,j); end end end end % 去除伪边缘 MAX_E=max(max(edge_array).'); % 最大幅度值 edge_array=edge_array/MAX_E; % 最大幅度值 threshold=0.2; % 阈值(需要调整) % 遍历 for m=1:SIZE for n=1:SIZE if (edge_array(m,n)>threshold) edge_array(m,n)=1; else edge_array(m,n)=0; end end end % 显示图像和边缘 figure(1) subplot(1,2,1) imshow(X) title('图像') subplot(1,2,2) imshow(edge_array) title('边缘') 修改多次还是有以下错误,无法运行 请高手帮忙修改看看,急!!谢谢! 错误提示: Warning: CONV2 on values of class UINT8 is obsolete. Use CONV2(DOUBLE(A),DOUBLE(B)) or CONV2(SINGLE(A),SINGLE(B)) instead. > In uint8.conv2 at 11 Warning: CONV2 on values of class UINT8 is obsolete. Use CONV2(DOUBLE(A),DOUBLE(B)) or CONV2(SINGLE(A),SINGLE(B)) instead. > In uint8.conv2 at 11 ??? Index exceeds matrix dimensions. |
所有时间均为北京时间。现在的时间是 12:22。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.