一、最大类间方差算法简介

最大类间方差算法分割原理
广泛流行的图像分割算法是最大类间方差,又称大津法(OTSU),是日本学者大津展之在1979年提出的。其算法思想是通过最大类间方差准则来选取最优阈值。
OTSU算法基本原理是:假设图像中有L个灰度等级,其中灰度值为j的数目为nj,则有图像中总的像素公式为:
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_方差
每个灰度值概率公式如下:
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_matlab图像处理_02
假设在(0~L)灰度内存在灰度k将图像分为两类,那么公式如式(3)所示。
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_matlab图像处理_03
此外两类灰度值均值计算方法分别如式(4)和式(5)所示。
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_方差_04
通过公式可以计算出图像总体灰度均值为wT=pAwA+pBwB,根据方差计算公式可得出式(6)。
δ2=PA(ωA-ωT)2+PB(ωB-ωT)2 (6)
通过OTSU算法的基本原理可以得到OTSU求取图像最佳阈值的公式(7),方差越大,效果越好。
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_matlab图像处理_05

二、部分源代码

 
clear
close all
clc
 
I=imread('rice.png');    
[m,n]=size(I);   
N=m*n;   
L=256;   
 
for i=1:L  
    count(i)=length(find(I==(i-1)));  
    f(i)=count(i)/(N);  %每个灰度对应的概率,i=1,对应灰度值为0(i-1)
end  
 
for i=1:L   
    if count(i)~=0   
        st=i-1;   %开始的灰度值
        break;   
    end   
end   
for i=L:-1:1   
    if count(i)~=0   
        nd=i-1;   %结束的灰度值
        break;   
    end   
end   
 
p=st;   q=nd-st+1;   
u=0;   
for i=1:q   
    u=u+f(p+i)*(p+i-1);  %u是像素的平均值    
    ua(i)=u;           %ua(i)是前i+p个像素的平均灰度值  (前p个无取值) 
end;   
 
for i=1:q   
    w(i)=sum(f(1+p:i+p));  %w(i)是前i个像素的累加概率,对应公式中P0 
end;   
 
w=w+eps;  
   %对照sigmaB的公式写出目标函数。实际是遍历所有值
d=(w./(1-w)).*(ua./w-u).^2;
[y,tp]=max(d);  %可以取出数组的最大值及取最大值的点   
th=tp+p;  
 
 
figure;imshow(im2bw(I,th/255),[]);  title('最大类间方差');
%% matlab自带函数
figure;imshow(im2bw(I,graythresh(I)),[]);  title('matlab自带');
 

三、运行结果

【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_参考文献_06
【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】_灰度值_07

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]陈浩,方勇,朱大洲,王成,陈子龙.基于蚁群算法的玉米植株热红外图像边缘检测[J].农机化研究. 2015,37(06)