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

最大类间方差算法分割原理

广泛流行的图像分割算法是最大类间方差,又称大津法(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期】_灰度值_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)