Opencv+C++之身份證識別(一)


五月份各種課程,也是最后一個學期了,所以就沒有跟大家分享自己的一些所學。現在課程終於結束了,即將開始下一階段的項目開發,所以趁這個間隙把前段時間做的一些東西做一個總結吧。

言歸正傳,對各種證件的識別系統大家都不陌生,尤其是對車牌號的識別已經應用到我們生活的很多方面,例如小區攝像頭對入庫車輛車牌的識別,高速收費站前對車牌識別的攝像頭等。那么對身份證信息的識別跟其它識別有什么區別呢,我想主要是對身份證的識別是在一個相對靜態的環境下,受環境,光照等的擾動比較小,一般都是先對身份證攝像后,通過系統對身份證上的信息進行識別;第二點就是它跟其它證件一樣,證件上的信息都有固定的顏色和位置,這樣對我們第二步的分割就有很大的幫助。分析了身份證的固有特性后,簡單說下我們系統的功能:1)將各個目標信息從身份證圖片中分割出來,例如姓名信息,住址信息等;2)對分割出來的信息進行識別,最基礎的要求是能統計出各個目標中漢字個數,數字個數,字母個數和特殊字符個數等,本次開發,我只是實現了對數字的識別並對漢字的識別提出自己的可行性方法,因為時間緣故沒有花很多時間去實現對漢字的識別;

先給出幾張我們實驗用的照片:

當然這三張只是實驗圖片的一部分,但是又是很有代表性,第一張屬於比較標准的,清晰的身份證圖片,第二幅圖片中身份證邊界沒有跟圖片邊界貼近,並且受到了光照不均的影響,第三張中身份證角度稍微有些傾斜,並且身份證的邊界沒有被照到。實際上這三張就代表了我們實際應用的測試圖片,因為我們要使用識別系統,是人為的去對身份證拍攝,再將圖片信息進行系統處理的,所以我們可以假定攝像時身份證同攝像頭平行,並且身份證區域占整個圖片區域的5/6以上;

下面就開始我們的實踐階段,該系統的開發主要分為三個階段:圖像預處理;目標區域分割;目標區域信息識別;

(1)預處理階段主要是要將圖片中的一些噪音,擾動過濾掉。

  1)要提取目標區域信息,首先想到將圖像進行灰度化,常用的灰度化方法很多,像分量法,加權法,均值法等等。但是通過實驗發現,直接提取彩色圖的R通道灰度圖是最好的選擇,因為該灰度圖中前景和背景的對比度最大。如下圖所示

通過灰度化后可以明顯看出,我們先要提取的前景信息,相對於背景來說有明顯的灰度對比(暫時先不用考慮頭像部分,因為該部分位置相對固定,通過位置信息可以將其過濾)

 2)通過獲取局部最佳閾值來作為自適應的全局閾值;根據我們對身份證圖片的假定和位置信息可以知道,在圖片中心區域的左側可以提取一個矩形區域,其中一定包含前景信息,通過獲取該區域的最佳閾值,就可以近似作為整副圖片的全局閾值;當然這樣做也只是對圖像做一個粗糙的過濾,因為受光照等的影響,局部閾值跟全局閾值會有一定的差異。但在后面的各個區域的獲取中,我們有方法來進一步精確。

步驟如下1.在該區域內選擇一個T作為初始估計值;

           2.用T分割圖像,這樣做會生成兩組像素:G1由所有灰度值大於T的像素組成,而G2由所有灰度值小於或者等於T的像素組成。

           3.對於區域G1和G2中的所有像素計算平均灰度值u1和u2

           4.計算新的門限值: T=(u1+u2)/2

           5.重復步驟2到4,直到逐次迭代所得的T值之差小於事先定義好的參數P

通過閾值處理得到如下結果

(2)對圖像進行預處理后,下一步就是對目標區域的提取。這一步我主要是用到了身份證中各個區域的位置信息,利用身份證號的特殊位置,和它本身相對固定的組成(18個數字或字母)先提取出身份證號的區域,在根據該區域與其它區域的相對位置獲得其它目標對象的區域范圍。這樣就完成了第一步的分割任務。示例圖如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM