大津法(OTSU 最大类间方差法)详细数学推导(公式繁杂,欢迎讨论)

大家新年快乐哇, 武汉加油,我的家乡温州也加油,中国加油!向前线人员致敬!


最近在家里做迁移学习,受限于笔记本的限制,深度方向做不了,开始看师兄的论文,发现论文里提到最大方差法,但是没有具体说明出处,去查找相应的出处,也就看到了大津算法,但很奇怪的是,好多人都是很简略地说了思想,到底怎么出来的,还是没明白,因此自己找呗~

将进行一个阈值即两类的推导,让思想动起来!


大津算法提出了两个方差(若有人知道更早的出处欢迎留言指出)。
1.within-class variance 类内方差
2.between-class variance 类间方差

提前指出结论

1.大津法的目标就是最大化类间方差
2.实现最大化类间方差同时就实现了类内方差最小化,因为二者的平方和为定值
3.最优阈值点一定存在

具体程序就麻烦小伙伴自己找找啦。

~~ 进入正题 ~~

现在有一张灰度图含有背景图像和目标图像( C 0 , C 1 C_0, C_1 C0,C1),我们要找到一个阈值将像素值分为两块使两者最好的区分。
来源于网络

图来源于网络,右图类间差异大,区分明显。所以最大化类间差异

现在再来看看公式推导

将图片的像素值分为 [1, 2, …, L] 个水平,用 n i n_i ni表示各个水平像素值的像素个数,那么很容易得到总像素个数为

N = n 1 + n 2 + . . . + n L N = n_1 + n_2 + ... + n_L N=n1+n2+...+nL

我们利用像素值对应个数与总数的商作为某个像素值出现的频率,定义 p i p_i pi

p i = n i / N i , p i ≥ 0 , ∑ i = 1 L p i = 1 p_i = n_i / N_i, p_i \ge0, \sum_{i=1}^L p_i=1 pi=ni/Ni,pi0,i=1Lpi=1

定义两个量 w 0 , w 1 w_0, w_1 w0,w1 C 0 , C 1 C_0, C_1 C0,C1的局部频率之和,并且得到二者的关系

w 0 = P r ( C 0 ) = ∑ i = 1 k p i = w ( k ) w_0 = Pr(C_0) = \sum_{i=1}^k p_i = w(k) w0=Pr(C0)=i=1kpi=w(k)

w 1 = P r ( C 1 ) = ∑ i = k + 1 L p i = 1 − w ( k ) w_1 = Pr(C_1) = \sum_{i=k+1}^L p_i = 1-w(k) w1=Pr(C1)=i=k+1Lpi=1w(k)

由此我们得到总的数学期望和 C 0 , C 1 C_0, C_1 C0,C1各自的数学期望并指出三者的关系,式中 i i i代表像素值,除于各自频率的和用于进行归一。

u T = u ( L ) = ∑ i = 1 L i ∗ p i u_T = u(L) = \sum_{i=1}^L i*p_i uT=u(L)=i=1Lipi

u 0 = ∑ i = 1 k i ∗ P r ( i ∣ C 0 ) = ∑ i = 1 k i ∗ p i / w 0 = u ( k ) w ( k ) u_0 = \sum_{i=1}^k i*Pr(i|C_0)=\sum_{i=1}^k i*p_i/w_0 = \dfrac{u(k)}{w(k)} u0=i=1kiPr(iC0)=i=1kipi/w0=w(k)u(k)

u 1 = ∑ i = k + 1 L i ∗ P r ( i ∣ C 1 ) = ∑ i = k + 1 L i ∗ p i / w 1 = u T − u ( k ) 1 − w ( k ) u_1 = \sum_{i=k+1}^L i*Pr(i|C_1)=\sum_{i=k+1}^L i*p_i/w_1 = \dfrac{u_T - u(k)}{1-w(k)} u1=i=k+1LiPr(iC1)=i=k+1Lipi/w1=1w(k)uTu(k)

并指出以上公式之间的关系:

w 0 u 0 + w 1 u 1 = u T         w 0 + w 1 = 1 w_0u_0+w_1u_1 = u_T \space \space \space \space \space \space \space w_0+w_1 = 1 w0u0+w1u1=uT       w0+w1=1

除了数学期望,计算各自局部方差和总方差

σ T 2 = ∑ i = 1 L ( i − u T ) 2 p i \sigma_T^2=\sum_{i=1}^L (i-u_T)^2p_i σT2=i=1L(iuT)2pi

σ 0 2 = ∑ i = 1 k ( i − u 0 ) 2 P r ( i ∣ C 0 ) = ∑ i = 1 k ( i − u 0 ) 2 p i / w 0 \sigma_0^2=\sum_{i=1}^k (i-u_0)^2Pr(i|C_0)=\sum_{i=1}^k (i-u_0)^2p_i/w_0 σ02=i=1k(iu0)2Pr(iC0)=i=1k(iu0)2pi/w0

