#采用全局优化的策略寻找二值分割的最佳阈值#
1.OTSU Algorithm(大松算法)
1.1前述
大松算法是由一位日本学者提出来的,是一种全局自适应确定阈值的方法。大松认为,依据图像的灰度特性,可以将图像视为背景与目标两部分。背景与目标之间的类间方差越大,说明构成图像的前景、背景的长句越大。因此,大松算法又被称为最大类间方差法。
如果背景与目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或者部分背景错分为目标都会导致类间方差减小。从这个要义上,我们能够体会到,大松算法对于“双峰灰度图”的分割效果应该是最好的,类间方差最大的分割法意味着错分概率的最小。
1.2数学推导
#约定:对于图像Img(x,y),假设前景与背景的分割阈值为T。记属于前景的像素点占整幅图像的比例记为Rw(white),平均灰度值记为Gw_avg;属于背景的像素点占整幅图像的比例记为Rb(Black),平均灰度记为Gb_avg;整幅图像的平均灰度记为G_avg,类间方差记为Var(variance).
#假设:图像的大小为M*N,其中,像素的灰度值小于阈值T的个数记为Nb,像素灰度大于阈值T的像素个数记为Nw。
Rw=Nw/(M*N); Rb=Nb/(M*N); Rw+Rb=1; Nb+Nw=M*N;
G_avg=Rw*Gw_avg+Rb*Gb_avg;
Var=Rw*(Gw_avg-G_avg)^2+Rb*(Gb_avg-G_avg)^2;
通过简单的公式代换,类间方差也可以表示为:
Var=Rw*Rb*(Gw_avg-Gb_avg)^2;
那么,采用遍历的方法得到使类间方差最大的阈值T即为所求。
1.3算法设计及matlab仿真
%OTSU Algorithm %step1:设定初始分割阈值T=1, %step2:利用阈值分割,形成区域R0/R1,分别计算R0的像素比例,R1的像素比例 %step3:分别计算R0区域的平均灰度值、R1区域的平均灰度值 %step4:计算目标函数,类间方差Var,并保存 %step5:如果T<256,返回step2,否则执行下一步 %step6:输出图像 %%%%%%%%%%%%%%%author:沈春旭 clc;clear all; I=imread('chunxu.jpg'); figure(1);imshow(I); II=rgb2gray(I); figure(2);imhist(II); II=double(II); [x,y]=size(II); sum0=0;count0=0; sum1=0;count1=0; for T=1:1:255 %遍历分割阈值 for i=1:1:x for j=1:1:y if (II(i,j)<=T) count0=count0+1; sum0=sum0+II(i,j); end end end Gb_avg=sum0/count0; Rb=count0/(x*y); count1=x*y-count0; sum1=sum(sum(II))-sum1; Gw_avg=sum1/count1; Rw=1-Rb; %计算并保存类间方差 Var(T,1)=Rw*Rb*(Gw_avg-Gb_avg)^2; end %找到最大类间方差以及最佳阈值 [VarMax,Index]=max(Var); %进行阈值分割 for i=1:1:x for j=1:1:y if ( II(i,j)>=Index ) II(i,j)=255; else II(i,j)=0; end end end figure(3),imshow(II);
1.4算法评价
大松算法仍然无法解决“多峰灰度直方图分布问题”。