連通域的原理與Python實現


向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




閱讀過本文的人還看了如下文章:


TensorFlow 2.0深度學習案例實戰


基於40萬表格數據集TableBank,用MaskRCNN作表格檢測


《基於深度學習的天然語言處理》中/英PDF


Deep Learning 中文版第一版-周志華團隊


【全套視頻課】最全的目標檢測算法系列講解,通俗易懂!


《美團機器學習實踐》_美團算法團隊.pdf


《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼


特徵提取與圖像處理(第二版).pdf


python就業班學習視頻,從入門到實戰項目


2019最新《PyTorch天然語言處理》英、中文版PDF+源碼


《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼


《深度學習之pytorch》pdf+附書源碼


PyTorch深度學習快速實戰入門《pytorch-handbook》


【下載】豆瓣評分8.1,《機器學習實戰:基於Scikit-Learn和TensorFlow》


《Python數據分析與挖掘實戰》PDF+完整源碼


汽車行業完整知識圖譜項目實戰視頻(全23課)


李沐大神開源《動手學深度學習》,加州伯克利深度學習(2019春)教材


筆記、代碼清晰易懂!李航《統計學習方法》最新資源全套!


《神經網絡與深度學習》最新2018版中英PDF+源碼


將機器學習模型部署爲REST API


FashionAI服裝屬性標籤圖像識別Top1-5方案分享


重要開源!CNN-RNN-CTC 實現手寫漢字識別


yolo3 檢測出圖像中的不規則漢字


一樣是機器學習算法工程師,你的面試爲何過不了?


前海徵信大數據算法:風險機率預測


【Keras】完整實現‘交通標誌’分類、‘票據’分類兩個項目,讓你掌握深度學習圖像分類


VGG16遷移學習,實現醫學圖像識別分類工程項目


特徵工程(一)


特徵工程(二) :文本數據的展開、過濾和分塊


特徵工程(三):特徵縮放,從詞袋到 TF-IDF


特徵工程(四): 類別特徵


特徵工程(五): PCA 降維


特徵工程(六): 非線性特徵提取和模型堆疊


特徵工程(七):圖像特徵提取和深度學習


如何利用全新的決策樹集成級聯結構gcForest作特徵工程並打分?


Machine Learning Yearning 中文翻譯稿


螞蟻金服2018秋招-算法工程師(共四面)經過


全球AI挑戰-場景分類的比賽源碼(多模型融合)


斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


python+flask搭建CNN在線識別手寫中文網站


中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程



不斷更新資源

深度學習、機器學習、數據分析、python

 搜索公衆號添加: datayx  



機大數據技術與機器學習工程

 搜索公衆號添加: datanlp

長按圖片,識別二維碼





本文分享自微信公衆號 - 機器學習AI算法工程(datayx)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索