吳思涵 趙楠楠
(遼寧科技大學(xué)電子與信息工程學(xué)院 遼寧省鞍山市 114051)
數(shù)字圖像處理技術(shù)往往伴隨著計算機(jī)的發(fā)展而發(fā)展,比如現(xiàn)階段的第五代計算機(jī)就可以模擬人腦的神經(jīng)元網(wǎng)絡(luò)以及一些其他的腦功能,進(jìn)而大大地提高計算機(jī)的處理速度和計算精度[1]。該種技術(shù)應(yīng)用在數(shù)字圖像識別中,就衍化為了BP神經(jīng)網(wǎng)絡(luò)以及其他一些功能,使得處理的過程更加高效、快捷[2]。本文將MATLAB軟件作為圖像處理的工具,設(shè)計了數(shù)字圖像處理的整個過程。在研究了相關(guān)文獻(xiàn)后,運(yùn)用相關(guān)算法對圖像進(jìn)行一系列處理。本設(shè)計主要由圖像讀取、圖像背景提取、圖像二值化、圖像分割、數(shù)字識別等步驟構(gòu)成,通過對圖像的一系列處理,最終將圖片中的數(shù)字圖像轉(zhuǎn)變?yōu)槭M(jìn)制的計算機(jī)語言輸出出來。
圖像的灰度化就是將圖像的RGB值轉(zhuǎn)換[0,255]的灰度值[3],其中R代表紅色,G代表綠色,B代表藍(lán)色,“0”代表純黑色,“255”代表純白色,在此范圍內(nèi)就是從黑到白的過渡色,圖像的灰度化一般采用rgb2gray指令,比如:
I=imread(‘1.bmp’);
Gray=rgb2gray(I);
就是將彩色圖片‘1.bmp’轉(zhuǎn)變?yōu)榛叶葓D片,可以調(diào)用impixelinfo來查看每個像素點(diǎn)的灰度值,轉(zhuǎn)變過程如圖1所示。
圖1:圖片灰度化過程
由于本設(shè)計需要將圖片中的字母與數(shù)字與圖片背景分離,所以對圖像進(jìn)行二值化,將圖片中的不相關(guān)背景灰度值設(shè)定為純白,即255,將有用的信息設(shè)置為0,形成非黑即白的黑白圖像,方便后期的分割,圖像的二值化一般采用im2bw指令,但是由于人為給定的閾值并不總是特別可行,所以需要調(diào)用MATLAB工具箱中的graythresh函數(shù),graythresh函數(shù)使用最大類間方差法獲取閾值,極大的提高了提取的有效性。
level=graythresh(I); %用graythresh函數(shù)計算灰度值的門檻
bw2=im2bw(I,level);
圖像分割是圖像預(yù)處理過程中特別重要的過程,當(dāng)然也是比較復(fù)雜的過程,只有分割正確,最后的識別才有可能正確[4]。進(jìn)行分割一般依據(jù)的是圖形像素點(diǎn)的亮度以及顏色對比,所以需要排除諸多干擾因素,例如,色彩分布不均勻、噪聲、圖片背景與所需信息的對比度不明顯等,因此圖像分割技術(shù)一直在不斷地完善,不斷糾正分割中產(chǎn)生的錯誤?,F(xiàn)階段圖像分割有多種方法,如:閾值分割方法、邊緣檢測法以及直方圖法。本設(shè)計主要采用閾值分割[5]的方法.閾值分割是圖像分割過程中經(jīng)常使用的方法,它是圖像分割中使用最廣泛的一類,通過對圖像像素點(diǎn)的統(tǒng)計,找出突變的點(diǎn),進(jìn)而設(shè)置合適的閾值點(diǎn),以此來將圖片分割為一塊一塊的區(qū)域,閾值分割的關(guān)鍵就是閾值的設(shè)置,閾值的數(shù)值直接關(guān)系到分割的質(zhì)量。閾值分割的優(yōu)點(diǎn)計算簡單、運(yùn)行速度快、效率高[6],適合本設(shè)計的需求。
本設(shè)計先通過對每一列的數(shù)值的統(tǒng)計,將統(tǒng)計結(jié)果存入histogram數(shù)組,然后對數(shù)組內(nèi)數(shù)值進(jìn)行分析,設(shè)定閾值,由于閾值不可能完全準(zhǔn)確,為了盡可能將圖片分割準(zhǔn)確,所以后期添加條件語句將不符合的列刪除,最終將圖片分割為一列一列單獨(dú)的區(qū)域。
根據(jù)閾值分割后,將字符左右邊界數(shù)據(jù)存儲,如“I”所在列左邊界=15,右邊界=31,通過指令imshow(bw( 1:y,15:31))就可以將“I”所在列截取出來,同理,可以將其他列截取出。
字符識別是圖像識別過程中最重要的過程,識別模式有三種,第一種結(jié)構(gòu)模式識別,它依據(jù)字符的特征進(jìn)行識別,抗干擾能力較差[7],第二種統(tǒng)計模式識別,統(tǒng)計模式主要是通過統(tǒng)計字符的某一特征,設(shè)計出識別的規(guī)則。第三種混合識別,經(jīng)過實(shí)際的帶入操作,本設(shè)計最終選取了混合模式來識別字符[8]?;旌献R別又分為兩類,網(wǎng)絡(luò)化特征與BP神經(jīng)網(wǎng)絡(luò)。
BP神經(jīng)網(wǎng)絡(luò)是目前應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò),它實(shí)質(zhì)上就是一種“誤差逆?zhèn)鞑シ答仭彼惴?,采用最速下降法,通過反方向傳播不斷自動調(diào)整輸入層和隱含層的權(quán)值,盡可能能消除誤差。其原理圖如圖2所示。
圖2:神經(jīng)網(wǎng)絡(luò)原理圖
其工作原理如下:
(1)將x1、x2、x3、...、xm作為輸入層數(shù)據(jù)。
(2)通過公式(1):
得出一組數(shù)據(jù)s1、s2、s3、...、sn。
(3)通過激活函數(shù)θ,將s1、s2、s3、...、sn變?yōu)樽鳛殡[含層的輸入。
激活函數(shù)一般為sigmoid函數(shù),比如可以使用log-sigmoid,見式(2):
(4)根據(jù)公式(3):
得到另一組數(shù)據(jù)s1、s2、s3、...、sk,在通過激活函數(shù),得出輸出y1、y2、...、yk。
(5)根據(jù)輸出結(jié)果之間的差即誤差e,將誤差向前傳播得出隱含層誤差繼續(xù)將隱含層誤差向前傳播,得到輸入層誤差。
(6)根據(jù)誤差數(shù)據(jù),調(diào)整權(quán)重,循環(huán)往復(fù),直至誤差達(dá)到要求。
本設(shè)計輸入數(shù)據(jù)有:0-9,a-z(缺少o),A-Z(C、O、P、S、U、V、W、X、Z以小寫字母為準(zhǔn)),共52個輸入字符,利用eye(52,52)作為輸出,以數(shù)字‘4’舉例:首先將經(jīng)過二值化和歸一化后的二維矩陣轉(zhuǎn)化為一個一維矩陣,由于設(shè)定圖片尺寸為110*50,所以轉(zhuǎn)化后則變成了一個1*6050的一維矩陣,存入I1數(shù)組中,其他字符相同方式處理,得到I1、I2、I3、...、I52,將之作為輸入P,eye(52,52)作為輸出T,用newff指令建立BP網(wǎng)絡(luò),部分代碼如下:
net=newcf(P,T,100,{'logsig','logsig','logsig'},'trainrp');
net.trainparam.epochs=500; %網(wǎng)絡(luò)的最大訓(xùn)練次數(shù)
net.trainparam.show=50;
net.trainparam.goal=0.005; %目標(biāo)誤差
net=init(net);
[net,tr]=train(net,P,T); %建立網(wǎng)絡(luò)
T0=sim(net,p);%T0輸入神經(jīng)網(wǎng)絡(luò)得到的輸出,T0為52x1的列向量
T1=compet(T0);% 找出最大值的列
k=find(T1==1); %將數(shù)值為1的行對應(yīng)的位置存儲到變量k
為方便觀察,將圖片大小均設(shè)置為11*5,以最后一張字符圖片數(shù)字“4”為例,訓(xùn)練過程,先將待識別圖片轉(zhuǎn)化為一維矩陣,再將圖片庫內(nèi)的52張字符圖片轉(zhuǎn)化為一維矩陣存入P, 利用eye(52,52)建立52*52的矩陣,數(shù)字“4”對應(yīng)第4行(000100000....),建立網(wǎng)絡(luò),識別結(jié)果。如圖3所示。
圖3:神經(jīng)網(wǎng)絡(luò)識別結(jié)果
本文對圖像處理進(jìn)行設(shè)計,經(jīng)過RGB圖像灰度化、二值化、字符分割、邊緣檢測、平滑去噪、字符識別等過程,基本可以實(shí)現(xiàn)簡單圖片與較復(fù)雜圖片的識別,不同于單列單行的字符識別,本文可以識別多行多列的段落,更加具有普適性,另外也不再對識別字符的字?jǐn)?shù)進(jìn)行限定,可以識別任意數(shù)量的字符圖片。