圖像識別技術——驗證碼識別

[1]1、數字圖像處理基礎

一幅圖像能夠定義爲一個二維數組f(x,y),這裏x,y是空間座標,而在任何一對空間座標(x,y)上的幅值f稱爲該點圖像的強度或灰度。當x,y和幅值f爲有限的、離散的數值時,稱該圖像爲數字圖像。 html

天然界呈如今人眼中的圖像是連續的模擬信號,在計算機處理前,必須用圖像傳感器把光信號轉換爲表示亮度的電信號,再經過取樣和量化獲得一副數字圖像。取樣是對圖像在座標上進行離散化的過程,每個取樣點稱爲一個像素。量化是對圖像灰度上的離散化過程。取樣後將獲得M*N個像素,每一個像素量化獲得一個灰度值L,以L表示灰度值的容許取值範圍,則數字圖像存儲須要的比特數b能夠表示爲: 算法

clip_image002

圖像的灰度值取值範圍被稱爲圖像的動態範圍。把佔有灰度級所有有效段的圖像稱爲高動態範圍圖像,高動態範圍圖像有較高的對比度。相反,地動態範圍的圖像看上去是沖淡了的灰暗格調。 數組

 

2、圖像的預處理:

主要是對圖像進行灰度化、二值化、抑噪(濾波)等技術。 網絡

一、圖像的灰度化 人工智能

RGB系統中一個顏色值由3個份量組成,這樣的圖像稱爲彩色圖像,RGB系統稱爲顏色空間模型。常見的顏色空間模型還有HSI、CMYK等。若是一幅圖像的顏色空間是一維的(一個顏色值只有一個顏色份量),則這幅圖像就是一副灰度圖。在位圖圖像中,通常以R=G=B來顯示灰度圖像。 .net

clip_image004

圖 1 原始圖片 3d

經常使用的灰度化方法有如下三種: code

clip_image006 (2.1) htm

clip_image008 (2.2) blog

clip_image010 (2.3)

其中,公式(2.1)的方法來源於I色彩空間中I份量的計算公式,公式(2.2)來源於NTSC色彩空間中Y份量的計算公式。公式(2.3)是基於採用保留最小亮度(黑色)的方法。

clip_image012

圖 2 用公式2.2灰度化後的圖片

RGB彩色圖像能夠當作是由3副單色的灰度圖像構成的,能夠直接取RGB通道中的任一個通道獲得灰度化圖像,如clip_image014,前提是圖像中目標像素的亮度信息主要分佈在B通道上,不然灰度化結果將是亮度信息的大量丟失。灰度圖像又叫亮度圖像,由歸一化的取值表示亮度,最大取值表示白色,最小取值表示黑色。

以P(x,y)表示圖像中一個點,x、y分別是圖像的橫座標和縱座標,R(x,y)表示R通道的顏色份量,G(x,y)表示G通道的顏色份量,B(x,y)表示B通道的顏色份量。點P(x,y)的亮度值用L(x,y)表示。彩色圖像的亮度沒有嚴格的定義和計算公式,通常用公式(2.1)來計算,咱們記做L1(x,y)。一樣的用公式(2.2)計算的亮度值記做L2(x,y),用公式(2.3)計算的亮度值記做L3(x,y)。能夠證實:

clip_image016 (2.4)

clip_image018 (2.5)

公式(2.1)取RGB通道的平均值,獲得的圖像相對比較柔和,同時也縮小了目標和背景的平均亮度差,不利於後續的閥值處理。公式(2.2)考慮了人眼對綠色的適應度最強,藍色次之,紅色最差。在處理綠色調和藍色調的驗證碼圖像時,公式(2.2)的效果使人滿意,但在處理紅色調的圖像時,由於公式中紅色的權值很小,灰度化後目標像素和背景像素的亮度差值被嚴重縮小,效果還不如公式(2.1)。公式(2.3)基於一個前提,那就是有限保留目標像素的亮度信息,利於後續的閥值分割。

須要說明的是,要根據圖像灰度化的目的不一樣,原圖色彩特徵的不一樣,選擇合適的灰度化方法。

二、圖像的二值化

通常24位RGB圖像的灰度圖是8位256個灰度級的,若是把這個灰度級減小到1位2個灰度級,就獲得一副二值圖,二值圖像中的數據所有是0或1。

clip_image020

圖 3 二值化後圖像

 

3、字符分割:

字符分割包括從驗證碼圖像中分割出字符區域和把字符區域劃分紅單個字符兩個部分。若是採用統計特徵匹配以及神經網絡法識別,必需要先分割出單個的字符。簡單的分割方法包括等距分割、積分投影分割、交叉點分割、求連通區等。其中,粘連字符的分割是一個難點,複雜的粘連狀況下分割比較困難,是一個硬人工智能問題。

 

4、字符識別

字符識別就是把處理後的圖片還原回字符文本的過程。能夠分紅基於字符分割的識別(包括採用神經網絡、SVM、各類統計距離的識別法)和模板匹配法識別。

字符識別的經常使用作法是:先獲取該字符的特徵碼,而後使用各類分類算法將對該特徵碼進行分類,將其打上相應的類標籤。分類模型的訓練,是對字符庫中的每一個字符進行特徵化處理,獲得每一個字符的特徵碼,該字符的標籤就是該字符自己,利用特徵碼加上字符的標籤對字符庫中的全部數據進行訓練,獲得相應的分類模型。

固然,獲得了待識別字符的特徵碼後,也可使用類似性度量和字符庫中的字符的特徵碼進行比較,將該字符識別爲與其特徵碼類似性最高的字符。

如今的問題就集中在如何獲取字符的特徵碼。文章[2]中介紹了一種簡單的獲取特徵碼的方法:

對於二值化後的圖像進行分割,分割出來的圖像是一個個的字符,以下圖所示:

clip_image022

圖 4 對圖像進行分割,肯定每一個圖像的邊界

在每一個字符的邊界內,按行(或列)掃描該圖片,檢測其中的每一個像素點,若是像素爲白色則爲0,若是像素爲黑色則爲1,將這些0和1連起來組成的字符串就構成了該字符圖片的特徵碼。

 

 

參考文獻:


[1] 《帶干擾的驗證碼識別研究》 呂剛 浙江工業大學碩士學位論文

[2] 《C#中識別驗證碼》 http://www.360doc.com/content/11/0117/16/4304924_87149528.shtml

[3] 一些經常使用的代碼 http://www.sharejs.com/codes/csharp/5611

[4] C#驗證碼識別實踐  http://blog.csdn.net/stevenkylelee/article/details/8263890

相關文章
相關標籤/搜索