門檻值分割
1、目标
使用固定門檻值、自适應門檻值和Otsu門檻值法”二值化”圖像
OpenCV函數:cv2.threshold(), cv2.adaptiveThreshold()
2、固定門檻值分割
固定門檻值分割很直接,一句話說就是像素點值大于門檻值變成一類值,小于門檻值變成另一類值。

cv2.threshold()用來實作門檻值分割,ret是return value縮寫,代表目前的門檻值,暫時不用理會。函數有4個參數:
- 參數1:要處理的原圖,*一般是灰階圖
- 參數2:設定的門檻值
- 參數3:最大門檻值,一般為255
- 參數4:門檻值的方式,主要有5種,詳情: http://t.cn/EfZhnbq
下面結合代碼了解下這5種門檻值方式:
Tips:很多人誤以為門檻值分割就是二值化。從上圖中可以發現,兩者并不等同,門檻值分割結果是兩類值,而不是兩個值,是以教程開頭我把二值化加了引号。
3、自适應門檻值
看得出來固定門檻值是在整幅圖檔上應用一個門檻值進行分割,它并不适用于明暗分布不均的圖檔。 cv2.adaptiveThreshold()自适應門檻值會每次取圖檔的一小部分計算門檻值,這樣圖檔不同區域的門檻值就不盡相同。它有5個參數,其實很好了解,先看下效果:
參數1:要處理的原圖
參數2:最大門檻值,一般為255
參數3:小區域門檻值的計算方式
ADAPTIVE_THRESH_MEAN_C:小區域内取均值
ADAPTIVE_THRESH_GAUSSIAN_C:小區域内權重求和,權重是個高斯核
參數4:門檻值方式(跟前面講的那5種相同)
參數5:小區域的面積,如11就是11*11的小塊
參數6:最終門檻值等于小區域計算出的門檻值再減去此值
如果你沒看懂上面的參數也不要緊,暫時會用就行,當然我建議你調整下參數看看不同的結果。
4、Otsu門檻值
在前面固定門檻值中,我們是随便選了一個門檻值如127,那如何知道我們選的這個門檻值效果好不好呢?答案是:不斷嘗試,是以這種方法在很多文獻中都被稱為經驗門檻值。Otsu門檻值法就提供了一種自動高效的二值化方法,不過我們直方圖還沒學,這裡暫時略過。
好吧,我知道激起了你的興趣~ o( ̄▽ ̄)o,有能力的童鞋可以看下繼續往下看番外篇~
5、小結
cv2.threshold()用來進行固定門檻值分割。固定門檻值不适用于光線不均勻的圖檔,是以用 cv2.adaptiveThreshold()進行自适應門檻值分割。 二值化跟門檻值分割并不等同。針對不同的圖檔,可以采用不同的門檻值方法。
引用
本節源碼
http://t.cn/EfZcSIJImage Thresholding
http://t.cn/EfZcHyc