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

一、數字圖像處理基礎

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

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

clip_image002

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

 

二、圖像的預處理:

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

1、圖像的灰度化

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

clip_image004

圖 1 原始圖片

常用的灰度化方法有以下三種:

clip_image006 (2.1)

clip_image008 (2.2)

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)基於一個前提,那就是有限保留目標像素的亮度信息,利於後續的閥值分割。

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

2、圖像的二值化

一般24位RGB圖像的灰度圖是8位256個灰度級的,如果把這個灰度級減少到1位2個灰度級,就得到一副二值圖,二值圖像中的數據全部是0或1。

clip_image020

圖 3 二值化後圖像

 

三、字符分割:

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

 

四、字符識別

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

字符識別的常用做法是:先獲取該字符的特徵碼,然後使用各種分類算法將對該特徵碼進行分類,將其打上相應的類標籤。分類模型的訓練,是對字符庫中的每個字符進行特徵化處理,得到每個字符的特徵碼,該字符的標籤就是該字符本身,利用特徵碼加上字符的標籤對字符庫中的所有數據進行訓練,得到相應的分類模型。

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

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

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

clip_image022

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

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

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