一、最大类间方差算法简介
最大类间方差算法分割原理
广泛流行的图像分割算法是最大类间方差,又称大津法(OTSU),是日本学者大津展之在1979年提出的。其算法思想是通过最大类间方差准则来选取最优阈值。
OTSU算法基本原理是:假设图像中有L个灰度等级,其中灰度值为j的数目为nj,则有图像中总的像素公式为:
每个灰度值概率公式如下:
假设在(0~L)灰度内存在灰度k将图像分为两类,那么公式如式(3)所示。
此外两类灰度值均值计算方法分别如式(4)和式(5)所示。
通过公式可以计算出图像总体灰度均值为wT=pAwA+pBwB,根据方差计算公式可得出式(6)。
δ2=PA(ωA-ωT)2+PB(ωB-ωT)2 (6)
通过OTSU算法的基本原理可以得到OTSU求取图像最佳阈值的公式(7),方差越大,效果越好。
二、部分源代码
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版本及参考文献
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)