找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3171|回复: 0
打印 上一主题 下一主题
收起左侧

几种图像边缘提取的实用MATLAB源程序

[复制链接]
跳转到指定楼层
楼主
包含全部的罗伯特算子、普鲁伊特算子、索贝尔算子、拉普拉斯算子、传统CANNY算法、改进的CANNY算法边缘提取代码,实用性高,效果显著,画出每种方法的对比结果图,下载源文件直接跑就行。文件里包含三张医学X光图片用于检验程序有效性。


全部资料51hei下载地址:
边缘提取MATLAB源码.zip (687.51 KB, 下载次数: 23)


  1. clear all;
  2. close all;
  3. clc;
  4. tic
  5. img=imread('timg1.png');
  6. imshow(img);
  7. title('原图');
  8. [m n]=size(img);
  9. img=double(img);
  10. %产生一个高斯(低通)滤波器,产生一个5*5的校验矩阵
  11. w=fspecial('gaussian',[5 5]);
  12. figure;
  13. imshow(uint8(img))
  14. title('高斯滤波后的图像');
  15. %产生一个sobel类型滤波器
  16. w=fspecial('sobel');
  17. img_w=imfilter(img,w,'replicate');  %求横边缘   
  18. w=w';
  19. img_h=imfilter(img,w,'replicate');  %求竖边缘   
  20. img=sqrt(img_w.^2+img_h.^2);   %求距离     
  21. figure;
  22. imshow(uint8(img));
  23. title('sobel边缘检测后的图像')
  24. %下面是非极大抑制
  25. new_edge=zeros(m,n);
  26. for i=2:m-1
  27.     for j=2:n-1
  28.         Mx=img_w(i,j);
  29.         My=img_h(i,j);
  30.         
  31.         if My~=0
  32.             o=atan(Mx/My);    %边缘的法线弧度  
  33.         elseif My==0 && Mx>0
  34.             o=pi/2;
  35.         else
  36.             o=-pi/2;            
  37.         end
  38.         
  39.         %Mx处用My和img进行插值
  40.         adds=get_coords(o);      
  41.         M1=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3));   
  42.         adds=get_coords(o+pi);         
  43.         M2=My*img(i+adds(2),j+adds(1))+(Mx-My)*img(i+adds(4),j+adds(3));                 
  44.         isbigger=(Mx*img(i,j)>M1)*(Mx*img(i,j)>=M2)+(Mx*img(i,j)<M1)*(Mx*img(i,j)<=M2);
  45.         if isbigger
  46.            new_edge(i,j)=img(i,j);
  47.         end        
  48.     end
  49. end
  50. figure;
  51. imshow(uint8(new_edge));
  52. title('非极大抑值后的图像');
  53. %下面是滞后阈值处理
  54. up=120;     %上阈值
  55. low=100;    %下阈值
  56. set(0,'RecursionLimit',10000);  %设置最大递归深度
  57. for i=1:m
  58.     for j=1:n
  59.       if new_edge(i,j)>up &&new_edge(i,j)~=255  %判断上阈值
  60.             new_edge(i,j)=255;
  61.             new_edge=connect(new_edge,i,j,low);
  62.       end
  63.     end
  64. end
  65. figure;
  66. imshow(new_edge==255);
  67. title('滞后阈值处理后的图像');
  68. toc
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表