04最大类间方差法(OTSU大津法)

最大类间方差法(OTSU大津法)

大津算法,也被称作最大类间方差法,是一种可以自动确定二值化中阈值的算法。
从类内方差和类间方差的比值计算得来:
小于阈值 t t t的类记作 0 0 0,大于阈值 t t t的类记作 1 1 1
w 0 w_0 w0 w 1 w_1 w1是被阈值 t t t分开的两个类中的像素数占总像素数的比率(满足 w 0 + w 1 = 1 w_0+w_1=1 w0+w1=1);
S 0 2 {S_0}^2 S02 S 1 2 {S_1}^2 S12是这两个类中像素值的方差;
M 0 M_0 M0 M 1 M_1 M1是这两个类的像素值的平均值;
即:
类内方差: S w 2 = w 0   S 0 2 + w 1   S 1 2 {S_w}^2=w_0\ {S_0}^2+w_1\ {S_1}^2 Sw2=w0 S02+w1 S12
类间方差: S b 2 = w 0   ( M 0 − M t ) 2 + w 1   ( M 1 − M t ) 2 = w 0   w 1   ( M 0 − M 1 ) 2 {S_b}^2 = w_0 \ (M_0 - M_t)^2 + w_1\ (M_1 - M_t)^2 = w_0\ w_1\ (M_0 - M_1) ^2 Sb2=w0 (M0Mt)2+w1 (M1Mt)2=w0 w1 (M0M1)2
图像所有像素的方差: S t 2 = S w 2 + S b 2 = 常数 {S_t}^2 = {S_w}^2 + {S_b}^2 = \text{常数} St2=Sw2+Sb2=常数
为了评价(灰度级k)这个门限“好”的程度,我们需要引入判别式分析中使用的判别式标准来测量(类的分离性测量)我们用以下的式子计算分离度 X X X
X = S b 2 S w 2 = S b 2 S t 2 − S b 2 X = \frac{{S_b}^2}{{S_w}^2} = \frac{{S_b}^2}{{S_t}^2 - {S_b}^2} X=Sw2Sb2=St2Sb2Sb2
也就是说: arg ⁡ max ⁡ t   X = arg ⁡ max ⁡ t   S b 2 \arg\max\limits_{t}\ X=\arg\max\limits_{t}\ {S_b}^2 argtmax X=argtmax Sb2 换言之,如果使 S b 2 = w 0   w 1   ( M 0 − M 1 ) 2 {S_b}^2={w_0}\ {w_1}\ (M_0 - M_1)^2 Sb2=w0 w1 (M0M1)2最大,就可以得到最好的二值化阈值 t t t

实现思路

  1. 计算0~255各灰阶对应的像素个数,保存至一个数组中,该数组下标是灰度值,保存内容是当前灰度值对应像素数
  2. 计算背景图像的平均灰度、背景图像像素数所占比例
  3. 计算前景图像的平均灰度、前景图像像素数所占比例
  4. 遍历0~255各灰阶,计算并寻找类间方差极大值

代码实现

你可能感兴趣的:(图像处理100问)