天天看點

機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】

門檻值分割

1、目标

使用固定門檻值、自适應門檻值和Otsu門檻值法”二值化”圖像

OpenCV函數:cv2.threshold(), cv2.adaptiveThreshold()

2、固定門檻值分割

固定門檻值分割很直接,一句話說就是像素點值大于門檻值變成一類值,小于門檻值變成另一類值。

機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】
機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】

cv2.threshold()用來實作門檻值分割,ret是return value縮寫,代表目前的門檻值,暫時不用理會。函數有4個參數:

  • 參數1:要處理的原圖,*一般是灰階圖
  • 參數2:設定的門檻值
  • 參數3:最大門檻值,一般為255
  • 參數4:門檻值的方式,主要有5種,詳情: http://t.cn/EfZhnbq

下面結合代碼了解下這5種門檻值方式:

機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】
機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】
Tips:很多人誤以為門檻值分割就是二值化。從上圖中可以發現,兩者并不等同,門檻值分割結果是兩類值,而不是兩個值,是以教程開頭我把二值化加了引号。
機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】

3、自适應門檻值

看得出來固定門檻值是在整幅圖檔上應用一個門檻值進行分割,它并不适用于明暗分布不均的圖檔。 cv2.adaptiveThreshold()自适應門檻值會每次取圖檔的一小部分計算門檻值,這樣圖檔不同區域的門檻值就不盡相同。它有5個參數,其實很好了解,先看下效果:

機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】
機器學習小白,還不快pick一下——【視覺與圖像:門檻值分割】

參數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/EfZcSIJ

Image Thresholding

http://t.cn/EfZcHyc

繼續閱讀