研究室论坛

论坛首页
   
Otsu算法的源码??

PARDON

 发表于 2010-2-3 15:43:07 楼主
  哪位大虾有Otsu算法的源码??共享一下吧!!



Chow小男


 回复于 2010-2-3 19:02:49 #1楼

    我只有matlab版的,不知道能否帮到你
    
function k = Var1(image,m,n)
p = zeros(1,256);
Th = zeros(1,256);
Num = 0;
for i = 1:m
    for j = 1:n
        k = image(i,j);
        p(k+1) = p(k+1)+1;        %个数统计矩阵
    end
end
for i = 1:256
    Num = Num+p(i)*(i-1);
    p(i) = p(i)/(m*n);
end
aver = Num/(m*n);                 %全局均值

%%%%%%%%%%%%%%% 求整幅图像方差 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Variance = 0;
for i = 1:256
    if p(i)~=0
       Variance = Variance+((i-1)-aver)^2*p(i);   %全局方差
    end
end

%%%%%%%%%%%%%%% 迭代求取最佳阈值 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
for T = 1:255
    w1 = 0;
    w2 = 0;
    aver1 = 0;aver2 = 0;Vb = 0;Vw = 0;
    Count1 = 0;Count2 = 0;Count3 = 0;;Count4 = 0;;
    for i = 1:T                  % 求取C1类的总像素数和总灰度值数
        w1 = w1+p(i);            % 求取C1类的总概率数
        Count1 = Count1+(i-1)*p(i)*(m*n);
        Count2 = Count2+p(i)*(m*n);
    end
    for i = T:255               %求取C2类的总像素数和总灰度值数
        Count3 = Count3+(i-1)*p(i)*(m*n);
    end
    w2 = 1-w1;                  %求取C2类的总概率数
    Count4 = (m*n)-Count2;
    if Count1~=0&&Count2~=0&&Count3~=0&&Count4~=0  %求取2个类的均值
       aver1 = Count1/Count2;
       aver2 = Count3/Count4;
       Vb = w1*(aver1-aver)^2+w2*(aver2-aver)^2;   % 求取类间方差
    end
    Count5 = 0;Count6 = 0;                         % 求取类内方差
    for i = 1:T
        Count5 = Count5+((i-1)-aver1)^2*p(i)*(m*n);
    end
    for i = T:255
        Count6 = Count6+((i-1)-aver2)^2*p(i)*(m*n);
    end
    if Count5~=0&&Count6~=0&&Count2~=0&&Count4~=0
       V1 = Count5/Count2;
       V2 = Count6/Count4;
       Vw = w1*V1+w2*V2;
    end
    if Vw~=0
       Th(T) = Vb/Vw;
    end
end
t = find(Th==max(Th));
k = t(1)-1;

    image为待求图像,m是图像高,n是图像宽,k是求取到的阈值



PARDON


 回复于 2010-2-3 21:06:05 #2楼

正待急用啊!!多谢多谢!!



Chow小男


 回复于 2010-2-4 0:46:03 #3楼
不客气



   
   
 
2000-2010 www.xautdipl.com
XA12346