大津二值化算法(Ostu二值化算法)及其改进算法

1.Ostu算法原理

使用大津算法来二值化图像!大津算法,也被称作最大类间方差法,是一种可以自动确定二值化中阈值的算法,从类内方差和类间方差的比值计算得来:

  • 小于阈值 t 的类记作 0,大于阈值 t 的类记作 1;
  • w0 和 w1 是被阈值 t 分开的两个类中的像素数占总像素数的比率(满足 w0+w1=1);
  • S0^2, S1^2 是这两个类中像素值的方差;
  • M0, M1 是这两个类的像素值的平均值;

也就是说:

类内方差:Sw^2 = w0 * S0^2 + w1 * S1^2
类间方差:Sb^2 = w0 * (M0 - Mt)^2 + w1 * (M1 - Mt)^2 = w0 * w1 * (M0 - M1) ^2
图像所有像素的方差:St^2 = Sw^2 + Sb^2 = (const)
根据以上的式子,我们用以下的式子计算分离度:  
分离度 X = Sb^2 / Sw^2 = Sb^2 / (St^2 - Sb^2)

也就是说:我们要是分离度X最大,在图像灰度之中遍历0-255,计算所有的分离度,则可以已找到最大的分离度,从而找到最佳的二值化阈值。

其次计算分离度的最大值时,可以简化式子。X=Sb^2 / (St^2 - Sb^2),因为St^2是常数,所以设Sb^2=y变成了数学上的X=\frac{y}{c-y}的最小值,结果数学上的运算得X=\frac{c}{c-y}-1,所以当y最最大时,可以得到最大的X。

换言之,如果使 Sb^2 = w0 * w1 * (M0 - M1) ^2 最大,就可以得到最好的二值化阈值 t。

2.Ostu直观印象

对于直方图有两个峰值的图像,大津法求得的T近似等于两个峰值之间的低谷。

假设用大津法求得的T=0.5294,转换在[0,255]之间为134.9970,正好是两个峰值之间低谷的位置。

OpenCV的二值化操作中,有一种“大津阈值处理”的方法,使用函数cvThreshold(image,image2,0,255,CV_THRESH_OTSU) 实现,该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参数中的threshold不再起作用。

3.改进算法

见此文:

https://blog.csdn.net/jinshengtao/article/details/19506005

猜你喜欢

转载自blog.csdn.net/weixin_40244676/article/details/102947340