大津二值化算法(Ostu二值化算法)及其改進算法

1.Ostu算法原理

使用大津算法來二值化圖像!大津算法,也被稱作最大類間方差法,是一種可以自動確定二值化中閾值的算法,從類內方差和類間方差的比值計算得來:

  • 小於閾值 t 的類記作 0,大於閾值 t 的類記作 1;
  • w0 和 w1 是被閾值 t 分開的兩個類中的像素數佔總像素數的比率(滿足 w0+w1=1);
  • S0^2, S1^2 是這兩個類中像素值的方差;
  • M0, M1 是這兩個類的像素值的平均值;

也就是說:

類內方差:Sw^2 = w0 * S0^2 + w1 * S1^2
類間方差:Sb^2 = w0 * (M0 - Mt)^2 + w1 * (M1 - Mt)^2 = w0 * w1 * (M0 - M1) ^2
圖像所有像素的方差:St^2 = Sw^2 + Sb^2 = (const)
根據以上的式子,我們用以下的式子計算分離度:  
分離度 X = Sb^2 / Sw^2 = Sb^2 / (St^2 - Sb^2)

也就是說:我們要是分離度X最大,在圖像灰度之中遍歷0-255,計算所有的分離度,則可以已找到最大的分離度,從而找到最佳的二值化閾值。

其次計算分離度的最大值時,可以簡化式子。X=Sb^2 / (St^2 - Sb^2),因爲St^2是常數,所以設Sb^2=y變成了數學上的X=\frac{y}{c-y}的最小值,結果數學上的運算得X=\frac{c}{c-y}-1,所以當y最最大時,可以得到最大的X。

換言之,如果使 Sb^2 = w0 * w1 * (M0 - M1) ^2 最大,就可以得到最好的二值化閾值 t。

2.Ostu直觀印象

對於直方圖有兩個峯值的圖像,大津法求得的T近似等於兩個峯值之間的低谷。

假設用大津法求得的T=0.5294,轉換在[0,255]之間爲134.9970,正好是兩個峯值之間低谷的位置。

OpenCV的二值化操作中,有一種“大津閾值處理”的方法,使用函數cvThreshold(image,image2,0,255,CV_THRESH_OTSU) 實現,該函數就會使用大律法OTSU得到的全局自適應閾值來進行二值化圖片,而參數中的threshold不再起作用。

3.改進算法

見此文:

https://blog.csdn.net/jinshengtao/article/details/19506005

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章