在计算机视觉和图像处理中,otsu (大津二值化法)用来自动对基于聚类的图像进行二值化,或者说,将一个灰度图退化为二值图像。该算法以大津展之命名。
对于一个灰度图,如果能按图像的灰度特性,将图像分为背景和目标两部分。也就是找到一个阈值,将这个灰度图分为前景背景两部分,则这两部分的类内方差越小,说明前背景分离的越好。
而大津证明了最小化类内方差和最大类间方差是相同的:
上面的摘自维基百科,不够通俗。下面使用更加通俗易懂的解释。
现在有一张图像,大小为MxN,前景像素数量占总像素比例为w0,平均灰度值为μ0;背景像素数量占总像素比例为w1,平均灰度值为μ1。图像的总平均灰度值为μ,类间方差记为g。假设我们取阈值为t,则图像中像素灰度值小于阈值t的分为一类,其像素个数记为N0,像素值灰度值大于阈值t的分为一类,其像素个数记为N1,则有:
w0 = N0/(MxN) (1)
w1 = N1/(MxN) (2)
N0 + N1 = MxN (3)
w0 + w1 = 1 (4)
μ = w0μ0 + w1μ1 (5)
g = w0(μ0-μ)^2 + w1(μ1-μ)^2 (6)
将式(5)代入式(6),得到等价公式:g=w0*w1(μ0-μ1)^2 (7)
采用遍历的方法得到使类间方差最大的阈值T,即为所求。
otsu算法步骤如下:
设图像包含L个灰度级(0,1,...,L-1),灰度值为i的像素点数量Ni,图像总的像素点数为N = N0+N1+...+N(L-1)。灰度值为i的点的概率为:
P(i) = N(i)/N
门限t将整幅图像分为暗区c1和亮区c2两类,则类间方差σ是t的函数:
σ = a1*a2(u1-u2)^2
式中,aj为类cj的面积与图像总面积之比,a1 = sum(P(j)), j∈(0, t),a2=1-a1; uj为类cj的均值,u1 = sum(i*P(i))/a1, i∈(0, t); u2 = sum(i*P(i))/a2, i∈(t+1, L-1) 。
该法选择最佳门限t^ 使类间方差最大,即:令Δu=u1-u2,σb = max{a1(t)*a2(t)Δu^2}