gusucode.com > 红外图像增强及目标检测演示界面matlab源码程序 > code/BtwClsVarImSg.m

    function [sgf,T]=BTW_CLS_V_Segmentation(f)

  [row col]=size(f);
  m=max(f(:));
  f=abs(round(f*255/m));
  p=histog(f);
  T=BetweenClassV(p);
  sgf=f>=T;
 
  %==============================================
  function h=histog(f)
 [row col]=size(f);
 h=zeros(1,256);
 p=1/(row*col);
 for x=1:row
     for y=1:col
         i=f(x,y)+1;
         if(i>256)
             i=256;
         end
         h(i)=h(i)+p;
     end
 end
%======================================================================
function T=BetweenClassV(p)
  
 T=1;
 u0=sum(p.*[0:255]);
 dtT=0;
 for i=0:255
     dtT=dtT+(i-u0)^2*p(i+1);
 end
 n0=0;
 for t=2:255
     w1=sum(p(1:t));
     w2=1-w1;
     if(w1~=0)
         u1=sum(p(2:t).*[1:t-1])/w1;
         u2=sum(p(t+1:256).*[t:255])/w1;
     else
         u1=0;
         u2=0;
      end
     dt1=0;dt2=0;
     for i=0:t-1
        dt1=dt1+(i-u1)^2*p(i+1);
     end
     if(w1~=0)
         dt1=dt1/w1;
     end
     for i=t:255
        dt2=dt2+(i-u2)^2*p(i+1);
     end
     dt2=dt2/w2;
     dtw=w1*dt1+w2*dt2;
     n=1-dtw/dtT;
     if(n>n0)
         T=t;
         n0=n;
     end
 end