图像二值化的方法有很多,但是由于MATLAB中的图像二值化就是采用的OTSU方法,那在某种程度上证明了这种算法的优秀,所以我也准备采用这种方法来进行图像二值化。

首先来看OTSU论文中的关于公式的介绍部分

OTSU二值化方法的MATLAB实现

 限于个人英文阅读能力有限,但是根据文献中的

 OTSU二值化方法的MATLAB实现

 可以得出最佳阈值是当σ²B()最大的时候的k。

也可以看到σ²B的计算公式是

OTSU二值化方法的MATLAB实现

其中W0,W1,μ0,μ1,μT的计算公式如下

OTSU二值化方法的MATLAB实现

                    OTSU二值化方法的MATLAB实现

 在这里面的Pi即为每个灰度值出现的概率

公式都已经解析完了,接下来就是通过代码来实现原理了

MATLAB实现的代码如下:

OTSU=0;
OTSU0=0;
OTSU_t0=0;
Gray_p=zeros(1,255);
su=sum(Line);%计算出灰度的总和
for i=1:255
    Gray_p(i)=Line(i)/su;%计算出每一个灰度值在图像中出现的概率,对应公式中的P(i)
end
for i=1:255
    Foward_p=sum(Gray_p(1:i));
    %计算前景的灰度概率和,对应公式中的W0
    Back_p=sum(Gray_p(i+1:255));
    %计算后景的灰度概率和,对应公式中的W1
    Omega_f=sum((1:i).*Gray_p(1:i))/Foward_p;
    %计算出前景的平均灰度,对应公式中的μ0
    Omega_b=sum((i+1:255).*Gray_p(i+1:255))/Back_p;
    %计算出后景的平均灰度,对应公式中的μ1
    Omega=Foward_p*Omega_f+Back_p*Omega_b;
    %计算出整幅图像的平均灰度对应公式中的μT
    OTSU0=(Omega_f-Omega)^2*Foward_p+(Omega_b-Omega)^2*Back_p;
    %计算出前景和背景的方差,对应公式中的μB
    if OTSU<OTSU0
        OTSU=OTSU0;%一旦找到更大的方差即更新
        OTSU_t0=i;%找到公式中的K*,即最佳阈值
    end
end

最后的效果如下:

OTSU二值化方法的MATLAB实现

 

相关文章: