向AI轉型的程序員都關注了這個號👇👇👇python
機器學習AI算法工程 公衆號:datayx程序員
二值圖像連通域
二值圖像分析最基礎的也是最重要的方法之一就是連通域標記,它是全部二值圖像分析的基礎。它經過對二值圖像中目標像素的標記,讓每一個單獨的連通區域造成一個被標識的塊,進一步的咱們就能夠獲取這些塊的輪廓、外接矩形、質心、不變矩等幾何參數。web
連通區域的定義通常有兩種,分爲4鄰接和8鄰接。下面這幅圖中,若是考慮4鄰接,則有3個連通域,8鄰接則是2個連通域。面試
從連通區域的定義能夠知道,一個連通域是由具備相同像素值的相鄰像素組成像素集合,所以,咱們就能夠經過這兩個條件在圖像中尋找連通區域,對於找到的每一個連通域,咱們賦予其一個惟一的標識( Label ),以區別其餘連通域。算法
連通域分析的基本算法有兩種:1) Two-Pass 兩遍掃描 2) Seed-Filling 種子填充法。flask
Two-Pass 算法
兩遍掃描法( Two-Pass ),正如其名,指的就是經過掃描兩遍圖像,將圖像中存在的全部連通域找出並標記。微信
另外,我在代碼實現的過程當中想到另一種 Two-Pass 的方式網絡
(即掃描兩遍圖像的方式)實現,就是第二次掃描與 (1) 一樣的過程,app
只是方向換成從右下到左上。機器學習
我後面的 Two-Pass 代碼是使用我本身想到的方法實現的,
本身使用了幾個例子測試了下,目前沒出現啥問題。
Seed-Filling 算法
種子填充方法來源於計算機圖形學,經常使用於對某個圖形進行填充。它基於區域生長算法。個人理解就是遞歸遍歷。
附上兩種方法的 Python 的實現
python驗證碼識別教程之利用投影法、連通域法分割圖片
接下來文章主要記錄一下如何切分驗證碼,用到的主要庫就是Pillow和Linux下的圖像處理工具GIMP。首先假設一個固定位置和寬度、無粘連、無干擾的例子學習一下如何使用Pillow來切割圖片。
使用GIMP打開圖片後,按 加號 放大圖片,而後點擊View->Show Grid來顯示網格線:
其中,每一個正方形邊長爲10像素,因此數字1切割座標爲左20、上20、右40、下70。以此類推能夠知道剩下3個數字的切割位置。
代碼以下:
那麼,若是字符位置不固定怎麼辦呢?如今假設一種隨機位置寬度、無粘連、無干擾線的狀況。
第一種方法,也是最簡單的方法叫作」投影法」。原理就是將二值化後的圖片在豎直方向進行投影,根據投影后的極值來判斷分割邊界。這裏我依然使用上面的驗證碼圖片來進行演示:
經過vertical函數咱們就獲得了一個包含全部黑色像素在X軸上投影后左右邊界的位置。因爲驗證碼沒有任何干擾,因此個人閾值設定爲0。
因此對於簡單粘連的狀況,調整閾值也是能夠解決的。
第二種方法,叫作CFS連通域分割法。原理就是假定每一個字符都由一個單獨的連通域組成,換言之就是無粘連,找到一個黑色像素並開始判斷,直到全部相連的黑色像素都被遍歷標記事後便可判斷出這個字符的分割位置。算法以下:
將二值化後的圖片進行從左到右、從上到下的遍歷,若是遇到黑色像素而且這個像素沒有沒訪問過,就將這個像素入棧並標記爲已經訪問。
若是棧不爲空,則繼續探測周圍8個像素,並執行第2步;若是棧空,則表明探測完了一個字符塊。
探測結束,這樣就肯定了若干字符。
代碼以下:
調用後輸出結果和使用投影法是同樣的。另外我看網上還有一種叫作「泛洪填充(Flood Fill)」的方法,彷佛和連通域是同樣的。
參考文章
https://zhuanlan.zhihu.com/p/97689424
https://www.jb51.net/article/141434.htm
閱讀過本文的人還看了如下文章:
基於40萬表格數據集TableBank,用MaskRCNN作表格檢測
《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼
2019最新《PyTorch天然語言處理》英、中文版PDF+源碼
《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼
PyTorch深度學習快速實戰入門《pytorch-handbook》
【下載】豆瓣評分8.1,《機器學習實戰:基於Scikit-Learn和TensorFlow》
李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019春)教材
【Keras】完整實現‘交通標誌’分類、‘票據’分類兩個項目,讓你掌握深度學習圖像分類
如何利用全新的決策樹集成級聯結構gcForest作特徵工程並打分?
Machine Learning Yearning 中文翻譯稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程
不斷更新資源
深度學習、機器學習、數據分析、python
搜索公衆號添加: datayx
機大數據技術與機器學習工程
搜索公衆號添加: datanlp
長按圖片,識別二維碼
本文分享自微信公衆號 - 機器學習AI算法工程(datayx)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。