使用大津演算法來二值化影象!大津演算法,也被稱作最大類間方差法,是一種可以自動確定二值化中閾值的演算法,從類內方差和類間方差的比值計算得來:
也就是說:
類內方差: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變成了數學上的
換言之,如果使 sb^2 = w0 * w1 * (m0 - m1) ^2 最大,就可以得到最好的二值化閾值 t。
對於直方圖有兩個峰值的影象,大津法求得的t近似等於兩個峰值之間的低谷。
假設用大津法求得的t=0.5294,轉換在[0,255]之間為134.9970,正好是兩個峰值之間低谷的位置。
opencv的二值化操作中,有一種「大津閾值處理」的方法,使用函式cvthreshold(image,image2,0,255,cv_thresh_otsu) 實現,該函式就會使用大律法otsu得到的全域性自適應閾值來進行二值化,而引數中的threshold不再起作用。
見此文:
OpenCV大津法二值化
大津法 otsu 是一種確定影象二值化分割閾值的演算法,由日本學者大津於1979年提出。從大津法的原理上來講,該方法又稱作最大類間方差法,因為按照大津法求得的閾值進行影象二值化分割後,前景與背景影象的類間方差最大。是求影象全域性閾值的最佳方法。優點 計算簡單快速,不受影象亮度和對比度的影響。缺點 對...
區域性二值化 Sauvola二值化演算法
借鑑 原理 分塊處理,根據當前塊內的均值,方差等資訊得出區域性閾值 但擔心有突變,分塊不好怎麼辦呢?sauvola是一種考慮區域性均值亮度的影象二值化方法,以區域性均值為基準在根據標準差做些微調.演算法實現上一般用積分圖方法來實現的.步驟1 計算區域畫素積分和和積分平方和 步驟2 計算標準差,標準差...
Bernsen二值化演算法
clc clear all close all m 3 3 3的鄰域視窗 n 3 for iter 1 156 iter img imread e pictest num2str iter jpg 讀取 m,n,s size img 讀取 i gray rgb2gray img t zeros m,...