otsu演算法稱為大律法或最大類間方差法
原理:利用閾值將原影象分成前景,背景兩個圖象。
前景:用w0,u0表示在當前閾值下的前景的點數佔影象的比例,前景的平均灰度值
背景:用w1, u1表示在當前閾值下的背景的點數佔影象的比例,背景的平均灰度值
當取最佳閾值時,背景應該與前景差別最大,關鍵在於如何選擇衡量差別的標準,而在otsu演算法中這個衡量差別的標準就是最大類間方差(英文簡稱otsu,這也就是這個演算法名字的**)
設th為前景與背景的分割閾值,則影象的總平均灰度為:
u=w0*u0+w1*u1
前景與背景影象的方差:
g= w0*(u0-u)*(u0-u)+w1*(u1-u)*(u1-u)=w0*w1*(u0-u1)*(u0-u1)
當方差g最大時,可以認為此時前景和背景差異最大,此時的灰度th是最佳閾值。
特點:
類間方差法對噪音和目標大小十分敏感,它僅對類間方差為單峰的影象產生較好的分割效果。
當目標與背景的大小比例懸殊時,類間方差準則函式可能呈現雙峰或多峰,此時效果不好,但是類間方差法是用時最少的。
實現:
mat otsu(mat src);
for(int i=0; i < height; i++)
}
//normalize histogram
int size = height * width;
for(int i = 0; i < 256; i++)
for(threshold=0;threshold<256;threshold++)
for(int i = threshold; i < 256; i++)
variance[threshold] = w0*w1*(u0-u1)*(u0-u1);
}threshold=1;
for(int i=1;i<256;i++)
}mat dst=src.clone();
for(int i=0; i < height; i++)
OTSU二值化方法的MATLAB實現
影象二值化的方法有很多,但是由於matlab中的影象二值化就是採用的otsu方法,那在某種程度上證明了這種演算法的優秀,所以我也準備採用這種方法來進行影象二值化。首先來看otsu 中的關於公式的介紹部分 限於個人英文閱讀能力有限,但是根據文獻中的 可以得出最佳閾值是當 b 最大的時候的k。也可以看到...
演算法解剖系列 Otsu二值化原理及實現
推導大致過程 對一幅大小為m n 的數字影象 令l 表示灰度級數 ni 表示灰度級為 i 的畫素數,則影象中畫素總數mn n1 n2 n 3 nl pi ni mn,p i 為相對直方圖,即灰度級為 i 出現的概率。則 l i 1p i 1 設閾值t k k,1 k以將影象 分為c1 和c2兩 類,...
OpenCV二值化方法
cvthreshold是opencv庫中的乙個函式 作用 函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。cvcmps 也可以達到此目的 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 thresh...