智能车制作

标题: Matlab双峰法求阈值的代码 [打印本页]

作者: marazone    时间: 2012-2-9 15:48
标题: Matlab双峰法求阈值的代码
从其他论坛上找到的跟大家分享一下,记住要把图像文件放在m文件那个目录,smart.jpg是我电脑里面的图片,你们需要自己修改,开头和末尾的tic toc是求运行时间的
  1. tic

  2. clear;clc;clear all
  3. p=imread('smart.jpg');
  4. if ndims(p) == 3
  5.     p = rgb2gray(p);  %转化为灰度图像
  6. end
  7. subplot(1,3,1)
  8. imshow(p)                                               
  9. title('原来的灰度图像')
  10. [count,x]=imhist(p);
  11. subplot(1,3,2);
  12. plot(x,count)
  13. title('分布直方图')

  14. zl=min(min(p));              %图像的最小灰度值
  15. zk=max(max(p));              %最大图像的灰度值
  16. zl=double(zl);
  17. zk=double(zk);
  18. T(1)=(zl+zk)/2;              

  19. T(1)=round(T(1));            %设定初值为最值的平均值

  20. for k=1:6
  21.      n1=sum(count(1:T(k)));
  22.      n2=sum(count(T(k)+1:256));
  23.      sum1=0;sum2=0;
  24.      for i=1:T(k)
  25.          sum1=sum1+count(i)*i;
  26.      end
  27.      for i=T(k)+1:256
  28.          sum2=sum2+count(i)*i;
  29.      end
  30.      ua1=sum1/n1;   
  31.      ua2=sum2/n2;  
  32.     T(k+1)=(ua1+ua2)/2;
  33.     T(k+1)=round(T(k+1));     
  34.     if T(k+1)==T(k)
  35.         break;
  36.     end
  37. end
  38. if T(k+1)==T(k);
  39.     TT=T(k+1);
  40.     disp('The threshold is')
  41.     TT
  42. else
  43.     TT=0;
  44.     disp('error');   
  45. end
  46. %得到了阈值TT
  47. [m,n]=size(p);
  48. R=zeros(m,n);
  49. for i=1:m
  50.     for j=1:n
  51.         if p(i,j)<TT
  52.            R(i,j)=0;
  53.         else
  54.            R(i,j)=255;
  55.         end
  56.     end
  57. end
  58. R=uint8(R);
  59. subplot(1,3,3);
  60. imshow(R);
  61. title('转化后的图像');

  62. toc
复制代码



作者: sleep_ball    时间: 2012-3-2 20:56
为什么要用matlab求阈值
作者: marazone    时间: 2012-3-2 23:58
sleep_ball 发表于 2012-3-2 20:56
为什么要用matlab求阈值

matlab方便观看效果,如果用C语言处理的话,看到二值化前后的图片没有那么方便,matlab只是工具,最后还是得用C语言实现

作者: abc李瑞华    时间: 2012-5-9 16:55

作者: 王谦623    时间: 2013-3-7 19:44
佩服!




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2