我只有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是求取到的阈值