急求:MATLAB实现图像分割的最佳域值分割程序
希望那位仁兄能够帮忙解决,本人感激不尽~~:handshake function TT=iteration(imm)%迭代法阈值计算
% im=imread('rice.tif');
count=imhist(imm); zl=min(min(imm)); zk=max(max(imm));
zl=double(zl); zk=double(zk); T(1)=(zl+zk)/2; T(1)=round(T(1)); % T(1)=128;
for k=1:6
n1=sum(count(1:T(k)));%第一类中象素总数
n2=sum(count(T(k)+1:256));%第二类中象素总数
sum1=0; sum2=0;
for i=1:T(k), sum1=sum1+count(i)*i; end %第一类灰度值总和
for i=T(k)+1:256, sum2=sum2+count(i)*i; end%第二类灰度值总和
ua1=sum1/n1; %第一类的平均灰度值
ua2=sum2/n2; %第二类的平均灰度值
T(k+1)=(ua1+ua2)/2; T(k+1)=round(T(k+1)); %四舍五入
if T(k+1)==T(k), break; end
end
if T(k+1)==T(k), TT=T(k+1);
else TT=0;% disp('不是双峰图像');
end
% k=1;
% while k<=5
% n1=sum(count(1:T(k)));%第一类中象素总数
% n2=sum(count(T(k)+1:256));%第二类中象素总数
% sum1=0; sum2=0;
% for i=1:T(k), sum1=sum1+count(i)*i; end %第一类灰度值总和
% for i=T(k)+1:256, sum2=sum2+count(i)*i; end %第二类灰度值总和
% ua1=sum1/n1; %第一类的平均灰度值
% ua2=sum2/n2; %第二类的平均灰度值
% T(k+1)=(ua1+ua2)/2; T(k+1)=round(T(k+1)); %四舍五入
% if T(k+1)==T(k), break; else k=k+1; end
% end
% if T(k+1)==T(k), TT=T(k+1);
% else TT=0; disp('不是双峰图像');
% end
[ 本帖最后由 ChaChing 于 2010-1-1 22:58 编辑 ] function th=zbthresh(m,n,im)
% a=imread('mytu.tif');
% im=rgb2gray(a);
=size(im); u=M/m; v=N/n;
%将图像分为u×v大小的子图
f=cell(m,n);
for i=1:m, for j=1:n
f{i,j}=im((i-1)*u+1:i*u,(j-1)*v+1:j*v);
end; end
%检测子图的直方图是否为双峰,同时求出阈值
th=zeros(m,n);
for i=1:m, for j=1:n
th(i,j)=iteration(f{i,j});
end; end
%进行灰度插值计算(最邻近插值)
=find(th==0); k=size(I,1);
TH=zeros(m+2,n+2); %将阈值矩阵的外边框补0
TH(2:m+1,2:n+1)=th;
for i=1:k
T(1)=TH(I(i)+1,J(i)); T(2)=TH(I(i)+1,J(i)+2);
T(3)=TH(I(i),J(i)+1); T(4)=TH(I(i)+2,J(i)+1);
for j=1:4
if T(j)~=0, TH(I(i)+1,J(i)+1)=T(j); end
end
end
th=TH(2:m+1,2:n+1);
for i=1:m
for j=1:n
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};
end
end
im=logical(im);
figure, imshow(im);
[ 本帖最后由 ChaChing 于 2010-1-1 23:03 编辑 ] 正好能用上,谢谢你了 各位大虾,能否解释一下这段程序?不是很明白,在线求解,谢谢!
好心人。。。。帮帮我。。。。。
[ 本帖最后由 ChaChing 于 2009-5-4 20:53 编辑 ]
页:
[1]