c++opencv汉字分割_机器学习小白,还不快pick一下——【视觉与图像:阈值分割】...
前言:安利Python來開發OpenCV的原因其實細心的小伙伴早在?【視覺與圖像】Python+OpenCV教程入門篇就找到了想要的答案。(點藍字即可打開)
”今天周五了!
今天還不下雨!!
今天又可以更新了!!!
先前小天邀請老王和大家聊到Python+OpenCV的第5波:顏色空間轉換(點藍字即可打開),那么接下來老王給同學們帶來的是Python+OpenCV第6篇章:閾值分割,還不快收藏?住!
文章交代:
學習使用不同的閾值方法”二值化”圖像
推薦人群:
初級入門、機器學習小白、技術愛好者
【圖片可到文末?本節源碼下載。】
閾值分割
01目標使用固定閾值、自適應閾值和Otsu閾值法”二值化”圖像
OpenCV函數:cv2.threshold(),?cv2.adaptiveThreshold()
固定閾值分割很直接,一句話說就是像素點值大于閾值變成一類值,小于閾值變成另一類值。
cv2.threshold()用來實現閾值分割,ret是return value縮寫,代表當前的閾值,暫時不用理會。函數有4個參數:
參數1:要處理的原圖,*一般是灰度圖
參數2:設定的閾值
參數3:最大閾值,一般為255
參數4:閾值的方式,主要有5種,詳情:http://t.cn/EfZhnbq
下面結合代碼理解下這5種閾值方式:
Tips:很多人誤以為閾值分割就是二值化。從上圖中可以發現,兩者并不等同,閾值分割結果是兩類值,而不是兩個值,所以教程開頭我把二值化加了引號。
03自適應閾值看得出來固定閾值是在整幅圖片上應用一個閾值進行分割,它并不適用于明暗分布不均的圖片。?cv2.adaptiveThreshold()自適應閾值會每次取圖片的一小部分計算閾值,這樣圖片不同區域的閾值就不盡相同。它有5個參數,其實很好理解,先看下效果:
參數1:要處理的原圖
參數2:最大閾值,一般為255
參數3:小區域閾值的計算方式
ADAPTIVE_THRESH_MEAN_C:小區域內取均值
ADAPTIVE_THRESH_GAUSSIAN_C:小區域內加權求和,權重是個高斯核
參數4:閾值方式(跟前面講的那5種相同)
參數5:小區域的面積,如11就是11*11的小塊
參數6:最終閾值等于小區域計算出的閾值再減去此值
如果你沒看懂上面的參數也不要緊,暫時會用就行,當然我建議你調整下參數看看不同的結果。
04Otsu閾值在前面固定閾值中,我們是隨便選了一個閾值如127,那如何知道我們選的這個閾值效果好不好呢?答案是:不斷嘗試,所以這種方法在很多文獻中都被稱為經驗閾值。Otsu閾值法就提供了一種自動高效的二值化方法,不過我們直方圖還沒學,這里暫時略過。
好吧,我知道激起了你的興趣~ o( ̄▽ ̄)o,有能力的童鞋可以看下繼續往下看番外篇~
05小結cv2.threshold()用來進行固定閾值分割。固定閾值不適用于光線不均勻的圖片,所以用 cv2.adaptiveThreshold()進行自適應閾值分割。 二值化跟閾值分割并不等同。針對不同的圖片,可以采用不同的閾值方法。
06練習Otsu閾值是一種高效的二值化算法,請閱讀(番外篇)?
引用
本節源碼?http://t.cn/EfZcSIJ
Image Thresholding?http://t.cn/EfZcHyc
番
外
大部分圖像處理任務都需要先進行二值化操作,閾值的選取很關鍵,Otsu閾值法會自動計算閾值。
Otsu閾值法(日本人大津展之提出的,也可稱大津算法)非常適用于雙峰圖片,啥意思呢?
Otsu N. A threshold selection method from gray-level histograms[J]. IEEE transactions on systems, man, and cybernetics, 1979, 9(1): 62-66. (http://t.cn/EfZx2dl)
1.什么是雙峰圖片雙峰圖片就是指圖片的灰度直方圖上有兩個峰值,直方圖就是每個值(0~255)的像素點個數統計,后面會詳細介紹。
Otsu算法假設這副圖片由前景色和背景色組成,通過統計學方法(最大類間方差)選取一個閾值,將前景和背景盡可能分開,我們先來看下代碼,然后詳細說明下算法原理。
2.代碼示例下面這段代碼對比了使用固定閾值和Otsu閾值后的不同結果:
另外,對含噪點的圖像,先進行濾波操作效果會更好。
下面我們用Matplotlib把原圖、直方圖和閾值圖都顯示出來:
可以看到,Otsu閾值明顯優于固定閾值,省去了不斷嘗試閾值判斷效果好壞的過程。其中,繪制直方圖時,使用了numpy中的ravel()函數,它會將原矩陣壓縮成一維數組,便于畫直方圖。
Otsu算法詳解Otsu閾值法將整幅圖分為前景(目標)和背景,以下是一些符號規定:
T:分割閾值
N0:前景像素點數
N1:背景像素點數
ω0:前景的像素點數占整幅圖像的比例
ω1:背景的像素點數占整幅圖像的比例
μ0:前景的平均像素值
μ1:背景的平均像素值
μ:整幅圖的平均像素值
rows×cols:圖像的行數和列數
結合下圖會更容易理解一些,有一副大小為4×4的圖片,假設閾值T為1,那么:
其實很好理解,N0+N1就是總的像素點個數,也就是行數乘列數:
ω0和ω1是前/背景所占的比例,也就是:
整幅圖的平均像素值就是:
??此時,我們定義一個前景μ0與背景μ1" role="presentation" style="font-size: 15px; box-sizing: border-box; display: inline-table; line-height: 0; text-align: left; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; background-color: rgb(255, 255, 255);">μ1μ1的方差g" role="presentation" style="font-size: 15px; box-sizing: border-box; display: inline-table; line-height: 0; text-align: left; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; background-color: rgb(255, 255, 255);">gg:??
將前述的1/2/3公式整合在一起,便是:
g" role="presentation" style="box-sizing: border-box; display: inline-table; line-height: 0; text-align: left; font-size: 18.08px; overflow-wrap: normal; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; padding-top: 1px; padding-bottom: 1px; color: rgb(36, 41, 46); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; background-color: rgb(255, 255, 255);">??g就是前景與背景兩類之間的方差,這個值越大,說明前景和背景的差別也就越大,效果越好。Otsu算法便是遍歷閾值T,使得g最大,所以又稱為最大類間方差法?;旧想p峰圖片的閾值T在兩峰之間的谷底。??
引用
本節源碼?http://t.cn/EfZcSIJ?http://t.cn/EfZp5Vg
numpy.ravel?http://t.cn/EfZpQL9
Otsu’s Method(wikipedia)?http://t.cn/EfZpFlb
Image Thresholding?http://t.cn/EfZcHyc
一維OTSU法、最小交叉熵法、二維OTSU法及C++源碼?http://t.cn/EfZ0gBq
Otsu N. A threshold selection method from gray-level histograms[J]. IEEE transactions on systems, man, and cybernetics, 1979, 9(1): 62-66.?http://t.cn/EfZOfK3
如果你也有想分享的干貨,可以登錄天池實驗室(notebook),包括賽題的理解、數據分析及可視化、算法模型的分析以及一些核心的思路等內容。
小天會根據你分享內容的數量以及程度,給予豐富的神秘天池大禮以及糧票獎勵。分享成功后你也可以通過下方釘釘群?主動聯系我們的社區運營同學(釘釘號:doqclsn 或 yiwen1991)
天池寶貝們有任何問題,可在戳“留言”評論或加入釘釘群留言,小天會認真傾聽每一個你的建議!
點擊下方圖片即可閱讀
如何使用PAI深度學習TensorFlow讀寫OSS教程?
如果你會模型融合!那么,我要和你做朋友
《流浪地球》為何從不被看好到票房榜首,數據分析給你答案!
除了獎金還送800萬入駐權益,未來科技城——智能城市建設合伙人大賽正式啟動啦!
?????AI安全新探索,IJCAI-19阿里巴巴人工智能對抗算賽,約一波?
聽說戳了的人都?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c++opencv汉字分割_机器学习小白,还不快pick一下——【视觉与图像:阈值分割】...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 借助ZFBrowser插件实现Unity
- 下一篇: 网络资源的初始化与释放(C++ RAII