clc;clear
% 下载图像
% load matlab
[X,map]=imread('1.bmp');
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;
% 对图象做行列卷积
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,map)
title('图像')
subplot(1,2,2)
imshow(edge_array)
title('边缘')
没有合适的资源?快使用搜索试试~ 我知道了~
基于matlab实现利用小波模极大值计算 可以人工设定阈值 用于检测图像边缘.rar
共2个文件
m:1个
bmp:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 20 浏览量
2024-04-28
22:08:51
上传
评论
收藏 22KB RAR 举报
温馨提示
基于matlab实现利用小波模极大值计算 可以人工设定阈值 用于检测图像边缘.rar
资源推荐
资源详情
资源评论
收起资源包目录
基于matlab实现利用小波模极大值计算 可以人工设定阈值 用于检测图像边缘.rar (2个子文件)
edge.m 2KB
1.bmp 32KB
共 2 条
- 1
资源评论
依然风yrlf
- 粉丝: 1209
- 资源: 3118
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功