OTSU算法又叫最大类间方差阈值分割算法,也叫大津算法,是在1980年由日本的大津展之提出,是由最小二乘法推导而来,用于一些简单的阈值确定。
对于一个灰度图,我们有时候非常想把他用一个阈值将他的前景和背景区分开来。我们可以合理的假设为如果将图像的像素分布图画出来,那么图像上应该有两个峰,即前景色和背景色。在这两个峰之间肯定有一个谷,那么我们就可以将阈值设在这里,从而对图像达到一个良好的分割效果。
怎样确定这个阈值呢?OTSU算法说,我们可以求出用这个阈值分割后的两个图像的类间方差。对于每一个可能的阈值,我们计算并取出类间方差最大的那个像素值,此时这个值就可以较好的对图像进行分割。
算法
1、将灰度值分为$0-m$,对于$0-m$的每一个灰度$t$,将他作为阈值将图像分割为灰度为$0-t$以及$t+1-m$这两部分。
2、计算每一部分的所占比例$w_1,w_2$,每一部分的平均灰度值$u_1,u_2$,以及总的平均灰度值$u$。
3、计算他们的类间方差$\delta^2=w_1(u_1-u)^2+w_2(u_2-u)^2=w_1w_2(u_1-u_2)^2$
4、取出类间方差最大时对应的阈值t,这就可以作为我们最终所取的阈值。
测试
用python写的简单实现:
1 | import Image |
效果图: