标题:
几种图像边缘提取的实用MATLAB源程序
[打印本页]
作者:
1173495528
时间:
2018-6-2 09:48
标题:
几种图像边缘提取的实用MATLAB源程序
包含全部的罗伯特算子、普鲁伊特算子、索贝尔算子、拉普拉斯算子、传统CANNY算法、改进的CANNY算法边缘提取代码,实用性高,效果显著,画出每种方法的对比结果图,下载源文件直接跑就行。文件里包含三张医学X光图片用于检验程序有效性。
0.png
(45.41 KB, 下载次数: 66)
下载附件
2018-6-3 04:52 上传
全部资料51hei下载地址:
边缘提取MATLAB源码.zip
(687.51 KB, 下载次数: 23)
2018-6-2 09:47 上传
点击文件名下载附件
源码
下载积分: 黑币 -5
clear all;
close all;
clc;
tic
img=imread('timg1.png');
imshow(img);
title('原图');
[m n]=size(img);
img=double(img);
%产生一个高斯(低通)滤波器,产生一个5*5的校验矩阵
w=fspecial('gaussian',[5 5]);
figure;
imshow(uint8(img))
title('高斯滤波后的图像');
%产生一个sobel类型滤波器
w=fspecial('sobel');
img_w=imfilter(img,w,'replicate'); %求横边缘
w=w';
img_h=imfilter(img,w,'replicate'); %求竖边缘
img=sqrt(img_w.^2+img_h.^2); %求距离
figure;
imshow(uint8(img));
title('sobel边缘检测后的图像')
%下面是非极大抑制
new_edge=zeros(m,n);
for i=2:m-1
for j=2:n-1
Mx=img_w(i,j);
My=img_h(i,j);
if My~=0
o=atan(Mx/My); %边缘的法线弧度
elseif My==0 && Mx>0
o=pi/2;
else
o=-pi/2;
end
%Mx处用My和img进行插值
adds=get_coords(o);
M1=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3));
adds=get_coords(o+pi);
M2=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3));
isbigger=(Mx*img(i,j)>M1)*(Mx*img(i,j)>=M2)+(Mx*img(i,j)<M1)*(Mx*img(i,j)<=M2);
if isbigger
new_edge(i,j)=img(i,j);
end
end
end
figure;
imshow(uint8(new_edge));
title('非极大抑值后的图像');
%下面是滞后阈值处理
up=120; %上阈值
low=100; %下阈值
set(0,'RecursionLimit',10000); %设置最大递归深度
for i=1:m
for j=1:n
if new_edge(i,j)>up &&new_edge(i,j)~=255 %判断上阈值
new_edge(i,j)=255;
new_edge=connect(new_edge,i,j,low);
end
end
end
figure;
imshow(new_edge==255);
title('滞后阈值处理后的图像');
toc
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1