版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> (20 屆)</b></p><p> 基于人工神經(jīng)網(wǎng)絡(luò)的手寫識(shí)別系統(tǒng)</p><p> Handwriting Recognition System Based on Artificial Neural Network</p>
2、;<p><b> 摘 要</b></p><p> 信息技術(shù)的快速發(fā)展,計(jì)算機(jī)迅速走進(jìn)人們的生活,手寫識(shí)別技術(shù)和應(yīng)用領(lǐng)域越來越廣泛,比如在移動(dòng)設(shè)備上、文印工作中都離不開它的身影,極大的方便了人們的日程生活、工作、學(xué)習(xí),因此手寫識(shí)別具有很強(qiáng)的應(yīng)用價(jià)值和實(shí)用價(jià)值。</p><p> 本文中利用神經(jīng)網(wǎng)絡(luò)算法識(shí)別數(shù)字圖像和手寫漢字。識(shí)別的前提是獲得穩(wěn)定
3、的神經(jīng)網(wǎng)路,需要通過大量的訓(xùn)練樣本進(jìn)行訓(xùn)練。針對(duì)數(shù)字圖像首先對(duì)圖像進(jìn)行處理,通過灰度化、二值化、中值濾波、梯度銳化、歸一化等算法獲得特征矩陣,然后用經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)路算法識(shí)別需要識(shí)別的特偵矩陣,進(jìn)而獲得識(shí)別的結(jié)果。針對(duì)漢字識(shí)別,首先處理圖像獲得特征矩陣,通過經(jīng)過訓(xùn)練的神經(jīng)網(wǎng)絡(luò)的識(shí)別獲得筆畫,然后用筆畫去識(shí)別漢字,最后獲得識(shí)別的漢字以及聯(lián)想漢字和詞組。</p><p> 經(jīng)過測(cè)試和驗(yàn)證,基于人工神經(jīng)網(wǎng)絡(luò)的手寫識(shí)別
4、系統(tǒng)能夠有效識(shí)別數(shù)字手寫圖像與手寫漢字,在本文選用的一些測(cè)試文字與數(shù)字圖像的識(shí)別上獲得了不錯(cuò)的結(jié)果。</p><p> 關(guān)鍵詞:手寫識(shí)別;圖像處理;神經(jīng)網(wǎng)絡(luò)</p><p><b> ABSTRACT</b></p><p> The rapid development of information technology makes th
5、e computer immediately appear in people's lives. The application of handwriting recognition technology becomes widespread, and there are more and more application areas. For example, we can see it on a mobile devicea
6、nd in the printing work. It makes people's daily life, work and learning more convenient. Therefore, the handwriting recognition has very strong applied value and practical value.</p><p> In this articl
7、e, the writer uses neural network to identify digital image and handwriting Chinese ideogram. The premise of recognition is to obtain a stable neural network and a great deal of sample training is needed. For digital ima
8、ge, we need to process the images, and get characteristic matrix through a series of algorithms, including graying, linearization, Median filter, gradient sharpening and normalization.For Chinese ideogram recognition,we
9、should gain a characteristic matrix by process</p><p> After testing and verification, handwriting recognition which is based on artificial neural network system can effectively identify the handwriting ima
10、ge and Chinese ideogram. We obtain satisfying results in the identification test on words and digital image.</p><p> Key words: Handwriting recognition;image processing;neural network</p><p>&l
11、t;b> 目 錄</b></p><p><b> 第1章 緒論1</b></p><p> 1.1 課題研究的背景1</p><p> 1.2 課題研究的目的及意義1</p><p> 1.3 國(guó)內(nèi)外研究現(xiàn)狀2</p><p> 1.4 課題研究?jī)?nèi)容2&
12、lt;/p><p> 1.5 論文的組織結(jié)構(gòu)3</p><p> 第2章 神經(jīng)網(wǎng)絡(luò)算法的原理4</p><p> 2.1 神經(jīng)網(wǎng)絡(luò)的原理4</p><p> 2.1.1 生物神經(jīng)元網(wǎng)絡(luò)4</p><p> 2.1.2 人工神經(jīng)元網(wǎng)絡(luò)4</p><p> 2.2 神經(jīng)元學(xué)習(xí)算法
13、6</p><p> 2.2.1 前饋神經(jīng)網(wǎng)絡(luò)6</p><p> 2.2.2 感知機(jī)6</p><p> 2.2.3 反向傳播算法8</p><p> 2.2.4 神經(jīng)網(wǎng)絡(luò)在模式識(shí)別上面的優(yōu)勢(shì)11</p><p> 2.3 本章小結(jié)11</p><p> 第3章 系統(tǒng)設(shè)計(jì)
14、與實(shí)現(xiàn)12</p><p> 3.1 神經(jīng)網(wǎng)絡(luò)算法的實(shí)現(xiàn)12</p><p> 3.1.1 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)12</p><p> 3.1.2 算法的結(jié)構(gòu)12</p><p> 3.2 神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字14</p><p> 3.2.1 手寫數(shù)字的常規(guī)預(yù)處理方法14</p><
15、;p> 3.2.2 圖像的灰度化15</p><p> 3.2.3 圖像的二值化15</p><p> 3.2.4 中值濾波16</p><p> 3.2.5 去掉離散點(diǎn)16</p><p> 3.2.6 圖像銳化17</p><p> 3.2.7 數(shù)字的切分18</p>&
16、lt;p> 3.2.8 數(shù)字的歸一化19</p><p> 3.2.9 特征提取19</p><p> 3.2.10 數(shù)字識(shí)別過程19</p><p> 3.2.11 神經(jīng)元規(guī)模的確定21</p><p> 3.3 神經(jīng)網(wǎng)絡(luò)識(shí)別漢字21</p><p> 3.3.1 筆畫的預(yù)處理22<
17、;/p><p> 3.3.2 圖像的處理23</p><p> 3.3.3 神經(jīng)網(wǎng)絡(luò)規(guī)模的確定24</p><p> 3.3.4 字庫(kù)的管理方式24</p><p> 3.3.5 漢字的查詢27</p><p> 3.3.6 聯(lián)想詞組的查詢28</p><p> 3.4 UI界
18、面的實(shí)現(xiàn)29</p><p> 3.4.1 主窗口的自繪實(shí)現(xiàn)29</p><p> 3.4.2 自繪控件的實(shí)現(xiàn)30</p><p> 3.5 本章小結(jié)32</p><p> 第4章 系統(tǒng)測(cè)試及效果分析33</p><p> 4.1 系統(tǒng)測(cè)試33</p><p> 4.1.
19、1 神經(jīng)網(wǎng)絡(luò)算法的測(cè)試33</p><p> 4.1.2 手寫數(shù)字識(shí)別的測(cè)試33</p><p> 4.1.3 手寫漢字識(shí)別的測(cè)試36</p><p> 4.2 本章小結(jié)37</p><p><b> 結(jié)論38</b></p><p><b> 參考文獻(xiàn)39<
20、/b></p><p><b> 致謝41</b></p><p><b> 第1章 緒論</b></p><p> 1.1 課題研究的背景</p><p> 手寫識(shí)別的研究具有很大的使用價(jià)值,在過去的幾十年,由于數(shù)字化、信息化的大力發(fā)展,手寫識(shí)別成為模式識(shí)別的一個(gè)熱點(diǎn)。隨著手機(jī)、平
21、板等電子產(chǎn)品的快速發(fā)展,手寫識(shí)別技術(shù)在這些產(chǎn)品上已經(jīng)廣泛應(yīng)用,既能夠提升這些產(chǎn)品的用戶體驗(yàn)、也能提高不少的效率。與此同時(shí),現(xiàn)實(shí)生活中存在大量的手寫、打印文件等,有的需要整理成電子文檔,如果用人力去將該文件錄入到電子設(shè)備當(dāng)中,不僅效率低而且錯(cuò)誤率高,這種方法已經(jīng)不適應(yīng)當(dāng)今社會(huì),由于現(xiàn)在電子計(jì)算機(jī)的廣泛應(yīng)用于各行各業(yè),但是由于各種各樣的原因,智能識(shí)別系統(tǒng)不能廣泛應(yīng)用于社會(huì),極大影響了人們的生活、工作效率。</p><p&
22、gt; 人工智能有一段時(shí)間曾經(jīng)陷入低迷,大眾都認(rèn)為人工智能只是個(gè)玩具而沒有實(shí)際應(yīng)用價(jià)值。進(jìn)入21世紀(jì)以來,數(shù)學(xué)的大力發(fā)展大大推動(dòng)了人工智能的進(jìn)步,也大大推動(dòng)了計(jì)算機(jī)科學(xué)的發(fā)展。機(jī)器學(xué)習(xí)是人工智能的一個(gè)重要分支,也是現(xiàn)在的一個(gè)熱點(diǎn)。一個(gè)真正的智能,應(yīng)該具有學(xué)習(xí)能力,能夠根據(jù)自身的環(huán)境來學(xué)習(xí),并改善自身的性能,能夠自動(dòng)獲取學(xué)習(xí)所需要的知識(shí)。以前的智能系統(tǒng)不具有學(xué)習(xí)能力,只是根據(jù)某些算法去計(jì)算,隨著時(shí)代的發(fā)展,這種局限表現(xiàn)的更加突出。在這種
23、現(xiàn)象下,機(jī)器學(xué)習(xí)在很大程度上解決了這種局限?,F(xiàn)在機(jī)器學(xué)習(xí)已經(jīng)應(yīng)用到各個(gè)領(lǐng)域,比如專家系統(tǒng)、語(yǔ)音識(shí)別、搜索、計(jì)算機(jī)視覺等。神經(jīng)網(wǎng)絡(luò)是機(jī)器學(xué)習(xí)學(xué)科中的一個(gè)重要部分,用來分類或者回歸。神經(jīng)網(wǎng)絡(luò)的發(fā)展,為手寫識(shí)別提供了一個(gè)新的途徑。</p><p> 1.2 課題研究的目的及意義</p><p> 單個(gè)神經(jīng)元的結(jié)構(gòu)簡(jiǎn)單,但是當(dāng)大量的神經(jīng)元組成了神經(jīng)網(wǎng)絡(luò),就有了本質(zhì)的改變,它能夠模擬現(xiàn)實(shí)生活中的
24、行為,而且每個(gè)神經(jīng)元都能處理和存儲(chǔ)信息,使得神經(jīng)網(wǎng)絡(luò)具有了并行計(jì)算和分布式存儲(chǔ)的特點(diǎn)。研究神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)有助于更好的從手寫字中踢出去關(guān)鍵因素,從而提高識(shí)別的準(zhǔn)確度和豐富度。</p><p> 研究手寫識(shí)別具有很大的應(yīng)用價(jià)值,將其應(yīng)用于現(xiàn)代便攜電子設(shè)備,豐富了人們的生活,提高工作效率。將其應(yīng)用于手寫文檔的識(shí)別,不僅能將人們從繁重重復(fù)的勞動(dòng)中解脫出來,而且能夠提高手寫文檔電子化的效率。手寫識(shí)別有很重要的理論價(jià)<
25、;/p><p> 值,人們書寫的文字種類不同,每個(gè)人的書寫習(xí)慣不同,使得識(shí)別的樣本具有豐富的多樣性,識(shí)別算法需要從不同的方面進(jìn)行研究。</p><p> 1.3 國(guó)內(nèi)外研究現(xiàn)狀</p><p> 在20世紀(jì)20年代,西方學(xué)者就研究過字符的識(shí)別,最早的是德國(guó)人G.Tausher的閱讀機(jī),采用的比較簡(jiǎn)單的匹配原理,能夠粗略的識(shí)別簡(jiǎn)單的字符比如數(shù)字。到了20世紀(jì)60年
26、代初,OCR(廣字符閱讀機(jī))已經(jīng)能夠識(shí)別書寫比較公正的手寫體字符了,比如日本的Toshiha公司開發(fā)的郵政編碼自動(dòng)分揀機(jī)。到了近代,人工智能的發(fā)展,神經(jīng)網(wǎng)絡(luò)走入了人們的視線,它具有眾多優(yōu)點(diǎn),能夠有效利用樣本的特點(diǎn)進(jìn)行學(xué)習(xí),然后根據(jù)學(xué)習(xí)的結(jié)果識(shí)別手寫字符[1]。</p><p> 由于漢字的基數(shù)大、寫法復(fù)雜、字體繁多,識(shí)別起來難點(diǎn)很大,所以漢字的識(shí)別被認(rèn)為是字符識(shí)別領(lǐng)域的最終目標(biāo),很多人投入了大量的精力,也取得了
27、很大的成就[2]。漢字的識(shí)別最開始始于1966年,IBM公司的Casey和Nagy首次發(fā)表了漢字識(shí)別的文章。國(guó)內(nèi)的漢字識(shí)別技術(shù)始于20世紀(jì)70年代,當(dāng)時(shí)是聯(lián)機(jī)手寫識(shí)別技術(shù),經(jīng)過長(zhǎng)時(shí)間的摸索之后,劉迎健等人于1988年提出了利用筆段作為基元來進(jìn)行聯(lián)機(jī)的手寫漢字識(shí)別,識(shí)別的漢字能夠達(dá)到6763-12000字,已經(jīng)具有了一定的實(shí)用價(jià)值?,F(xiàn)在的手寫識(shí)別技術(shù)較上個(gè)世紀(jì),已經(jīng)有了長(zhǎng)足的進(jìn)步,識(shí)別范圍能夠支持GB2312-80規(guī)定的6763個(gè)簡(jiǎn)體字,
28、對(duì)于書寫規(guī)范的漢字,識(shí)別率能夠達(dá)到95%以上[3,4]。</p><p> 1.4 課題研究?jī)?nèi)容</p><p> 本課題研究的是一個(gè)基于神經(jīng)網(wǎng)絡(luò)的手寫識(shí)別系統(tǒng)。系統(tǒng)由C++語(yǔ)言開發(fā)完成,負(fù)責(zé)神經(jīng)網(wǎng)絡(luò)前饋網(wǎng)絡(luò)、反饋神經(jīng)網(wǎng)絡(luò)、界面的設(shè)計(jì)、圖形的處理、圖形的識(shí)別、字庫(kù)管理程序的設(shè)計(jì),手寫識(shí)別系統(tǒng)包括神經(jīng)網(wǎng)絡(luò)算法的設(shè)計(jì)。</p><p> 系統(tǒng)研究的是基于神經(jīng)網(wǎng)絡(luò)的
29、手寫識(shí)別,包括數(shù)字與漢字的識(shí)別。數(shù)字與漢字的識(shí)別方法不一樣,數(shù)字比較簡(jiǎn)單,數(shù)量只有10個(gè),漢字較為復(fù)雜,數(shù)量大,所以針對(duì)這兩種模型采用了不同的思路。本文首先從理論上介紹了神經(jīng)網(wǎng)絡(luò)算法,然后介紹了數(shù)字的識(shí)別方法、漢字的手寫識(shí)別方法。</p><p> 數(shù)字的識(shí)別能夠識(shí)別兩種模式的數(shù)字,第1種是直接通過手寫工具寫在手寫板上的數(shù)字,通過神經(jīng)網(wǎng)絡(luò)的分類,得出書寫的結(jié)果;第2種是加載含有噪聲的數(shù)字,首先通過計(jì)算機(jī)圖形學(xué)的
30、知識(shí)降噪,然后通過神經(jīng)網(wǎng)絡(luò)分類得出結(jié)果。漢字的識(shí)別是將漢字拆分成元字根,本系統(tǒng)根據(jù)筆尖的走向,判斷出書寫的筆劃,然后通過筆劃來判斷漢字。</p><p> 1.5 論文的組織結(jié)構(gòu)</p><p> 本文共分為4章,按如下方式組織:</p><p> 第1章是全文的緒論部分,介紹了系統(tǒng)開發(fā)的背景,系統(tǒng)的研究的目的和意義,國(guó)內(nèi)外的研究現(xiàn)狀,課題的研究?jī)?nèi)容,系統(tǒng)的預(yù)
31、期效果和關(guān)鍵指標(biāo)以及本文的組織結(jié)構(gòu)。</p><p> 第2章是神經(jīng)網(wǎng)絡(luò)算法的介紹,這部分詳細(xì)介紹了神經(jīng)網(wǎng)絡(luò)算法,然后介紹了神經(jīng)網(wǎng)絡(luò)中的BP神經(jīng)網(wǎng)絡(luò)算法。</p><p> 第3章是手寫識(shí)別的基本過程,這部分介紹了神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)、對(duì)圖形的處理、特征向量的提取、以及漢字和數(shù)字的手寫識(shí)別過程,以及用戶界面的實(shí)現(xiàn)過程。</p><p> 第4章是介紹了系統(tǒng)的測(cè)試部分
32、,這部分主要介紹了手寫識(shí)別系統(tǒng)的三個(gè)部分的測(cè)試。</p><p> 最后是結(jié)論部分,對(duì)全文進(jìn)行了全面的總結(jié)。</p><p> 第2章 神經(jīng)網(wǎng)絡(luò)算法的原理</p><p> 人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)由大量的神經(jīng)元組成,結(jié)構(gòu)與腦神經(jīng) 組織相似,是對(duì)生物神經(jīng)元的模擬,能夠完成與生物神經(jīng)元網(wǎng)絡(luò)類似的功能。</p
33、><p> 2.1 神經(jīng)網(wǎng)絡(luò)的原理</p><p> 2.1.1 生物神經(jīng)元網(wǎng)絡(luò)</p><p> 人腦的神經(jīng)系統(tǒng)的基本組成單位是神經(jīng)細(xì)胞,人腦組織的神經(jīng)系統(tǒng)大約由1011個(gè)神經(jīng)元細(xì)胞組成,而每個(gè)神經(jīng)細(xì)胞大于與104個(gè)神經(jīng)細(xì)胞相連接,通過大量的神經(jīng)細(xì)胞的活動(dòng),完成人神經(jīng)系統(tǒng)的活動(dòng)。在神經(jīng)系統(tǒng)中,有的能力是先天就有的,比如呼吸,有的能力是后天訓(xùn)練完成的,比如說話。&
34、lt;/p><p> 神經(jīng)元細(xì)胞之間的連接通過突觸來完成,其中突觸分為軸突和樹突。神經(jīng)元細(xì)胞之間信息的傳遞通過生物電來完成,當(dāng)神經(jīng)元細(xì)胞產(chǎn)生一個(gè)興奮的信號(hào)時(shí),神經(jīng)細(xì)胞的膜電位就會(huì)產(chǎn)生變化,通過脈沖的方式傳遞給其他神經(jīng)元細(xì)胞。通過樹突->胞體->軸突->神經(jīng)連接->其他細(xì)胞,這樣就興奮信號(hào)傳遞了出去。</p><p> 2.1.2 人工神經(jīng)元網(wǎng)絡(luò)</p>
35、<p> 人工神經(jīng)元網(wǎng)絡(luò)模擬生物神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)見圖2.1。</p><p> 圖2.1 人工神經(jīng)元的基本模型</p><p> 圖2.1中,X表示神經(jīng)元的輸入,相當(dāng)于其他神經(jīng)元的輸出值,w表示權(quán)重(weight),f是一個(gè)非線性函數(shù),神經(jīng)元的動(dòng)作如下:</p><p> 當(dāng)f為閾值函數(shù)的時(shí)候,其輸出為:</p><p>
36、 為了使式子簡(jiǎn)約,先設(shè)閾值</p><p><b> 則</b></p><p><b> 或</b></p><p> 可以選取sgn函數(shù)作為閾值函數(shù)</p><p> 如果要求學(xué)習(xí)算法的輸出函數(shù)可微,可以選用sigmoid函數(shù),即:</p><p> sigmo
37、id函數(shù)的函數(shù)圖像見圖2.2。</p><p> 圖2.2 sigmoid函數(shù)</p><p> Sigmoid函數(shù)是無限次可微、連續(xù)、有界、關(guān)與原點(diǎn)對(duì)稱的函數(shù),抑制兩頭,對(duì)中間的細(xì)微變化敏感,使得神經(jīng)網(wǎng)絡(luò)對(duì)特征的識(shí)別度更好。</p><p> 2.2 神經(jīng)元學(xué)習(xí)算法</p><p> 2.2.1 前饋神經(jīng)網(wǎng)絡(luò)</p>
38、<p> 前饋神經(jīng)網(wǎng)絡(luò)是一個(gè)接受前一級(jí)輸入,并且輸出到下一級(jí)的結(jié)構(gòu),沒有反饋結(jié)構(gòu),每一個(gè)神經(jīng)元可以有多個(gè)輸入,但是只有一個(gè)輸出,每一個(gè)神經(jīng)元的輸出可以作為任意多個(gè)其他節(jié)點(diǎn)的輸入。前饋神經(jīng)網(wǎng)絡(luò)可以分成不同的層,第n層的輸入只與第n-1層的輸出有關(guān)。通常將所有的神經(jīng)元層分成三層,即:輸入層、輸出層、隱含層,輸入層即神經(jīng)元網(wǎng)絡(luò)的第一層,負(fù)責(zé)從外部接受輸入數(shù)據(jù),最后一層為輸出層,輸出整個(gè)神經(jīng)元網(wǎng)絡(luò)的結(jié)果,輸入層與輸出層之間的全部是隱
39、含層,隱含層的層數(shù)目可以大于等于1層。前饋神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖見圖2.3。</p><p> 圖 2.3 前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖</p><p><b> 2.2.2 感知機(jī)</b></p><p> 感知機(jī)是一種雙層的神經(jīng)元網(wǎng)絡(luò)模型,沒有輸出層,有輸入層,是一層計(jì)算單元。感知機(jī)學(xué)習(xí)的目的是將訓(xùn)練數(shù)據(jù)進(jìn)行超平面的線性劃分,感知機(jī)模型首先導(dǎo)
40、入了誤分類的損失函數(shù),然后利用梯度下降法對(duì)損失函數(shù)小化。</p><p><b> 感知機(jī)的模型如下:</b></p><p> 其中x為輸入向量,sgn是上面介紹過的符號(hào)函數(shù),是權(quán)值向量, 為偏置向量,要求出感知機(jī)的模型,只需要求出和即可。</p><p> 假設(shè)訓(xùn)練數(shù)據(jù)集是超平面線性可分的,感知機(jī)的目的就是求的一個(gè)合適的和,將訓(xùn)練集中
41、的正例和負(fù)例完全區(qū)分開來。</p><p> 選擇誤分類點(diǎn)到分類超平面S的總距離位損失函數(shù),即:</p><p> 其中,為輸入空間任意一點(diǎn),為的L2范數(shù)。</p><p> 對(duì)于誤分類點(diǎn)來說,當(dāng),=-1,當(dāng)時(shí),=1。故:</p><p> 所以誤分類點(diǎn)到分類超平面S的距離是:</p><p> 假設(shè)所有誤分
42、類點(diǎn)的集合為M,那么所有誤分類點(diǎn)到分類超平面S的距離是:</p><p> 那么最終的損失函數(shù)為:</p><p> 現(xiàn)在的問題就是選取最小的損失函數(shù)模型的和</p><p> 感知機(jī)求解算法:采用隨機(jī)梯度下降,首先任意選取一個(gè)超平面,,然后用梯度下降法不斷極小化(1)式子。極小化的過程中隨機(jī)一個(gè)誤差分類點(diǎn)進(jìn)行梯度下降。</p><p>
43、; 分別對(duì)(1)式中的 和求偏導(dǎo),即:</p><p> 隨機(jī)選取一個(gè)誤分類點(diǎn),對(duì)和,則有:</p><p><b> 其中,為步長(zhǎng)。</b></p><p> 然后不停地進(jìn)行梯度下降算法,直到訓(xùn)練集總沒有誤分類點(diǎn)為止。</p><p> 這種算法的思路是:當(dāng)一個(gè)點(diǎn)被誤分類的時(shí)候,就重新進(jìn)行梯度下降,調(diào)整和,使
44、得分類平面往誤分類的一側(cè)移動(dòng),減少該點(diǎn)與分類超平面的距離,直到該點(diǎn)被正確的分類,然后再次選取點(diǎn)重復(fù)上述方法,直到所有的點(diǎn)都被正確分類,那么就找到了正確的和。</p><p> 2.2.3 反向傳播算法</p><p> 感知機(jī)作為最簡(jiǎn)單的前向人工神經(jīng)網(wǎng)絡(luò)算法,雖然結(jié)構(gòu)簡(jiǎn)單,但是能解決復(fù)雜的問題,但是感知機(jī)的本質(zhì)缺陷是不能處理線性不可分問題。</p><p>
45、前饋神經(jīng)網(wǎng)絡(luò)中隱含層無法與外界相連,無法計(jì)算誤差,為了解決這一問題,提出了反向傳播網(wǎng)絡(luò)(BP,Back-Propogation)算法[6],算法主要思想為:首先通過前饋神經(jīng)網(wǎng)絡(luò)得出神經(jīng)網(wǎng)絡(luò)的值,然后計(jì)算該值與訓(xùn)練集中值的誤差,然后簡(jiǎn)介算出隱含層的誤差,然后調(diào)整參數(shù),再次計(jì)算誤差,直到誤差小到可以接受的范圍。</p><p> 在反向傳播算法中,通常采用梯度下降法來修正權(quán)值,從感知機(jī)的求解過程中,可知輸出函數(shù)要求
46、可微, 故通常采用sigmoid函數(shù)作為輸出函數(shù)。</p><p> 當(dāng)研究某一層時(shí),j表示該層的第j個(gè)神經(jīng)元,i表示前一層的第i個(gè)神經(jīng)元,k表示后一層的第k個(gè)神經(jīng)元,表示該層第j個(gè)神經(jīng)元的輸出,表示前一層第i個(gè)神經(jīng)元與本層第j個(gè)神經(jīng)元之間的權(quán)值。</p><p> 計(jì)算某一層的輸出值:</p><p> 對(duì)于輸出層來說,實(shí)際輸出值與理想輸出值之間存在誤差,誤
47、差為:</p><p> 其中為理想的輸出值,是實(shí)際輸出值。</p><p> 誤差E對(duì)權(quán)值求偏導(dǎo)數(shù),得:</p><p><b> 其中為局部梯度:</b></p><p> 采用梯度下降法對(duì)誤差進(jìn)行調(diào)整,得到每次的調(diào)整量為:</p><p> 如果節(jié)點(diǎn)j是輸出層,那么神經(jīng)元輸出值即為
48、,那么:</p><p> 如果節(jié)點(diǎn)j是隱含層,那么神經(jīng)元的輸出值需要用sigmoid函數(shù)處理,即:</p><p> 由于隱含層的每一個(gè)節(jié)點(diǎn)對(duì)后面的節(jié)點(diǎn)都由影響,可以得出:</p><p> 在反向傳播過程中,為了加快算法的收斂速度,會(huì)在權(quán)值修正量中加上前一次的權(quán)值修正量,即慣性項(xiàng):</p><p> 綜上所述,反向傳播算法步驟如下
49、:</p><p> ?。?)隨機(jī)初始權(quán)系數(shù)初始值。</p><p> ?。?)首先執(zhí)行神經(jīng)網(wǎng)絡(luò)的前向傳播過程,計(jì)算各層單元:</p><p> ?。?)然后計(jì)算輸出層的局部梯度:</p><p> ?。?)然后計(jì)算各個(gè)隱含層額局部梯度,方向從后向前。</p><p> ?。?)得出神經(jīng)元之間的權(quán)值修正量:</p
50、><p><b> (6)修改權(quán)值:</b></p><p> (7)重復(fù)2-6過程,直到算法收斂。</p><p> 采用反向傳播算法能有效解決隱含層的權(quán)值修正問題,通過不斷的計(jì)算輸出層的誤差,然后通過梯度下降法調(diào)整輸出層的前一層神經(jīng)元的權(quán)值,然后再循環(huán)調(diào)整所有的隱含層的權(quán)值,直到整個(gè)算法收斂。</p><p>
51、但是采用反向傳播算法有可能會(huì)陷入到局部最小點(diǎn),而不是收斂到全局最小點(diǎn),因?yàn)樗惴ú捎玫氖翘荻认陆邓惴▉砬蠼夥蔷€性函數(shù)的極值,梯度下降法不具有全局觀念。</p><p> 反向傳播算法中有兩個(gè)重要的參數(shù),和,即步長(zhǎng)和慣性系數(shù)。步長(zhǎng)直接影響到算法的收斂性,如果該值較大,沿著梯度下降的幅度大,但是對(duì)極小值出的處理不好,如果該值較小,沿著梯度下降的幅度小,但是收斂速度慢,影響算法的效率。慣性項(xiàng)系數(shù)影響收斂速度,可以在0.
52、9-1之間選擇。</p><p> 在實(shí)際應(yīng)用反向傳播算法的過程中,還需要好注意一些問題:</p><p> (1)樣本的處理,由于傳入神經(jīng)元的數(shù)據(jù)可能會(huì)是各種各樣的值,由于采用sigmoid函數(shù),所以數(shù)據(jù)需要進(jìn)行歸一化處理,可以歸一化到(0,1)或者(-1,1)之間。針對(duì)樣本的輸出,從sigmoid函數(shù)可以得知,如果要輸出0,1,那么值需要是無重大或者無窮小,故需要進(jìn)行處理,可以認(rèn)為
53、輸入大于0.5即為1,小于0.5即為0。</p><p> ?。?)網(wǎng)絡(luò)結(jié)構(gòu)的選擇。反饋神經(jīng)網(wǎng)絡(luò)的隱含層層數(shù)和神經(jīng)元數(shù)目的確定,對(duì)算法有著至關(guān)重要的作用,它們決定了神經(jīng)網(wǎng)絡(luò)的規(guī)模,如果規(guī)模大,計(jì)算量就會(huì)大,而且可能會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)擬合的函數(shù)過度追求擬合擬合效果,反而失去了原本的特性,即過擬合,如果規(guī)模小,計(jì)算量小,但是可能會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)擬合的函數(shù)不能很好的擬合所有的數(shù)據(jù),即欠擬合。</p><p
54、> (3)初始權(quán)值、閾值的選擇。初始值對(duì)學(xué)習(xí)結(jié)果也是有影響的,選擇一個(gè)適當(dāng)?shù)某跏贾的鼙M快收斂,而且保證擬合的效果好。</p><p> ?。?)批量學(xué)習(xí)和增量學(xué)習(xí)。批量學(xué)習(xí)適用于離線學(xué)習(xí),即一次性輸入所有的學(xué)習(xí)樣本,然后去學(xué)習(xí)。批量學(xué)習(xí)的優(yōu)點(diǎn)是學(xué)習(xí)效果比較穩(wěn)定,擬合出的函數(shù)性能比較好,但是缺點(diǎn)是一次需要所有的學(xué)習(xí)樣本;增量學(xué)習(xí)適用于在線學(xué)習(xí),即動(dòng)態(tài)獲取學(xué)習(xí)樣本,然后輸入神經(jīng)網(wǎng)絡(luò)進(jìn)行學(xué)習(xí),然后再次獲取學(xué)習(xí)樣
55、本,再次學(xué)習(xí)。這種學(xué)習(xí)方法對(duì)噪聲比較敏感,不適合劇烈變化的輸入模式,但是可以在原有網(wǎng)絡(luò)的基礎(chǔ)上直接學(xué)習(xí)。</p><p> 2.2.4 神經(jīng)網(wǎng)絡(luò)在模式識(shí)別上面的優(yōu)勢(shì)</p><p> 1、神經(jīng)網(wǎng)絡(luò)能夠分布式的存儲(chǔ)信息</p><p> 神經(jīng)網(wǎng)絡(luò)是利用多個(gè)神經(jīng)元之間的連接以及各個(gè)神經(jīng)元之間的權(quán)值來表示信息,每個(gè)神經(jīng)元都能夠單獨(dú)的存儲(chǔ)信息,所以它能夠分布式存儲(chǔ)信息
56、,而且如果網(wǎng)絡(luò)部分受到損害,也能夠恢復(fù)原來信息。</p><p> 2、神經(jīng)網(wǎng)絡(luò)能夠并行處理信息</p><p> 神經(jīng)網(wǎng)絡(luò)中的每個(gè)神經(jīng)元都可以接受信息,然后獨(dú)立運(yùn)算和處理,然后將運(yùn)算的結(jié)果輸出來,這些步驟都是可以并行的。</p><p> 3、神經(jīng)網(wǎng)絡(luò)能夠自動(dòng)學(xué)習(xí)</p><p> 神經(jīng)網(wǎng)絡(luò)模擬了生物神經(jīng)系統(tǒng)的結(jié)構(gòu),能夠根據(jù)外界的環(huán)
57、境來調(diào)節(jié)內(nèi)部的信息,從而去適應(yīng)外界的環(huán)境,通過對(duì)參數(shù)分類,使得網(wǎng)絡(luò)收斂來符合當(dāng)前的環(huán)境。</p><p><b> 2.3 本章小結(jié)</b></p><p> 本章詳細(xì)介紹了神經(jīng)網(wǎng)絡(luò)算法,以及其基本組成部分:感知機(jī)、前饋神經(jīng)網(wǎng)絡(luò)、反向神經(jīng)網(wǎng)絡(luò)。利用嚴(yán)格的公式論證了該算法,并且說明了算法的一些特點(diǎn)以及注意事項(xiàng),在最后講述了神經(jīng)網(wǎng)絡(luò)在模式識(shí)別中的優(yōu)勢(shì)。</p&g
58、t;<p> 第3章 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)</p><p> 本章首先介紹了神經(jīng)算法的實(shí)現(xiàn),接著詳細(xì)介紹了手寫數(shù)字的實(shí)現(xiàn)、手寫漢字的實(shí)現(xiàn),最后介紹了UI界面的實(shí)現(xiàn)。</p><p> 3.1 神經(jīng)網(wǎng)絡(luò)算法的實(shí)現(xiàn)</p><p> 3.1.1 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)</p><p> 一個(gè)完整的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)包括:輸入層、輸出層、隱含層
59、、隱含層權(quán)重、輸出層權(quán)重、輸出層誤差、隱含層誤差等結(jié)構(gòu)。具體的數(shù)據(jù)結(jié)構(gòu)如下:</p><p> double * pInputLayer; // 輸出層數(shù)據(jù)</p><p> double* pHiddenLayer; // 隱含層數(shù)據(jù)</p><p> double* pOutputLayer; // 輸出層數(shù)據(jù)</p>&l
60、t;p> double** pWeightHidden; // 隱含層權(quán)重</p><p> double** pWeightOutput; // 輸出層權(quán)重</p><p> double* pErrOutput; // 輸出層誤差</p><p> double* pErrHidden; // 隱含層誤差</p&g
61、t;<p> double** pLastChangeHidden; // 上次隱含層改變值</p><p> double** pLastChangeOutput; // 上次輸出層改變值</p><p> bool bRegression; // 是否回歸</p><p> double dRate1;
62、 // 學(xué)習(xí)率</p><p> double dRate2; // 慣性項(xiàng)系數(shù)</p><p> int iInputCount; // 輸入層神經(jīng)元個(gè)數(shù)</p><p> int iHiddenCount; // 隱含層神經(jīng)元個(gè)數(shù)</p><p> int iOuputCount; //
63、輸出層神經(jīng)元個(gè)數(shù)</p><p> 3.1.2 算法的結(jié)構(gòu)</p><p> 用代碼實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)算法,主要步驟分為五個(gè)部分,初始化神經(jīng)網(wǎng)絡(luò)、加載神經(jīng)網(wǎng)絡(luò)參數(shù)、前向神經(jīng)網(wǎng)絡(luò)、反向神經(jīng)網(wǎng)絡(luò)、學(xué)習(xí)過程。</p><p><b> 1、初始化神經(jīng)網(wǎng)絡(luò)</b></p><p> 首先通過Initializer函數(shù)傳入神經(jīng)網(wǎng)
64、絡(luò)需要的各個(gè)參數(shù),然后通過這些參數(shù),給神經(jīng)網(wǎng)絡(luò)分配內(nèi)存。</p><p> 2、加載神經(jīng)網(wǎng)絡(luò)參數(shù)</p><p> 由于學(xué)習(xí)樣本的龐大,每次學(xué)習(xí)的耗時(shí)很長(zhǎng),所以預(yù)先將已經(jīng)學(xué)習(xí)好的參數(shù)保存在文件當(dāng)中,當(dāng)初始化好神經(jīng)網(wǎng)絡(luò)之后,就開始加載神經(jīng)網(wǎng)絡(luò)里面的參數(shù)。</p><p><b> 3、前向神經(jīng)網(wǎng)絡(luò)</b></p><p&
65、gt;<b> 算法的步驟如下:</b></p><p> (1)將訓(xùn)練的input數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)的輸入層。</p><p> ?。?)將輸入層的偏移置為1.0。</p><p> ?。?)計(jì)算隱含層的每一個(gè)神經(jīng)元的值,然后通過sigmoid函數(shù)將計(jì)算得的值賦值給當(dāng)前神經(jīng)元。</p><p> ?。?)將隱含層的
66、偏移置為1.0。</p><p> ?。?)計(jì)算輸出層的每一個(gè)神經(jīng)元的值,根據(jù)是否回歸來選擇使用采用sigmoid函數(shù)來處理計(jì)算所得值。</p><p><b> 4、反向神經(jīng)網(wǎng)絡(luò)</b></p><p><b> 算法的步驟如下:</b></p><p> ?。?)計(jì)算輸出層的誤差。</
67、p><p> (2)根據(jù)1中計(jì)算得誤差,計(jì)算輸出層的局部梯度。</p><p> ?。?)根據(jù)局部梯度與上次輸出層的改變值、學(xué)習(xí)率等參數(shù)改變輸出層權(quán)重。</p><p> (4)計(jì)算隱含層的誤差。</p><p> (5)根據(jù)4中計(jì)算得誤差,計(jì)算隱含層的局部梯度。</p><p> ?。?)根據(jù)隱含層的局部梯度與上次
68、隱含層的改變值、學(xué)習(xí)率等參數(shù)改變隱含層權(quán)重。</p><p><b> 5、學(xué)習(xí)過程</b></p><p><b> 算法的步驟如下:</b></p><p> (1)檢查參數(shù)有效性。</p><p> ?。?)將輸入的input數(shù)據(jù)順序打亂。</p><p> ?。?/p>
69、3)對(duì)input數(shù)據(jù)的每一組訓(xùn)練數(shù)據(jù),作如下訓(xùn)練:</p><p> ?。?)前向網(wǎng)絡(luò)計(jì)算隱含層與輸出層神經(jīng)元的值。</p><p> ?。?)反饋網(wǎng)絡(luò)調(diào)整隱含層與輸出層神經(jīng)元的值以及權(quán)值。</p><p> 3.2 神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字</p><p> 在識(shí)別手寫數(shù)字的過程中,會(huì)碰到很多種情況,使用不同的方法,會(huì)得到不同的結(jié)果,具體過
70、程見圖3.1。</p><p> 圖3.1 識(shí)別數(shù)字的步驟</p><p> 3.2.1 手寫數(shù)字的常規(guī)預(yù)處理方法</p><p> 在利用神經(jīng)網(wǎng)絡(luò)識(shí)別手寫數(shù)字的過程中,對(duì)神經(jīng)網(wǎng)絡(luò)的輸入數(shù)據(jù)有兩種表現(xiàn)方式,第1種是將數(shù)字圖像經(jīng)過數(shù)值化后直接傳入神經(jīng)網(wǎng)絡(luò)進(jìn)行學(xué)習(xí),第2種是將數(shù)字圖像經(jīng)過數(shù)值化后,再經(jīng)過預(yù)處理,再傳入神經(jīng)網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)。第1種方法未經(jīng)過處理,在某些特
71、定的環(huán)境會(huì)獲得更好的效果,但是會(huì)使得分類器的復(fù)雜程度大大增加。因此,對(duì)原本的樣本的預(yù)處理,已經(jīng)成為手寫數(shù)字識(shí)別的一個(gè)重要途徑。</p><p> 預(yù)處理的第一步是將數(shù)字圖像轉(zhuǎn)換成m*n的一個(gè)像素矩陣,然后經(jīng)過灰度化、二值化,然后經(jīng)過一些降噪算法,如中值濾波算法,去掉圖像的噪聲,然后再經(jīng)過梯度銳化算法銳化邊緣,最后經(jīng)過細(xì)化、平滑、規(guī)格化等處理,得到比較好的輸入數(shù)據(jù)。</p><p> 最
72、后這是從樣本中提取出特征,來構(gòu)成輸入數(shù)據(jù),對(duì)于數(shù)字常見的方法有提取數(shù)字寬度、長(zhǎng)度、粗細(xì)等特征。</p><p> 3.2.2 圖像的灰度化</p><p> 圖像的灰度化指去掉圖像的色彩信息,只保留圖像的亮度信息。一副圖像的一個(gè)像素點(diǎn)由RGB三種顏色組成,灰度圖像不再關(guān)心RGB色彩,只關(guān)心亮度。</p><p> 在識(shí)別過程當(dāng)中,人們只關(guān)心圖像的形狀,不關(guān)心色
73、彩,相反,色彩由于顏色過于豐富,反而會(huì)影響識(shí)別,所以獲得像素矩陣后要將圖像灰度化。</p><p> 圖像的灰度化一般有4中方法,即分量法、最大值法、平均值法、加權(quán)平均法。本文中采用平均值法,即使得圖像的RGB三個(gè)分量的值相等。通過公式:</p><p> 這樣使得RGB三個(gè)分量的值等于三個(gè)分量的平均值,就可以得到灰度圖像。</p><p> 灰度圖像是很多圖
74、形處理的第一步,經(jīng)過圖像的灰度化之后,就可以進(jìn)行其他的處理,所以,圖像的灰度化是很重要的一個(gè)步驟。</p><p> 3.2.3 圖像的二值化</p><p> 圖像的二值化是指把圖像中的所有像素根據(jù)一定的方法,劃分成黑白兩種顏色。</p><p> 經(jīng)過二值化后的圖像,全部的像素都是0或者255,圖像會(huì)顯示出很明顯的黑白效果。這樣就不再和更多的像素有關(guān)。這樣
75、一個(gè)像素點(diǎn)可以壓縮成0和1兩個(gè)數(shù),利于處理和節(jié)省空間。</p><p> 二值化法的基本公式是:</p><p> 公式中f(i,j)為圖像灰度化后的像素值,g(i,j)為圖像二值化后的值,T為閾值。從式子中可以看出,T的值直接關(guān)系到二值化的效果,根據(jù)T值得不同選取方法,可以把二值化算法分為三種,即:整體閾值法、局部閾值法、動(dòng)態(tài)閾值法。</p><p> 整體
76、閾值法,即整張圖像的閾值都是一個(gè)值。但是這個(gè)閾值需要根據(jù)具體的圖像來確定,曝光度高的圖像,閾值需要小一點(diǎn),曝光度低的圖像,閾值需要大一點(diǎn)。整體閾值法的閾值一旦確定就不能更改,不能根據(jù)特定的區(qū)域來更改閾值,但是整體閾值法的算法簡(jiǎn)單,運(yùn)算速度快,適用于干擾小的圖像。這個(gè)閾值的確定方法也比較簡(jiǎn)單,通常就計(jì)算整張圖片的亮度值,然后選取中間值作為二值化的閾值。</p><p> 局部閾值法,即根據(jù)不同的區(qū)域來確定不同的閾
77、值。當(dāng)一張圖像的曝光度不均勻時(shí),采用整體閾值法會(huì)得到不理想的二值化圖像,如果采用局部閾值法,可以根據(jù)不同區(qū)域的曝光度來確定閾值,得到一張效果良好的二值化圖像。但是采用局部閾值法,計(jì)算量大一些,速度也會(huì)慢一些。</p><p> 動(dòng)態(tài)閾值法,即根據(jù)每個(gè)像素點(diǎn)的像素值和位置來確定不同的閾值。這種方法不僅考慮了單個(gè)像素點(diǎn)的特點(diǎn),還考慮了該像素點(diǎn)周圍的像素點(diǎn)的特點(diǎn),能夠很好的突出圖像的邊緣。但是在手寫數(shù)字的識(shí)別過程中,
78、數(shù)字圖像與背景的區(qū)別較大,不需要采用這種方法來二值化,而且會(huì)降低圖像處理的速度。</p><p> 3.2.4 中值濾波</p><p> 圖像的噪聲指影響人們接受圖像信息的因素。噪聲在理論上是不能被預(yù)測(cè)的,只能通過概率的方法來統(tǒng)計(jì)隨機(jī)誤差。</p><p> 如果圖像中存在噪聲,會(huì)大大影響字符的切分、特征向量的提取等。因此圖像的降噪將直接影響到數(shù)字識(shí)別的效果
79、。</p><p> 中值濾波是一種非線性的圖像平滑方法,能夠根據(jù)圖像的不同去平滑圖像,而且不會(huì)影響圖像的邊緣,具體方法可定義為:</p><p> 式子中,g (x, y)和f (x-i, y-i)分別為輸出和輸入像素值,W為模版窗口,可以選擇線性、方形、十字形、圓形、菱形等。</p><p> 取出模版窗口W中的所有像素值,然后排序,選擇這些像素值的中間值
80、作為g(x,y)的像素值。</p><p> 3.2.5 去掉離散點(diǎn)</p><p> 在圖像中可能會(huì)存在很多孤立的點(diǎn)或者點(diǎn)區(qū)域,這些點(diǎn)的面積往往比較小,通過中值濾波等濾波算法可能不會(huì)被去掉,如果不去掉就會(huì)影響圖像的進(jìn)一步處理。</p><p> 數(shù)字圖形往往都是一個(gè)很大的聯(lián)合的整體,即相連的非空白像素點(diǎn)數(shù)目很大,而往往與孤立的離散點(diǎn)相連的非空白點(diǎn)數(shù)目小,因此
81、可以根據(jù)這個(gè)去掉孤立的點(diǎn)區(qū)域。</p><p><b> 算法的步驟如下:</b></p><p> ?。?)掃描整個(gè)圖像,找到非空白點(diǎn)。</p><p> (2)將該空白點(diǎn)進(jìn)隊(duì)列。</p><p> (3)從隊(duì)列中取出第一個(gè)點(diǎn),然后分別求出與之相連的上下左右四個(gè)點(diǎn),判斷該點(diǎn)是否在圖像區(qū)域內(nèi)并且沒有被搜索過。<
82、;/p><p> ?。?)如果滿足3中的要求,就將該點(diǎn)放入隊(duì)列,并且標(biāo)記該點(diǎn)已經(jīng)被檢索。</p><p> ?。?)循環(huán)2-4過程,直到隊(duì)列為空或者被標(biāo)記的點(diǎn)的個(gè)數(shù)超過了一個(gè)閾值。</p><p> ?。?)判斷被標(biāo)記的點(diǎn)的個(gè)數(shù)是否超過了閾值,如果沒有超過,就將這些被標(biāo)記的點(diǎn)置為空白點(diǎn)。</p><p> ?。?)循環(huán)1-6過程,直到掃描完了所有
83、的點(diǎn)。</p><p> 之所以采用這種算法,原因是圖像的不同,有的圖像的離散點(diǎn)區(qū)域比較大,采用其他的算法不能快速的將這些離散的點(diǎn)清理掉,這時(shí)候采用這種算法,只需要判斷閾值,就能快速將連續(xù)點(diǎn)小于這個(gè)閾值的離散點(diǎn)去掉。但是這個(gè)算法也存在缺點(diǎn),如果是噪聲點(diǎn)貼近數(shù)字圖像,算法則不能判斷該點(diǎn)為噪聲點(diǎn),也就不能去掉了,所以需要與其他算法配合使用才能更好的去掉噪聲。</p><p> 3.2.6
84、圖像銳化</p><p> 圖像銳化的主要目是使邊緣從圖像背景中更容易區(qū)分開來,使物體能夠更加鮮明的從圖像中區(qū)分開來,有助于后序的分割、特征提取等操作。</p><p> 圖像的模糊實(shí)際上是受到平均或者通過積分運(yùn)算造成的,對(duì)圖像進(jìn)行微分運(yùn)算,可以使圖像清晰化。</p><p> 本文中主要采用梯度銳化算法來銳化圖像的邊緣,首先計(jì)算各點(diǎn)的梯度值,定義在f (x,
85、y)在點(diǎn)(x,y)處的梯度是一個(gè)矢量,定義為:</p><p> 其中,梯度的幅度G[f (x,y)]可以由以下公式算出:</p><p> 在f (x, y)在其最大變化率方向上增加的距離,叫做梯度的數(shù)值,因此,上式可以寫作:</p><p> 當(dāng)采用這種算法的時(shí)候,圖像的最后一行、最后一列無法計(jì)算梯度,所以可以采用前一行或者前一列的梯度值來代替。</
86、p><p><b> 算法的步驟如下:</b></p><p> ?。?)將圖像的最后一行像素點(diǎn)置為0xFF。</p><p> ?。?)對(duì)除去最后一行的圖像中的每一個(gè)像素點(diǎn)循環(huán)。</p><p> ?。?)取出當(dāng)前像素點(diǎn)值(a)、當(dāng)前像素點(diǎn)的左邊一個(gè)像素點(diǎn)(b)、當(dāng)前像素點(diǎn)的下邊一個(gè)像素點(diǎn)(c)。</p>
87、<p> (4)計(jì)算梯度值abs(a-b) + abs(a-c)。</p><p> (5)判斷梯度值是否大于一個(gè)閾值,如果大于該閾值,就將當(dāng)前像素點(diǎn)的值設(shè)置為梯度值。</p><p> 物體與物體、背景與背景之間的梯度變化一般都很小,只有在物體的邊緣梯度變化才會(huì)比較大,也就是物體和背景交叉的部分。當(dāng)某點(diǎn)的梯度值大于一個(gè)閾值的時(shí)候,就認(rèn)為該點(diǎn)在物體和背景的交叉邊緣,處理方法
88、是:加上一個(gè)特定的值C,使得邊緣變亮;如果梯度值小于這個(gè)閾值,就認(rèn)為在同一個(gè)環(huán)境下,就不去改變?cè)擖c(diǎn)的像素值。當(dāng)圖像處理完時(shí),物體和背景的邊緣就被增量了,同時(shí)也不影響圖像的其他點(diǎn)。</p><p> 3.2.7 數(shù)字的切分</p><p> 經(jīng)過上述圖像處理的算法之后,數(shù)字圖像就比較好的被處理了出來。人們識(shí)別數(shù)字只關(guān)心數(shù)字部分,其他部分是不關(guān)心的,所以需要將數(shù)字部分從數(shù)字圖像中區(qū)分開來。
89、</p><p> 經(jīng)過切分后的數(shù)字,去掉了部分背景,使得切分后的圖像剛好包含了整個(gè)數(shù)字,大大減少了對(duì)以后的圖像分析、處理所需要的數(shù)據(jù)量。</p><p> 算法的主要步驟如下:</p><p> ?。?)掃描整個(gè)圖像。</p><p> (2)當(dāng)循環(huán)到一個(gè)沒有被掃描過的黑色點(diǎn)時(shí),就將該點(diǎn)放入一個(gè)隊(duì)列。</p><p
90、> (3)從隊(duì)列中取出一個(gè)點(diǎn),然后計(jì)算該點(diǎn)的上下左右四個(gè)方向的點(diǎn),判斷這些點(diǎn)是否在圖像內(nèi)以及是否沒有被掃描過。</p><p> ?。?)如果滿足3中的條件,就將點(diǎn)放入隊(duì)列中,同時(shí)用該點(diǎn)的坐標(biāo)值更新區(qū)域的位置值(left、right、top、bottom)。</p><p> ?。?)循環(huán)2-4,直到隊(duì)列為空。</p><p> ?。?)將獲得的區(qū)域的位置值
91、放入到一個(gè)向量中,同時(shí)循環(huán)1-6,直到掃描完整個(gè)圖像。</p><p> 最終切分的數(shù)字圖像的區(qū)域就在(6)中的區(qū)域位置向量中了。</p><p> 3.2.8 數(shù)字的歸一化</p><p> 經(jīng)過數(shù)字的切分之后,數(shù)字圖像就從背景中分離了出來,但是數(shù)字之間彼此的大小都不一樣,但是識(shí)別要求所有的數(shù)據(jù)都是一樣的尺寸,所以需要對(duì)數(shù)字進(jìn)行歸一化處理。</p>
92、;<p> 歸一化算法一般有兩種,即線性歸一化和非線性歸一化。線性歸一化算法比較簡(jiǎn)單,即對(duì)像素坐標(biāo)進(jìn)行線性的變換,然后把原來的字符映射到規(guī)定的區(qū)域內(nèi)。首先按照?qǐng)D像現(xiàn)在的大小和要變換的大小求出變換系數(shù),然后用插值的方法把原來的像素點(diǎn)映射到歸一化的區(qū)域內(nèi)。需要注意的是,數(shù)字圖像有的長(zhǎng)有的寬,需要根據(jù)不同的長(zhǎng)和寬計(jì)算變換系數(shù)。非線性歸一化算法會(huì)考慮到原有圖像的形狀等特點(diǎn),利用這些特點(diǎn)進(jìn)行非線性的變換,這樣歸一化后的圖像會(huì)最大化
93、的保留以前圖像的特點(diǎn)。</p><p> 本文中采用的為線性歸一化算法,算法思路如下:</p><p> ?。?)獲取切分后的數(shù)字區(qū)域位置(left,right,top,bottom)。</p><p> (2)根據(jù)1中所得位置計(jì)算區(qū)域的width與height,如果width大于height,那么則按照width擴(kuò)展,反之,根據(jù)height擴(kuò)展。</p&
94、gt;<p> ?。?)計(jì)算原圖像與變換后的圖像的變換系數(shù)。</p><p> ?。?)對(duì)數(shù)字區(qū)域中的每一個(gè)像素循環(huán),如果該像素不為空白點(diǎn),那么根據(jù)變換系數(shù)以及拓展選項(xiàng)計(jì)算在變換后的坐標(biāo),然后將該點(diǎn)的值置為非空白點(diǎn)。</p><p> 3.2.9 特征提取</p><p> 特征提取是整個(gè)字符識(shí)別系統(tǒng)的關(guān)鍵,識(shí)別算法是根據(jù)選取特征的種類來進(jìn)行選擇的
95、。系統(tǒng)識(shí)別率高低的關(guān)在是:提取的特征是否穩(wěn)定,是否代表一類字符的特點(diǎn)。</p><p> 針對(duì)數(shù)字的特征提取,可以采用比較簡(jiǎn)單的方法,掃描得到的整個(gè)圖像,當(dāng)碰到黑色點(diǎn)時(shí),就提取出1,當(dāng)碰到白色點(diǎn)時(shí),就提提取出0。當(dāng)掃描完整個(gè)圖像后,就得到了一個(gè)與圖像大小一樣的特征向量矩陣。這種方法很簡(jiǎn)單,運(yùn)算速度快,但是適應(yīng)性不強(qiáng)。針對(duì)BP神經(jīng)網(wǎng)絡(luò)的特點(diǎn),可以使神經(jīng)網(wǎng)絡(luò)很快收斂,如果加大訓(xùn)練樣本的數(shù)目,可以增強(qiáng)適應(yīng)性。<
96、/p><p> 3.2.10 數(shù)字識(shí)別過程</p><p> 首先從圖像中獲取特征向量,得到訓(xùn)練樣本,然后將特征向量輸入到神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,經(jīng)過一定數(shù)量的訓(xùn)練之后,就可以用該神經(jīng)網(wǎng)絡(luò)去識(shí)別數(shù)字了。數(shù)字識(shí)別的過程見表3.1。</p><p> 表3.1 數(shù)字識(shí)別過程表</p><p> 3.2.11 神經(jīng)元規(guī)模的確定</p>
97、<p> 1、輸入層與輸出層神經(jīng)元個(gè)數(shù)的確定</p><p> 輸入層和輸出層的神經(jīng)元個(gè)數(shù)應(yīng)該和具體的應(yīng)用環(huán)境有關(guān)。輸入層的神經(jīng)元數(shù)目和特征矩陣有關(guān),在本文中,采用的特征矩陣為20*20,所以輸入的神經(jīng)元數(shù)目為400個(gè)。輸出層神經(jīng)元的數(shù)目和輸出規(guī)模有關(guān),由于在數(shù)字識(shí)別中,只有0-9這10個(gè)數(shù)字,所以輸出層神經(jīng)元數(shù)目為10。同時(shí)規(guī)定,當(dāng)?shù)趲讉€(gè)神經(jīng)元輸出1時(shí),匹配的就是幾,例如第4個(gè)神經(jīng)元輸出1,其他
98、輸出0,那么匹配的數(shù)字就是4。</p><p> 2、隱含層神經(jīng)元個(gè)數(shù)的確定</p><p> 隱含層神經(jīng)元的個(gè)數(shù)關(guān)系到神經(jīng)網(wǎng)絡(luò)的性能,取在合適的數(shù)量能大大提升性能,如果數(shù)目過大,會(huì)出現(xiàn)過擬合情況,如果數(shù)目過小,會(huì)出現(xiàn)欠擬合情況。目前還沒有一種比較科學(xué)的方法來確定隱含層神經(jīng)元個(gè)數(shù)的方法,大多是通過經(jīng)驗(yàn)以及嘗試得出數(shù)目。事實(shí)上,通過各種公式計(jì)算出來的隱含層神經(jīng)元個(gè)數(shù)不一樣,性能也相差很多
99、倍。</p><p> 3、隱含層層數(shù)的確定。</p><p> 增加隱含層層數(shù),可以提高神經(jīng)網(wǎng)絡(luò)的精度,也可以降低整個(gè)網(wǎng)絡(luò)的誤差,同時(shí)也會(huì)增加網(wǎng)絡(luò)的復(fù)雜程度,影響網(wǎng)絡(luò)的性能,而且有可能會(huì)出現(xiàn)過擬合的情況。</p><p> 已經(jīng)有定理證明:若輸入層和輸出層采用線性轉(zhuǎn)換函數(shù),隱層采用Sigmoid轉(zhuǎn)換函數(shù),則含一個(gè)隱層的MLP網(wǎng)絡(luò)能夠以任意精度逼近任何有理函數(shù)
100、[6]。根據(jù)這個(gè)理論,可以只設(shè)計(jì)包含一個(gè)隱含層的神經(jīng)元網(wǎng)絡(luò),通過適當(dāng)控制該隱含層神經(jīng)元,就可以達(dá)到多層隱含層的神經(jīng)網(wǎng)絡(luò)的效果。</p><p> 3.3 神經(jīng)網(wǎng)絡(luò)識(shí)別漢字</p><p> 相比數(shù)字,漢字的識(shí)別就復(fù)雜了不少,目前漢字的識(shí)別被認(rèn)為是最困難的模式識(shí)別問題之一。漢字是一種特殊模式的幾何,包括的種類多、結(jié)構(gòu)復(fù)雜、而且書寫的形勢(shì)多種多樣,加上其他干擾因素,都使得漢字的識(shí)別很困難。
101、漢字的具體識(shí)別過程見圖3.2。</p><p> 圖3.2 識(shí)別漢字的步驟</p><p> 3.3.1 筆畫的預(yù)處理</p><p> 漢字的識(shí)別可以拆分成筆畫,漢字的筆畫有多種,本文將漢字的筆畫基本分為以下16種,具體筆畫見表3.2。</p><p> 由于筆畫是直接書寫在面板上的,面板上除了白色背景就是筆畫了,所以預(yù)處理也會(huì)相對(duì)
102、比較簡(jiǎn)單。</p><p> 本文中把漢字的筆劃分成3類,第1類是除去點(diǎn)的15種筆劃,這15種筆畫的處理方式就是直接用神經(jīng)網(wǎng)絡(luò)來識(shí)別。第2類是點(diǎn)筆劃,由于點(diǎn)的形狀不確定,大小比較小,如果采用神經(jīng)網(wǎng)絡(luò)來識(shí)別,有很大的幾率會(huì)識(shí)別成其他筆畫或者識(shí)別不出來,所以可以用一個(gè)閾值來確定是否為點(diǎn)筆劃,當(dāng)獲得的筆畫大小小于一個(gè)值時(shí),就判斷為點(diǎn)筆劃。第3類是類似于第1類的筆畫,比如豎鉤與豎、撇折與豎折,比較類似,可以把這幾種筆畫
103、與第1類的進(jìn)行融合,然后都采用神經(jīng)網(wǎng)絡(luò)來識(shí)別筆畫,這樣既能保護(hù)輸出層的神經(jīng)元數(shù)目少、也能減少工作的復(fù)雜度,這對(duì)于漢字的識(shí)別是有較大的益處的。</p><p> 表3.2 漢字筆畫表</p><p> 3.3.2 圖像的處理</p><p><b> 1、圖像的二值化</b></p><p> 針對(duì)漢字識(shí)別的二值化
104、,就簡(jiǎn)單很多,就是把背景點(diǎn)的其他點(diǎn)標(biāo)記為黑點(diǎn),背景點(diǎn)標(biāo)記為白點(diǎn)。該本文中,筆畫采用的顏色為綠色(RGB(0,0xFF,0)),所以將非綠色點(diǎn)標(biāo)記為白色,綠色點(diǎn)標(biāo)記為黑色,就完成了二值化過程。</p><p><b> 2、圖像的歸一化</b></p><p> 在書寫漢字的過程當(dāng)中,每次書寫一次的時(shí)候,就需要提取書寫的信息,故每一次歸一化的圖像都是一次書寫的圖像。
105、歸一化的方法也比較簡(jiǎn)單,即對(duì)像素坐標(biāo)進(jìn)行線性的變換,然后把原來的字符映射到規(guī)定的區(qū)域內(nèi)。首先按照?qǐng)D像現(xiàn)在的大小和要變換的大小求出變換系數(shù),然后用插值的方法把原來的像素點(diǎn)映射到歸一化的區(qū)域內(nèi)。</p><p><b> 3、特征向量的提取</b></p><p> 經(jīng)過圖像的歸一化后,得到一個(gè)m*n的像素矩陣,由于漢字的識(shí)別只關(guān)心形狀,不關(guān)心顏色,所以首先掃描整個(gè)圖
106、像,如果碰到一個(gè)黑色像素點(diǎn),把一個(gè)黑色像素點(diǎn)轉(zhuǎn)換成1,碰到一個(gè)白色像素點(diǎn),就轉(zhuǎn)換成0,當(dāng)整張圖像轉(zhuǎn)換完成后,就得到了一個(gè)特征矩陣。</p><p> 3.3.3 神經(jīng)網(wǎng)絡(luò)規(guī)模的確定</p><p> 1、輸入層與輸出層神經(jīng)元數(shù)目的確定</p><p> 在本文中,輸入的特征矩陣有20*20,所以輸入層神經(jīng)元數(shù)目為400,輸出層的輸出為16個(gè)筆畫,故輸出層神經(jīng)元
107、數(shù)目為16,當(dāng)輸出一個(gè)特定的筆畫的時(shí)候,對(duì)應(yīng)的神經(jīng)元輸出為1,例如當(dāng)?shù)?個(gè)神經(jīng)元輸出為1時(shí),輸出的筆畫為捺。</p><p> 2、隱含層神經(jīng)元數(shù)目的確定</p><p> 該本文中,輸入層神經(jīng)元數(shù)目為400,輸出層神經(jīng)元數(shù)目為16,訓(xùn)練數(shù)據(jù)在500左右,經(jīng)過多次測(cè)試,確定隱含層神經(jīng)元數(shù)目在100個(gè),既能快速收斂,也能保證神經(jīng)網(wǎng)絡(luò)的穩(wěn)定性。</p><p>
108、3、學(xué)習(xí)率以及慣性項(xiàng)系數(shù)的確定</p><p> 為了保證神經(jīng)網(wǎng)絡(luò)算法的快速收斂,同時(shí)也保證網(wǎng)絡(luò)的穩(wěn)定,以及結(jié)合具體的情況,學(xué)習(xí)率取值0.25,慣性項(xiàng)系數(shù)取值0.1。經(jīng)過大量測(cè)試,性能穩(wěn)定,效果比較好。</p><p> 3.3.4 字庫(kù)的管理方式</p><p> 1、漢字在外存中的存儲(chǔ)</p><p> 漢字基數(shù)過多、筆畫特征也很
109、復(fù)雜,但是復(fù)雜的漢字與簡(jiǎn)單的漢字的識(shí)別原理是一樣的,故選取了一些基本的漢字作為測(cè)試數(shù)據(jù),測(cè)試數(shù)據(jù)大約50個(gè)漢字。漢字在外存中的存儲(chǔ),存儲(chǔ)的數(shù)據(jù)包括漢字以及組成該漢字的筆畫,存儲(chǔ)格式為文本格式。</p><p> 2、漢字在內(nèi)存中的存儲(chǔ)</p><p> 漢字在書寫過程中,需要實(shí)時(shí)查詢,所以對(duì)性能要求會(huì)比較高,如果直接從外存中讀取,并放在一個(gè)鏈表容器中,會(huì)導(dǎo)致效率比較低,字庫(kù)越大,體現(xiàn)的
110、越明顯。</p><p> 了解到字庫(kù)的格式,即一個(gè)漢字是由多個(gè)筆畫組成的,所以在內(nèi)存中維護(hù)了一顆trie樹,trie樹的結(jié)構(gòu)見圖3.3。</p><p> 圖3.3 trie樹的結(jié)構(gòu)</p><p> Trie樹的查詢見下面的代碼部分:</p><p> CWordList* CTrieTree::QueryWord(int* pS
111、troke, int iLength)</p><p><b> {</b></p><p> TrieNode* p = pRoot;//獲得trie樹的nil根節(jié)點(diǎn)</p><p> for (int i = 0; i < iLength; i++)//對(duì)獲得筆畫的進(jìn)行循環(huán)</p><p><
112、b> {</b></p><p> int iCurrentStroke = pStroke[i];//獲取當(dāng)前筆畫</p><p> if (p->pChild[iCurrentStroke] == nullptr)//判斷合法性</p><p><b> {</b></p><p&
113、gt; return nullptr;</p><p><b> }</b></p><p> if (i == iLength - 1)//最后的筆畫</p><p><b> {</b></p><p> if (p->pChild[iCurrentStroke]->p
114、Word == nullptr)//檢查漢字的合法性</p><p><b> {</b></p><p> return nullptr;</p><p><b> }</b></p><p> if (p->pChild[iCurrentStroke]->pWord->
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)設(shè)計(jì)-基于人工神經(jīng)網(wǎng)絡(luò)的手寫識(shí)別系統(tǒng)
- 基于BP神經(jīng)網(wǎng)絡(luò)的手寫數(shù)字識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于神經(jīng)網(wǎng)絡(luò)的聯(lián)機(jī)手寫識(shí)別系統(tǒng)研究與實(shí)現(xiàn).pdf
- 基于神經(jīng)網(wǎng)絡(luò)的人臉識(shí)別系統(tǒng)設(shè)計(jì)【畢業(yè)論文】
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文-賓館管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于人工神經(jīng)網(wǎng)絡(luò)的刀具狀態(tài)識(shí)別系統(tǒng)畢業(yè)論文定稿.docx
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文-資料管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 基于人工神經(jīng)網(wǎng)絡(luò)的刀具狀態(tài)識(shí)別系統(tǒng)設(shè)計(jì)——學(xué)士論文
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文-基于web的家政服務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文--酒店網(wǎng)絡(luò)
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文群體人臉檢測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于bp神經(jīng)網(wǎng)絡(luò)與方向小波的手寫數(shù)字識(shí)別系統(tǒng)
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文校園導(dǎo)航系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于神經(jīng)網(wǎng)絡(luò)的聲紋識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于卷積神經(jīng)網(wǎng)絡(luò)的圖片數(shù)字識(shí)別系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文-病床呼叫管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 基于神經(jīng)網(wǎng)絡(luò)的手寫字符識(shí)別系統(tǒng).pdf
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文基于web的物流管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)科學(xué)與技術(shù)畢業(yè)論文基于webgis的物流信息系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論