σ 0 1 = ∑ i = k + 1 L ( i − u 1 ) 2 P r ( i ∣ C 1 ) = ∑ i = k + 1 L ( i − u 1 ) 2 p i / w 0 \sigma_0^1=\sum_{i=k+1}^L (i-u_1)^2Pr(i|C_1)=\sum_{i=k+1}^L (i-u_1)^2p_i/w_0 σ01=i=k+1L(iu1)2Pr(iC1)=i=k+1L(iu1)2pi/w0

基础打完,为了大家翻遍查阅,列一个表格方便查阅

变量/公式相关含义
p i p_i pi某个像素值可能出现的频率
w 0 / w ( k ) , w 1 w_0/w(k), w_1 w0/w(k),w1 C 0 , C 1 C_0, C_1 C0,C1 对应的频率和
u T , u 0 , u 1 u_T, u_0, u_1 uT,u0,u1整个图像, C 0 C_0 C0 C 1 C_1 C1,像素的数学期望
σ T , σ 0 , σ 1 \sigma_T,\sigma_0,\sigma_1 σT,σ0,σ1整个图像, C 0 C_0 C0 C 1 C_1 C1,像素的方差
∑ i ∗ p i \sum i*p_i ipi数学期望的求解公式
∑ ( i − u ) 2 ∗ p i \sum (i-u)^2*p_i (iu)2pi方差的求解公式

定义完以上变量,作者提出
within_class variance 类内差异

σ w 2 = w 0 σ 0 2 + w 1 σ 1 2 \sigma_w^2=w_0\sigma_0^2+w_1\sigma_1^2 σw2=w0σ02+w1σ12

between_class variance 类间差异

σ b 2 = w 0 ( u 0 − u T ) 2 + w 1 ( u 1 − u T ) 2 \sigma_b^2=w_0(u_0-u_T)^2+w_1(u_1-u_T)^2 σb2=w0(u0uT)2+w1(u1uT)2

之前指出,作者要求最大化类间差异,我们可以从图中明白这个道理,那么为什么最大化类间差异就是最小化类内差异?

有意思的来了, 因为二者的和为定值

σ w 2 + σ b 2 = σ T 2 \sigma_w^2 + \sigma_b^2 = \sigma_T^2 σw2+σb2=σT2

以下为推导公式

我们取 σ w 2 \sigma_w^2 σw2 σ b 2 \sigma_b^2 σb2中的 w 0 σ 0 2 w_0\sigma_0^2 w0σ02 w 0 ( u 0 − u T ) 2 w_0(u_0-u_T)^2 w0(u0uT)2两项,先将 w 0 σ 0 2 w_0\sigma_0^2 w0σ02展开

  = w 0 [ 1 w 0 ∗ ∑ i = 0 k ( i − u 0 ) 2 p i ] = w 0 [ 1 w 0 ∗ ∑ i = 0 k ( ( i − u T ) + ( u T − u 0 ) ) 2 p i ] \space =w_0[\frac1w_0*\sum_{i=0}^k(i-u_0)^2p_i]=w_0[\frac1w_0*\sum_{i=0}^k((i-u_T)+(u_T-u_0))^2p_i]  =w0[w10i=0k(iu0)2pi]=w0[w10i=0k((iuT)+(uTu0))2pi]

  = w 0 [ 1 w 0 ∗ ∑ i = 0 k ( ( i − u T ) 2 + 2 ( i − u T ) ( u T − u 0 ) + ( u T − u 0 ) 2 ) p i ] \space =w_0[\frac1w_0*\sum_{i=0}^k((i-u_T)^2+2(i-u_T)(u_T-u_0)+(u_T-u_0)^2)p_i]  =w0[w10i=0k((iuT)2+2(iuT)(uTu0)+(uTu0)2)pi]

  = ∑ i = 0 k ( i − u T ) 2 ∗ p i \space =\sum_{i=0}^k(i-u_T)^2 *p_i  =i=0k(iuT)2pi

+ ∑ i = 0 k 2 ( i − u T ) ( u T − u 0 ) ∗ p i +\sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i +i=0k2(iuT)(uTu0)pi

+ ( u T − u 0 ) 2 ∗ ∑ i = 0 k p i +(u_T-u_0)^2*\sum_{i=0}^kp_i +(uTu0)2i=0kpi

展开 ∑ i = 0 k 2 ( i − u T ) ( u T − u 0 ) ∗ p i \sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i i=0k2(iuT)(uTu0)pi

= 2 ( u T − u 0 ) ∑ i = 0 k ( i − u T ) p i =2(u_T-u_0)\sum_{i=0}^k(i-u_T)p_i =2(uTu0)i=0k(iuT)pi

  = 2 ( u T − u 0 ) [ ∑ i = 0 k i p i − u T ∑ i = 0 k p i ] \space =2(u_T-u_0)[\sum_{i=0}^kip_i-u_T\sum_{i=0}^kp_i]  =2(uTu0)[i=0kipiuTi=0kpi]

