声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2286|回复: 4

[图像处理] 急求:MATLAB实现图像分割的最佳域值分割程序

[复制链接]
发表于 2007-5-6 14:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
希望那位仁兄能够帮忙解决,本人感激不尽~~:handshake
回复
分享到:

使用道具 举报

发表于 2007-5-10 01:39 | 显示全部楼层
  1. function TT=iteration(imm)   
  2. %迭代法阈值计算
  3. % im=imread('rice.tif');
  4. count=imhist(imm); zl=min(min(imm)); zk=max(max(imm));
  5. zl=double(zl); zk=double(zk); T(1)=(zl+zk)/2; T(1)=round(T(1)); % T(1)=128;
  6. for k=1:6
  7.     n1=sum(count(1:T(k)));%第一类中象素总数
  8.     n2=sum(count(T(k)+1:256));%第二类中象素总数
  9.     sum1=0; sum2=0;
  10.     for i=1:T(k), sum1=sum1+count(i)*i; end %第一类灰度值总和
  11.     for i=T(k)+1:256, sum2=sum2+count(i)*i; end%第二类灰度值总和
  12.     ua1=sum1/n1;   %第一类的平均灰度值
  13.     ua2=sum2/n2;   %第二类的平均灰度值
  14.     T(k+1)=(ua1+ua2)/2; T(k+1)=round(T(k+1));     %四舍五入
  15.     if T(k+1)==T(k), break; end
  16. end
  17. if T(k+1)==T(k), TT=T(k+1);
  18. else TT=0;  %   disp('不是双峰图像');   
  19. end


  20. % k=1;
  21. % while k<=5
  22. %     n1=sum(count(1:T(k)));%第一类中象素总数
  23. %     n2=sum(count(T(k)+1:256));%第二类中象素总数
  24. %     sum1=0; sum2=0;
  25. %     for i=1:T(k), sum1=sum1+count(i)*i; end %第一类灰度值总和
  26. %     for i=T(k)+1:256, sum2=sum2+count(i)*i; end %第二类灰度值总和
  27. %     ua1=sum1/n1;   %第一类的平均灰度值
  28. %     ua2=sum2/n2;   %第二类的平均灰度值
  29. %     T(k+1)=(ua1+ua2)/2; T(k+1)=round(T(k+1));     %四舍五入
  30. %     if T(k+1)==T(k), break; else k=k+1; end
  31. % end
  32. % if T(k+1)==T(k), TT=T(k+1);
  33. % else TT=0; disp('不是双峰图像');   
  34. % end
复制代码

[ 本帖最后由 ChaChing 于 2010-1-1 22:58 编辑 ]

评分

1

查看全部评分

发表于 2007-5-10 01:40 | 显示全部楼层
  1. function th=zbthresh(m,n,im)
  2. % a=imread('mytu.tif');
  3. % im=rgb2gray(a);
  4. [M,N]=size(im); u=M/m; v=N/n;
  5. %将图像分为u×v大小的子图
  6. f=cell(m,n);
  7. for i=1:m, for j=1:n
  8.      f{i,j}=im((i-1)*u+1:i*u,(j-1)*v+1:j*v);  
  9. end; end  
  10. %检测子图的直方图是否为双峰,同时求出阈值
  11. th=zeros(m,n);
  12. for i=1:m, for j=1:n
  13.      th(i,j)=iteration(f{i,j});
  14. end; end
  15. %进行灰度插值计算(最邻近插值)
  16. [I,J]=find(th==0); k=size(I,1);
  17. TH=zeros(m+2,n+2);   %将阈值矩阵的外边框补0
  18. TH(2:m+1,2:n+1)=th;
  19. for i=1:k
  20.     T(1)=TH(I(i)+1,J(i)); T(2)=TH(I(i)+1,J(i)+2);
  21.     T(3)=TH(I(i),J(i)+1); T(4)=TH(I(i)+2,J(i)+1);
  22.     for j=1:4
  23.         if T(j)~=0, TH(I(i)+1,J(i)+1)=T(j); end
  24.     end
  25. end
  26. th=TH(2:m+1,2:n+1);
  27. for i=1:m
  28.     for j=1:n
  29.         f{i,j}=(f{i,j}>th(i,j)); im((i-1)*u+1:i*u,(j-1)*v+1:j*v)=f{i,j};  
  30.     end
  31. end
  32. im=logical(im);
  33. figure, imshow(im);
复制代码

[ 本帖最后由 ChaChing 于 2010-1-1 23:03 编辑 ]
发表于 2009-4-23 10:24 | 显示全部楼层
正好能用上,谢谢你了
发表于 2009-5-4 20:47 | 显示全部楼层
各位大虾,能否解释一下这段程序?不是很明白,在线求解,谢谢!
好心人。。。。帮帮我。。。。。

[ 本帖最后由 ChaChing 于 2009-5-4 20:53 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-13 22:09 , Processed in 0.097933 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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