智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 15102|回复: 4
打印 上一主题 下一主题

Matlab双峰法求阈值的代码

  [复制链接]

6

主题

41

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1359
威望
686
贡献
453
兑换币
14
注册时间
2011-12-30
在线时间
110 小时
跳转到指定楼层
1#
发表于 2012-2-9 15:48:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从其他论坛上找到的跟大家分享一下,记住要把图像文件放在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
复制代码


15

主题

432

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2256

推广达人奖章优秀会员奖章活跃会员奖章

威望
1243
贡献
529
兑换币
71
注册时间
2011-10-8
在线时间
242 小时
2#
发表于 2012-3-2 20:56:32 | 只看该作者
为什么要用matlab求阈值
回复 支持 反对

使用道具 举报

6

主题

41

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1359
威望
686
贡献
453
兑换币
14
注册时间
2011-12-30
在线时间
110 小时
3#
 楼主| 发表于 2012-3-2 23:58:37 | 只看该作者
sleep_ball 发表于 2012-3-2 20:56
为什么要用matlab求阈值

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

使用道具 举报

4

主题

107

帖子

0

精华

高级会员

Rank: 4

积分
814
威望
518
贡献
200
兑换币
17
注册时间
2011-10-28
在线时间
48 小时
4#
发表于 2012-5-9 16:55:33 | 只看该作者
回复 支持 反对

使用道具 举报

8

主题

206

帖子

0

精华

高级会员

Rank: 4

积分
808

活跃会员奖章优秀会员奖章

QQ
威望
418
贡献
300
兑换币
174
注册时间
2011-12-23
在线时间
45 小时
5#
发表于 2013-3-7 19:44:10 | 只看该作者
佩服!
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-5 14:53 , Processed in 0.070363 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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