大津法(OTSU 最大類間方差法)詳細數學推導(公式繁雜,歡迎討論)

大家新年快樂哇, 武漢加油,我的家鄉溫州也加油,中國加油!向前線人員致敬!


最近在家裏做遷移學習,受限於筆記本的限制,深度方向做不了,開始看師兄的論文,發現論文裏提到最大方差法,但是沒有具體說明出處,去查找相應的出處,也就看到了大津算法,但很奇怪的是,好多人都是很簡略地說了思想,到底怎麼出來的,還是沒明白,因此自己找唄~

將進行一個閾值即兩類的推導,讓思想動起來!


大津算法提出了兩個方差(若有人知道更早的出處歡迎留言指出)。
1.within-class variance 類內方差
2.between-class variance 類間方差

提前指出結論

1.大津法的目標就是最大化類間方差
2.實現最大化類間方差同時就實現了類內方差最小化,因爲二者的平方和爲定值
3.最優閾值點一定存在

具體程序就麻煩小夥伴自己找找啦。

~~ 進入正題 ~~

現在有一張灰度圖含有背景圖像和目標圖像(C0,C1C_0, C_1),我們要找到一個閾值將像素值分爲兩塊使兩者最好的區分。
來源於網絡

圖來源於網絡,右圖類間差異大,區分明顯。所以最大化類間差異

現在再來看看公式推導

將圖片的像素值分爲 [1, 2, …, L] 個水平,用nin_i表示各個水平像素值的像素個數,那麼很容易得到總像素個數爲

N=n1+n2+...+nL N = n_1 + n_2 + ... + n_L

我們利用像素值對應個數與總數的商作爲某個像素值出現的概率,定義pip_i

pi=ni/Ni,pi0,i=1Lpi=1 p_i = n_i / N_i, p_i \ge0, \sum_{i=1}^L p_i=1

定義兩個量w0,w1w_0, w_1C0,C1C_0, C_1的局部概率之和,並且得到二者的關係

w0=Pr(C0)=i=1kpi=w(k) w_0 = Pr(C_0) = \sum_{i=1}^k p_i = w(k)

w1=Pr(C1)=i=k+1Lpi=1w(k) w_1 = Pr(C_1) = \sum_{i=k+1}^L p_i = 1-w(k)

由此我們得到總的數學期望和C0,C1C_0, C_1各自的數學期望並指出三者的關係,式中ii代表像素值,除於各自概率的和用於進行歸一。

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

u0=i=1kiPr(iC0)=i=1kipi/w0=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)}

u1=i=k+1LiPr(iC1)=i=k+1Lipi/w1=uTu(k)1w(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)}

並指出以上公式之間的關係:

w0u0+w1u1=uT       w0+w1=1 w_0u_0+w_1u_1 = u_T \space \space \space \space \space \space \space w_0+w_1 = 1

除了數學期望,計算各自局部方差和總方差

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

σ02=i=1k(iu0)2Pr(iC0)=i=1k(iu0)2pi/w0 \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

σ01=i=k+1L(iu1)2Pr(iC1)=i=k+1L(iu1)2pi/w0 \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

基礎打完,爲了大家翻遍查閱,列一個表格方便查閱

變量/公式 相關含義
pip_i 某個像素值可能出現的概率
w0/w(k),w1w_0/w(k), w_1 C0,C1C_0, C_1 對應的概率和
uT,u0,u1u_T, u_0, u_1 整個圖像,C0C_0C1C_1,像素的數學期望
σT,σ0,σ1\sigma_T,\sigma_0,\sigma_1 整個圖像,C0C_0C1C_1,像素的方差
ipi\sum i*p_i 數學期望的求解公式
(iu)2pi\sum (i-u)^2*p_i 方差的求解公式

定義完以上變量,作者提出
within_class variance 類內差異

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

between_class variance 類間差異

σb2=w0(u0uT)2+w1(u1uT)2\sigma_b^2=w_0(u_0-u_T)^2+w_1(u_1-u_T)^2

之前指出,作者要求最大化類間差異,我們可以從圖中明白這個道理,那麼爲什麼最大化類間差異就是最小化類內差異?

有意思的來了, 因爲二者的和爲定值

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

以下爲推導公式

我們取σw2\sigma_w^2σb2\sigma_b^2中的w0σ02w_0\sigma_0^2w0(u0uT)2w_0(u_0-u_T)^2兩項,先將w0σ02w_0\sigma_0^2展開

 =w0[1w0i=0k(iu0)2pi]=w0[1w0i=0k((iuT)+(uTu0))2pi] \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[1w0i=0k((iuT)2+2(iuT)(uTu0)+(uTu0)2)pi] \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]

 =i=0k(iuT)2pi \space =\sum_{i=0}^k(i-u_T)^2 *p_i

+i=0k2(iuT)(uTu0)pi +\sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i

+(uTu0)2i=0kpi +(u_T-u_0)^2*\sum_{i=0}^kp_i

展開i=0k2(iuT)(uTu0)pi\sum_{i=0}^k2(i-u_T)(u_T-u_0)*p_i

=2(uTu0)i=0k(iuT)pi =2(u_T-u_0)\sum_{i=0}^k(i-u_T)p_i

 =2(uTu0)[i=0kipi+uTi=0kpi] \space =2(u_T-u_0)[\sum_{i=0}^kip_i+u_T\sum_{i=0}^kp_i]

根據數學期望和局部概率和的定義得到

i=0k2(iuT)(uTu0)pi=2(uTu0)w0(u0uT)=2w0(uTu0)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

w0σ02w_0\sigma_0^2化簡爲

 =i=0k(iuT)2piw0(uTu0)2 \space =\sum_{i=0}^k(i-u_T)^2 *p_i-w_0(u_T-u_0)^2

σb2\sigma_b^2的第一項可以發現,二者的和恰爲
i=0k(iuT)2pi\sum_{i=0}^k(i-u_T)^2 *p_i

同理推得第二項,則

σb2+σw2=i=0k(iuT)2pi+i=k+1L(iuT)2pi=i=0L(iuT)2pi=σT2 \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\sigma_b^2的定義出發
已知

w0u0+w1u1=uT w_0u_0+w_1u_1 = u_T

因此

σb2=w0(u0uT)2+w1(u1uT)2 \sigma_b^2=w_0(u_0-u_T)^2+w_1(u_1-u_T)^2

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

 =w0w1(u1u0)2 \space =w_0w_1(u_1-u_0)^2

再根據

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

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

求解最大類間差異可寫作

σb2(k)=max1k<Lσb2(k) \sigma_b^2(k^*)=\max_{1\le k<L}\sigma_b^2(k^)

由上述σb2\sigma_b^2的分母可以發現,w(k)w(k)可以取到1也可以取到0,因此在邊界上σb2\sigma_b^2可以無窮大,而在開集(0,1)(0,1)則類間方差有限,因此在定義域

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

總存在最優解。

完成三條結論的推導


等等~

會不會有小夥伴在想
max1k<Lσb2(k)\max_{1\le k<L}\sigma_b^2(k^)

這個問題怎麼解哇!

哈哈,我也不會,目前就是一個點一個點的代入哇,找到最大值即可。但是我最近在學凸優化這門課,相信自己學完是能解決這個的!

一起加油!

元宵快樂,芝麻湯圓最好吃了!


發佈了8 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章