当前位置:   article > 正文

图像形态学处理——灰度Top-Hat操作(Matlab)_top-hat形态学滤波matlab

top-hat形态学滤波matlab
  1. clc;
  2. clear all;
  3. close all;
  4. %Top-Hat测试图像
  5. I=im2double(imread('D:\Gray Files\9-40.tif'));
  6. %=========================灰度Top-Hat操作==================================
  7. %半径为40的磁盘(disk)结构元素
  8. r=40;
  9. B=ones(2*r-1,2*r-1);
  10. %将距离大于40的点置零
  11. for i=1:2*r-1
  12. for j=1:2*r-1
  13. d=sqrt((i-r)^2+(j-r)^2);
  14. if d>r
  15. B(i,j)=0;
  16. end
  17. end
  18. end
  19. n=2*r-1;
  20. ind=find(B==0);
  21. n_l=r-1;
  22. I_pad=padarray(I,[n_l,n_l],'symmetric');
  23. [M,N]=size(I);
  24. %-------------------------------灰度开操作---------------------------------
  25. J_Opening=zeros(M,N);
  26. %腐蚀操作
  27. J_Erosion=zeros(M,N);
  28. for i=1:M
  29. for j=1:N
  30. %获得图像子块区域
  31. Block=I_pad(i:i+2*n_l,j:j+2*n_l);
  32. C=Block.*B;
  33. %删除0值,保留4连通数值
  34. C=C(:);
  35. C(ind)=[];
  36. J_Erosion(i,j)=min(C);
  37. end
  38. end
  39. %对腐蚀图像进行扩展
  40. J_Erosion_pad=padarray(J_Erosion,[n_l,n_l],'symmetric');
  41. %膨胀图像
  42. for i=1:M
  43. for j=1:N
  44. %获得图像子块区域
  45. Block=J_Erosion_pad(i:i+2*n_l,j:j+2*n_l);
  46. C=Block.*B;
  47. %删除0值,保留4连通数值
  48. C=C(:);
  49. C(ind)=[];
  50. J_Opening(i,j)=max(C);
  51. end
  52. end
  53. J_HotHat=I-J_Opening;
  54. % subplot(111)
  55. % imshow(I)
  56. % subplot(122)
  57. %用大律法将图像二值化
  58. J_Otsu=Otsu(J_HotHat);
  59. imshow(J_Otsu)

灰度图像二值分割门限,Otsu函数:

  1. %%%%%%%灰度图像二值分割门限
  2. %I为输入图像
  3. function R=Otsu(I)
  4. %门限上限
  5. T_H=1;
  6. %门限下线
  7. T_L=0;
  8. %差值限定
  9. th=0.001;
  10. %最终门限
  11. T=0;
  12. G_max=0;
  13. G=zeros(10,2);
  14. while 1
  15. step=(T_H-T_L)/10;
  16. for i=1:11
  17. T_i=T_L+step*(i-1);
  18. g=ComputeG(I,T_i);
  19. G(i,:)=[g,T_i];
  20. end
  21. G=sortrows(G,1);
  22. G_H=G(11,1);
  23. if abs(G_H-G_max)<th
  24. G_max=G_H;
  25. T=G(11,2);
  26. break;
  27. end
  28. T_H=max([G(11,2),G(10,2)]);
  29. T_L=min([G(11,2),G(10,2)]);
  30. G_max=G_H;
  31. T=G(11,2);
  32. end
  33. R=I;
  34. ind1=find(R>=T);
  35. R(ind1)=1;
  36. ind0=find(R<T);
  37. R(ind0)=0;
  38. end

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/86640
推荐阅读
相关标签
  

闽ICP备14008679号