【圖像處理】基於圖像處理的紙張檢測和提取

背景

  • 給導師看了下自己的畢設系統,建議是可以添加一些互動性。可以在紙張檢測上弄一下,也就是拍一張帶有紙張的圖像,然後提取出紙張邊緣並提取出來。
  • 提取出紙張有很多種方法,以前做車牌識別系統的時候,利用圖像處理的方法定位出車牌的位置,用的是輪廓提取的方法, 首先找藍色的區域(所以只能支持藍色車牌),然後找到矩形輪廓區域,車牌矩形滿足一定的寬高比例,然後就可以找到車牌了。然而紙張並不像車牌那樣規規矩矩,有時候紙張會出現形變等情況,而且紙張內部如果寫有字,可能也會影響紙張的提取,顏色提取就更不用說了,字跡和光照也會影響的。如何進行紙張檢測和提取是一個有意思的研究。

方法

似乎有很多方法可以提取紙張,比如直線檢測,找到直線相交的四個點,也可以基於邊緣檢測和輪廓法,深度學習方法來提取紙張,是一種很弟弟的行爲,紙張內部的字、畫等會嚴重影響其訓練效果,圖像處理方法就是個很不錯的選擇。然而,圖像處理說簡單其實似乎也不簡單。這裏我使用輪廓提取的方法來提取。

步驟:

(準備:白色A4紙張,背景桌面儘量純色,然後再弄幾張有代表性的複雜背景桌面,opencv,python)

  • 縮放,統一尺寸
    由於是手機拍攝的,大部分是百萬像素以上,4000x3000的像素,縮放到1000x750,方便處理,然後copy一張灰度的圖像做主要處理圖像。
  • 濾波處理
    中值濾波,核大小爲3x3,手機拍出來一般沒啥噪聲點,稍微簡單處理下就就行了,或者不加。另外要說明的是,如果圖像拍出來是模糊的,再濾波一下,會檢測不到邊緣的。
  • 二值化
    用大津閾值分割法,自適應進行二值化。白色紙張
  • 邊緣檢測
    有很多很多種邊緣檢測方法,最好用Canny,而且一般都用Canny法。邊緣提取效果非常好。
  • 提取輪廓
    輪廓的提取,opencv有findContours()函數,直接調用就行了,返回的contours對象,包含有n個帶有m個點的數據,這m個點圍起來就是一個輪廓,一共有n組。
  • 篩選輪廓1
    第一次篩選,使用的方法很粗暴簡單,提取的輪廓必須要大於100000,也就是說,750x1000=750000,要輪廓面積大於整個圖像的1/7.5的,其它的直接pass掉,紙張肯定在圖像裏面,並且涵蓋大部分區域
  • 篩選輪廓2
    第二次篩選,要做一些處理,首先是提取凸包,得到凸包的角點,然後對這個凸包n邊形進行擬合,擬合的結果,肯定是一個多邊形,然後判斷這個多邊形是否爲4邊形就ok了。
  • 仿射變換,提取
    在上一步中,會直接得到4個點,將這四個點進行排序,然後進行放射變換,就可以提取需要的結果了。

結果

不足之處,仍然有一些提取錯誤的,這些錯誤的圖像,包含了紙張,但是也含有其它的部分,這是在提取輪廓這個步驟中失誤的,因此在提取輪廓中,如何進行進一步篩選則是未來的一個問題,不過對於個人的畢設,利用上述步驟已經完全足夠,因爲背景並不複雜,結果如下:
下面全是圖
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章