OTSU算法
(1)原理:
对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于背景的像素个数占整幅图像像素个数的比例记为ω0,其平均灰度μ0;前景像素个数占整幅图像像素个数的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。
可以将图像理解成255个图层,每一层分布了不同的像素,这些像素垂直叠加合成了一张完整的灰度图。
假设图像的背景较暗,并且图像的大小为M×N,图像中像素的灰度值小于阈值T的像素个数(即背景像素个数)记作N0,像素灰度大于阈值T的像素个数(即前景像素个数)记作N1,则有:
ω0=N0/ M×N (1)
ω1=N1/ M×N (2)
N0+N1=M×N (3)
ω0+ω1=1 (4)
μ=ω0*μ0+ω1*μ1 (5)
公式(5)的推导:
类间方差公式: g=ω0(μ0-μ)^2+ω1(μ1-μ)^2 (6) (数学理论依据?)
ω0相当于前景像素数所占权重
ω1相当于背景像素数所占权重
公式(6)的化简:
将式(5)代入式(6),得到等价公式:
g=ω0ω1(μ0-μ1)^2 (7)
μ0是前景像素灰度平均值(第1类)。
μ1是背景像素灰度平均值(第2类)。
ω0相当于前景像素数所占权重
ω1相当于背景像素数所占权重
公式(7)就是类间方差(inter-class variance)。
采用遍历的方法得到使类间方差g取最大值的阈值T,即为所求。
将公式(5)带入(6)即可得到公式(7)。
(2)matlab函数:
matlab中函数graythresh既是使用大津法求得分割阈值T。用法如下:
T = graythresh(img);
BW = im2bw(img,T);
参考链接:https://zhuanlan.zhihu.com/p/34112446
另一个参考链接:https://blog.csdn.net/liyuanbhu/article/details/49387483