【第11節(jié)】OpenCV圖像閾值
目標
本節(jié)你將學(xué)到簡單閾值、自適應(yīng)閾值、Otsu's二值化等
將要學(xué)習(xí)的函數(shù)有:CV2.threshold,CV2.adaptiveThreshold等。
1、簡單閾值
????????與名字一樣,這種方法非常簡單。但像素值高于閾值時,我們給這個像素賦予一個新值(可能是白色),否則我們給它賦予另外-種顏色(也許是黑色)。這個函數(shù)就是CV2.threshhold()。這個函數(shù)的第-個參數(shù)就是原圖像,原圖像應(yīng)該是灰度圖。第二個參數(shù)就是用來對像素值進行分類的閾值。第三個參數(shù)就是當像素值高于(有時是小于)閾值時應(yīng)該被賦予的新的像素值。OpenCV提供了多種不同的閾值方法,這是有第四個參數(shù)來決定的。首先介紹簡單閾值函數(shù):CV2.threshold(src, thresh, maxval, type[, dst]),返回值為retval, dst,其中:
src是灰度圖像
thresh是起始閾值
maxval是最大值
type是定義如何處理數(shù)據(jù)與閾值的關(guān)系。有以下幾種:

另外的取值為:
CV2.THRESH_OTSU使用最小二乘法處理像素點,而CV2.THRESH_TRIANGLE使用三角算法處理像素點。一般情況下,CV2.THRESH_OTSU適合雙峰圖。CV2.THRESH_TRIANGLE適合單峰圖。單峰圖或者雙峰圖指的是灰度直方圖。
下面舉個例子:
運行結(jié)果如下:

2、自適應(yīng)閾值
????????在前面的部分我們使用是全局閾值,整幅圖像采用同一個數(shù)作為閾值。當時這種方法并不適應(yīng)與所有情況,尤其是當同一幅圖像.上的不同部分的具有不同亮度時。這種情況下我們需要采用自適應(yīng)閾值。此時的閾值是根據(jù)圖像上的每一個小區(qū)域計算與其對應(yīng)的閾值。因此在同一幅圖像上的不同區(qū)域采用的是不同的閾值,從而使我們能在亮度不同的情況下得到更好的結(jié)果。
????????這種方法需要我們指定三個參數(shù),返回值只有一個。
????●Adaptive Method-指定計算閾值的方法。
????????????- CV2.ADPTIVE THRESH_ MEAN C:閾值取自相鄰區(qū)域的平
????????????均值
????????????- CV2.ADPTIVE THRESH GAUSSIAN _C: 閾值取值相鄰區(qū)域的加權(quán)和,權(quán)重為一個? ? ? ? ? ? ? ?高斯窗口。
????●Block Size -鄰域大小(用來計算閾值的區(qū)域大小)。
????●C-這就是是一個常數(shù),閾值就等于的平均值或者加權(quán)平均值減去這個常
????數(shù)。
我們使用下面的代碼來展示簡單閾值與自適應(yīng)閾值的差別:
結(jié)果:

3、Otsu's二值化
????????在第一部分中我們提到過retVal,當我們使用Otsu二值化時會用到它。那么它到底是什么呢?
????????在使用全局閾值時,我們就是隨便給了一個數(shù)來做閾值,那我們怎么知道我們選取的這個數(shù)的好壞呢?答案就是不停的嘗試。如果是一副雙峰圖像(簡單來說雙峰圖像是指圖像直方圖中存在兩個峰)呢?我們豈不是應(yīng)該在兩個峰之間的峰谷選一個值作為閾值?這就是Otsu二值化要做的。簡單來說就是對一副雙峰圖像自動根據(jù)其直方圖計算出-個閾值。(對于非雙峰圖像,這種方法得到的結(jié)果可能會不理想)。
????????這里用到到的函數(shù)還是CV2.threshold(),但是需要多傳入一個參數(shù)( flag ): CV2.THRESH_ _OTSU。 這時要把閾值設(shè)為0。然后算法會找到最優(yōu)閾值,這個最優(yōu)閾值就是返回值retVal。 如果不使用Otsu二值化,返回的retVal值與設(shè)定的閾值相等。
????????下面的例子中,輸入圖像是一副帶有噪聲的圖像。第一種方法,我們設(shè)127為全局閾值。第二種方法,我們直接使用Otsu二值化。第三種方法,我們首先使用一個5x5的高斯核除去噪音,然后再使用Otsu二值化??纯丛胍羧コ龑Y(jié)果的影響有多大吧。
顯示結(jié)果:

????????高斯模糊或者說高斯濾波(高斯核)對圖像進行濾波處理的一大特點就是對中心點鄰域像素值進行‘加權(quán)平均’后將值賦予中心像素點,這里便用到了權(quán)重矩陣,該矩陣就是基于二維高斯函數(shù)(概率密度函數(shù))得到的。