OTSU常用的二值化方法

2021-06-28 11:55:05 字數 1079 閱讀 7128

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...