根据数学期望和局部概率和的定义得到

∑ i = 0 k 2 ( i − u T ) ( u T − u 0 ) ∗ p i = 2 ( u T − u 0 ) w 0 ( u 0 − u T ) = − 2 w 0 ( u T − u 0 ) 2 \sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i = 2(u_T-u_0)w_0(u_0-u_T)=-2w_0(u_T-u_0)^2 i=0k2(iuT)(uTu0)pi=2(uTu0)w0(u0uT)=2w0(uTu0)2

w 0 σ 0 2 w_0\sigma_0^2 w0σ02化简为

  = ∑ i = 0 k ( i − u T ) 2 ∗ p i − w 0 ( u T − u 0 ) 2 \space =\sum_{i=0}^k(i-u_T)^2 *p_i-w_0(u_T-u_0)^2  =i=0k(iuT)2piw0(uTu0)2

σ b 2 \sigma_b^2 σb2的第一项可以发现,二者的和恰为
∑ i = 0 k ( i − u T ) 2 ∗ p i \sum_{i=0}^k(i-u_T)^2 *p_i i=0k(iuT)2pi

同理推得第二项,则

σ b 2 + σ w 2 = ∑ i = 0 k ( i − u T ) 2 p i + ∑ i = k + 1 L ( i − u T ) 2 p i = ∑ i = 0 L ( i − u T ) 2 p i = σ T 2 \sigma_b^2+\sigma_w^2 = \sum_{i=0}^k(i-u_T)^2 p_i + \sum_{i=k+1}^L(i-u_T)^2 p_i=\sum_{i=0}^L(i-u_T)^2 p_i = \sigma_T^2 σb2+σw2=i=0k(iuT)2pi+i=k+1L(iuT)2pi=i=0L(iuT)2pi=σT2

因此类内差异与类间差异的和为总的方差,为一定值

那么为什么最优阈值一定存在呢?

σ b 2 \sigma_b^2 σb2的定义出发
已知

w 0 u 0 + w 1 u 1 = u T w_0u_0+w_1u_1 = u_T w0u0+w1u1=uT

因此

σ b 2 = w 0 ( u 0 − u T ) 2 + w 1 ( u 1 − u T ) 2 \sigma_b^2=w_0(u_0-u_T)^2+w_1(u_1-u_T)^2 σb2=w0(u0uT)2+w1(u1uT)2

  = w 0 ( u 0 − ( w 0 u 0 + w 1 u 1 ) ) 2 + w 1 ( u 1 − ( w 0 u 0 + w 1 u 1 ) ) 2 \space =w_0(u_0-(w_0u_0+w_1u_1))^2+w_1(u_1-(w_0u_0+w_1u_1))^2  =w0(u0(w0u0+w1u1))2+w1(u1(w0u0+w1u1))2

  = w 0 w 1 ( u 1 − u 0 ) 2 \space =w_0w_1(u_1-u_0)^2  =w0w1(u1u0)2

再根据

u 0 = u ( k ) w ( k )      u 1 = u T − u ( k ) 1 − w ( k ) u_0 = \dfrac{u(k)}{w(k)} \space \space \space \space u_1=\dfrac{u_T - u(k)}{1-w(k)} u0=w(k)u(k)    u1=1w(k)uTu(k)

σ b 2 = [ u T w ( k ) − u ( k ) ] 2 w ( k ) [ 1 − w ( k ) ] \sigma_b^2=\dfrac{[u_Tw(k)-u(k)]^2}{w(k)[1-w(k)]} σb2=w(k)[1w(k)][uTw(k)u(k)]2

求解最大类间差异可写作

σ b 2 ( k ∗ ) = max ⁡ 1 ≤ k < L σ b 2 ( k ) \sigma_b^2(k^*)=\max_{1\le k<L}\sigma_b^2(k^) σb2(k)=1k<Lmaxσb2(k)

由上述 σ b 2 \sigma_b^2 σb2的分母可以发现, w ( k ) w(k) w(k)可以取到1也可以取到0,因此在边界上 σ b 2 \sigma_b^2 σb2可以无穷大,而在开集 ( 0 , 1 ) (0,1) (0,1)则类间方差有限,因此在定义域

S ∗ = k : w 0 w 1 = w ( k ) [ 1 − w ( k ) ] > 0 S^* = {k:w_0w_1=w(k)[1-w(k)]>0} S=k:w0w1=w(k)[1w(k)]>0

总存在最优解。

完成三条结论的推导


等等~

会不会有小伙伴在想
max ⁡ 1 ≤ k < L σ b 2 ( k ) \max_{1\le k<L}\sigma_b^2(k^) 1k<Lmaxσb2(k)

这个问题怎么解哇!

哈哈,我也不会,目前就是一个点一个点的代入哇,找到最大值即可。但是我最近在学凸优化这门课,相信自己学完是能解决这个的!

一起加油!

元宵快乐,芝麻汤圆最好吃了!


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值