找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3867|回復: 0
打印 上一主題 下一主題
收起左側(cè)

幾種圖像邊緣提取的實用MATLAB源程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:343305 發(fā)表于 2018-6-2 09:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
包含全部的羅伯特算子、普魯伊特算子、索貝爾算子、拉普拉斯算子、傳統(tǒng)CANNY算法、改進的CANNY算法邊緣提取代碼,實用性高,效果顯著,畫出每種方法的對比結(jié)果圖,下載源文件直接跑就行。文件里包含三張醫(yī)學X光圖片用于檢驗程序有效性。


全部資料51hei下載地址:
邊緣提取MATLAB源碼.zip (687.51 KB, 下載次數(shù): 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. %產(chǎn)生一個高斯(低通)濾波器,產(chǎn)生一個5*5的校驗矩陣
  11. w=fspecial('gaussian',[5 5]);
  12. figure;
  13. imshow(uint8(img))
  14. title('高斯濾波后的圖像');
  15. %產(chǎn)生一個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);  %設(shè)置最大遞歸深度
  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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表