基于Otsu的全局阈值处理的实现

来源:互联网 发布:ubuntu c语言开发工具 编辑:程序博客网 时间:2024/06/10 07:28

基于Otsu的全局阈值处理又称最大类间方差法,即在对图像进行阈值分割时,选定的分割阈值应使前景区域的平均灰度,背景区域的平均灰度与整幅图像的平均灰度之间差别最大,这种差异用区域的方差来表示

设图像中灰度为i的像素数为ni,灰度范围为[0,L-1], 总的像素数为

这里写图片描述

各灰度值出现的概率为

这里写图片描述

对于Pi

这里写图片描述

把图中的像素用阈值T分为两类C0和C1,C0由灰度值在[0,T-1]的像素组成,C1由灰度值在[T,L-1]的像素组成,则区域C0和C1的概率分别为

这里写图片描述

区域C0和C1的平均灰度分别为:

这里写图片描述

U是整幅图像的平均灰度

这里写图片描述

两个区域的总方差为:

这里写图片描述

让T在[0,L-1]范围内依次取值,使区域方差最大的T值便是最佳区域分割阈值

Matlab代码实现

I=imread('car.jpg');   %读入图像I=I(:,:,1);figure(1);imshow(I);[m,n]=size(I);[counts,x]=imhist(I,256);  %灰度级为[0,255][Q,~]=size(x)Pi=counts/m/n;Variance=zeros(1,Q);       %存放区域方差for k =1:Q-1    P0=sum(Pi(1:k))    P1=sum(Pi(k+1:Q))    Mu0=(1/P0)*([1:k]*counts(1:k));    Mu1=(1/P1)*([k+1:Q]*counts(k+1:Q));    Mu=P0*Mu0+P1*Mu1;    variance=P0*P1*(Mu0-Mu1)^2;    Variance(k)= variance;end[m1,n1]=max(Variance);I1=im2bw(I,n1/255);figure(2);imshow(I1)

运行结果:T=n1=137

原图

这里写图片描述

以上是关于Otsu的全局阈值处理的实现,欢迎大家一起交流学习