【图像分割】基于matlab最大类间方差法(otsu)图像分割【含Matlab源码 121期】
一、最大类间方差算法简介
最大类间方差算法分割原理
广泛流行的图像分割算法是最大类间方差,又称大津法(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自带');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
三、运行结果


四、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)
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/112907935
- 点赞
- 收藏
- 关注作者
评论(0)