版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章緒論1.1數(shù)字識別概述模式識別是六十年代初迅速開展起來的一門學科。由于它研究的是如何用機器來實現(xiàn)人(及某些動物)對事物的學習、識別和判斷能力,因而受到了很多科技領(lǐng)域研究人員的注意,成為人工智能研究的一個重要方面。字符識別是模式識別的一個傳統(tǒng)研究領(lǐng)域。從50年代開始,許多的研究者就在這一研究領(lǐng)域開展了廣泛的探索,并為模式識別的開展產(chǎn)生了積極的影響。字符識別一般可以分為兩類:1.聯(lián)機字符識別;2.光學字符識別(OpticalChara-cterRecognition,OCR)或稱離線字符識別。在聯(lián)機字符識別中,計算機能夠通過與計算機相連的輸入設備獲得輸入字符筆劃的順序、筆劃的方向以及字符的形狀,所以相對OCR來說它更容易識別一些。但聯(lián)機字符識別有一個重要的缺乏就是要求輸入者必須在指定的設備上書寫,然而人們在生活中大局部的書寫情況是不滿足這一要求的,比方人們填寫各種表格資料,開具支票等。如果需要計算機去認識這些己經(jīng)成為文字的東西,就需要OCR技術(shù)。比起聯(lián)機字符識別來,OCR不要求書寫者在特定輸入設備上書寫,它可以與平常一樣書寫,所以OCR的應用更為廣泛。OCR所使用的輸入設備可以是任何一種圖像采集設備,如CCD、掃描儀、數(shù)字相機等。通過使用這類采集設備,OCR系統(tǒng)將書寫者已寫好的文字作為圖像輸入到計算機中,然后由計算機去識別。由于OCR的輸入只是簡單的一副圖像,它就不能像聯(lián)機輸入那樣比擬容易的從物理特性上獲得字符筆劃的順序信息,因此OCR是一個更具挑戰(zhàn)性的問題。數(shù)字識別是多年來的研究熱點,也是字符識別中的一個特別問題,它是本文研究的重點。數(shù)字識別在特定的環(huán)境下應用特別廣泛,如郵政編碼自動識別系統(tǒng),稅表和銀行支票自動處理系統(tǒng)等。一般情況下,當涉及到數(shù)字識別時,人們往往要求識別器有很高的識別可靠性,特別是有關(guān)金額的數(shù)字識別時,如支票中填寫的金額局部,更是如此。因此針對這類問題的處理系統(tǒng)設計的關(guān)鍵環(huán)節(jié)之一就是設計出高可靠性和高識別率的數(shù)字識別方法。然而可以說還沒有哪個數(shù)字識別器到達完美的識別效果。在過去的數(shù)十年中,研究者們提出了許許多多的識別方法。按使用的特征不同,這些方法可以分為兩類:基于結(jié)構(gòu)特征的方法和基于統(tǒng)計特征的方法。結(jié)構(gòu)特征通常包括圓、端點、交叉點、筆劃、輪廓等,統(tǒng)計特征通常包括點密度的測量、矩、特征區(qū)域等,一般來說,兩類特征各有優(yōu)勢。例如,使用統(tǒng)計特征的分類器易于訓練,而且對于使用統(tǒng)計特征的分類器,在給定的訓練集上能夠得到相對較高的識別率,而結(jié)構(gòu)特征的主要優(yōu)點之一是能描述字符的結(jié)構(gòu),在識別過程中能有效地結(jié)合幾何和結(jié)構(gòu)的知識,因此能夠得到可靠性較高的識別結(jié)果。1.2神經(jīng)網(wǎng)絡在數(shù)字識別中的應用神經(jīng)網(wǎng)絡模型用于模擬人腦神經(jīng)元活動的過程。其中包括對信息的加工、處理、存儲和搜索等過程,它具有如下根本特點:1、神經(jīng)網(wǎng)絡具有分布式存儲信息的特點。它存儲信息的方式與傳統(tǒng)的計算機的思維方式是不同的,一個信息不是存在一個地方,而是分布在不同的位置。網(wǎng)絡的某一局部也不只存儲一個信息,它的信息是分布式存儲的。神經(jīng)網(wǎng)絡是用大量神經(jīng)元之間的連接及對各連接權(quán)值的分布來表示特定的信息。因此,這種分布式存儲方式即使當局部網(wǎng)絡受損時,仍具有能夠恢復原來信息的優(yōu)點。2、神經(jīng)網(wǎng)絡對信息的處理及推理的過程具有并行的特點。每個神經(jīng)元都可以根據(jù)接收到的信息作獨立的運算和處理,然后將結(jié)果傳輸出去,這表達了一種并行處理。神經(jīng)網(wǎng)絡對于一個特定的輸入模式,通過前向計算產(chǎn)生一個輸出模式,各個輸出節(jié)點代表的邏輯概念被同時計算出來。在輸出模式中,通過輸出節(jié)點的比擬和本身信號的強弱而得到特定的解,同時排出其余的解。這表達了神經(jīng)網(wǎng)絡并行推理的特點。3、神經(jīng)網(wǎng)絡對信息的處理具有自組織、自學習的特點。神經(jīng)網(wǎng)絡中各神經(jīng)元之間的連接強度用權(quán)值大小來表示,這種權(quán)值可以事先定出,也可以為適應周圍環(huán)境而不斷地變化,這種過程稱為神經(jīng)元的學習過程。神經(jīng)網(wǎng)絡所具有的自學習過程模擬了人的形象思維方法,這是與傳統(tǒng)符號邏輯完全不同的一種非邏輯非語言的方法。在神經(jīng)網(wǎng)絡研究的歷史進程中,它在模式識別方面的應用一直是最活潑和最成功的領(lǐng)域。神經(jīng)網(wǎng)絡與它在模式識別中的應用是息息相關(guān),密不可分的。幾乎可以說,神經(jīng)網(wǎng)絡模式識別研究的開展史貫穿了整個神經(jīng)網(wǎng)絡的研究歷程。目前,隨著計算機的迅速開展,性能價格比的不斷提高,模式識別技術(shù)己經(jīng)從理論探討為主開展到大量的實際應用,人們將更多的注意力開始轉(zhuǎn)向那些用于語音,圖像、機器人以及人工智能等的模式識別實際問題。解決這些問題的關(guān)鍵是需要進行復雜而龐大的實時數(shù)據(jù)處理,而現(xiàn)有計算機的存貯容量及計算復雜性的局限,使得真正實時化的應用受阻。這種面向?qū)崟r應用的模式識別問題促使人們開始將并行處理的神經(jīng)網(wǎng)絡應到模式識別,而神經(jīng)網(wǎng)絡模式識別技術(shù)又將模式識別實時應用推進了一大步,數(shù)字識別就是這種應用的一個很重要的領(lǐng)域。數(shù)字識別是一項極具研究價值的課題,隨著神經(jīng)網(wǎng)絡和模糊邏輯技術(shù)的開展,人們對這一問題的研究又采用了許多新的方法和手段,也使得這一古老的課題煥發(fā)出新的生命力.目前國際上有相當多的學者在研究這一課題,它包括了模式識別領(lǐng)域中所有典型的問題:數(shù)據(jù)的采集、處理及選擇、輸入樣本表達的選擇、模式識別分類器的選擇以及用樣本集對識別器的有指導的訓練。人工神經(jīng)網(wǎng)絡為數(shù)字識別提供了新的手段。正是神經(jīng)網(wǎng)絡所具有的這種自組織自學習能力、推廣能力、非線性和運算高度并行的能力使得模式識別成為目前神經(jīng)網(wǎng)絡最為成功的應用領(lǐng)域。1.3數(shù)字圖像處理的應用數(shù)字圖像處理主要研究的內(nèi)容有以下幾個方面:1、圖像變換。由于圖像陣列很大,直接在空間域中進行處理,涉及計算量很大。因此,往往采用各種圖像變換的方法,如傅立葉變換、沃爾什變換、離散余弦變換等間接處理技術(shù),將空間域的處理轉(zhuǎn)換為變換域處理,不僅可減少計算量,而且可獲得更有效的處理〔如傅立葉變換可在頻域中進行數(shù)字濾波處理〕。目前新興研究的小波變換在時域和頻域中都具有良好的局部化特性,它在圖像處理中也有著廣泛而有效的應用。2、圖像編碼壓縮。圖像編碼壓縮技術(shù)可減少描述圖像的數(shù)據(jù)量〔即比特數(shù)〕,以便節(jié)省圖像傳輸、處理時間和減少所占用的存儲器容量。壓縮可以在不失真的前提下獲得,也可以在允許的失真條件下進行。編碼是壓縮技術(shù)中最重要的方法,它在圖像處理技術(shù)中是開展最早且比擬成熟的技術(shù)。3、圖像增強和復原。圖像增強和復原的目的是為了提高圖像的質(zhì)量,如去除噪聲,提高圖像的清晰度等。圖像增強不考慮圖像降質(zhì)的原因,突出圖像中所感興趣的局部。如強化圖像高頻分量,可使圖像中物體輪廓清晰,細節(jié)明顯;強化低頻分量可減少圖像中噪聲影響。圖像復原要求對圖像降質(zhì)的原因有一定的了解,一般講應根據(jù)降質(zhì)過程建立“降質(zhì)模型〞,再采用某種濾波方法,恢復或重建原來的圖像。4、意義的特征局部提取出來,其有意義的特征有圖像中的邊緣、區(qū)域等,這是進一步進行圖像識別、分析和理解的根底。雖然目前已研究出不少邊緣提取、區(qū)域分割的方法,但還沒有一種普遍適用于各種圖像的有效方法。因此,對圖像分割的研究還在不斷深入之中,是目前圖像處理中研究的熱點之一。5、圖像描述。圖像描述是圖像識別和理解的必要前提。作為最簡單的二值圖像可采用其幾何特性描述物體的特性,一般圖像的描述方法采用二維形狀描述,它有邊界描述和區(qū)域描述兩類方法。對于特殊的紋理圖像可采用二維紋理特征描述。隨著圖像處理研究的深入開展,已經(jīng)開始進行三維物體描述的研究,提出了體積描述、外表描述、廣義圓柱體描述等方法。6、圖像分類〔識別〕。圖像分類〔識別〕屬于模式識別的范疇,其主要內(nèi)容是圖像經(jīng)過某些預處理〔增強、復原、壓縮〕后,進行圖像分割和特征提取,從而進行判決分類。圖像分類常采用經(jīng)典的模式識別方法,有統(tǒng)計模式分類和句法〔結(jié)構(gòu)〕模式分類,近年來新開展起來的模糊模式識別和人工神經(jīng)網(wǎng)絡模式分類在圖像識別中也越來越受到重視。在數(shù)字識別中分類識別之前要利用數(shù)字圖象處理和計算機圖形學的知識進行圖象的預處理以便進行下面的特征提取以及識別。圖象的預處理包括二值化、圖象的增強、圖象的銳化以及圖象的分割等。1.4本論文所做的工作本論文在數(shù)字識別及預處理方面做了如下工作:1、介紹了數(shù)字識別廣闊的應用前景和常用的識別方法,通過分析指出數(shù)字識別的難點在于無法建立精確的數(shù)學模型和做出簡單可行的識別系統(tǒng)。2、本文第二、三章介紹了人工神經(jīng)元網(wǎng)絡根本原理和它的BP學習算法,然后論述了模式識別的方法和有關(guān)概念,指出了神經(jīng)網(wǎng)絡之所以能夠用于數(shù)字識別的內(nèi)在機理和獨特優(yōu)勢。3、第四章分析了常規(guī)數(shù)字識別的根本步驟,并指出數(shù)字識別的關(guān)鍵步驟是預處理和特征提取。詳細了圖像預處理的步驟及BP神經(jīng)網(wǎng)絡在數(shù)字識別中的應用。第2章模式識別及人工神經(jīng)網(wǎng)絡概述2.1模式識別簡述在觀察各種事物或接受各種客觀現(xiàn)象時,人們總是不斷地進行模式識別。各種具有相似的特征又不完全相同的事物和現(xiàn)象組成不同的類別。在同一類別中,事物和現(xiàn)象不盡相同,但它們總是表現(xiàn)出某些方面的相近之處。例如,每個人寫出來的數(shù)字“8〞可能千差萬別,但它們的共同之處在于,它們都屬于數(shù)字,“8〞這個范疇。也就是說,這些千差萬別的數(shù)字“8〞的共性是它們具有相同的屬性特征。人的思維可以對初次見到的事物進行分類。比方,即使人們初到一個城市,也可以輕易地識別出“街道〞、“房屋〞、“汽車〞這樣的事物。同樣,看到另外一種寫法的“8〞,人們?nèi)匀豢梢郧宄刂浪暮x。正是人腦的這種推廣能力,使得人們利用見到過的有限事物和現(xiàn)象,形成各種事物類別的概念。這些有限的、個別的事物和現(xiàn)象就可以稱為模式,而整個類別的現(xiàn)象和事物那么可以稱為模式類,或者簡稱為類。人們根據(jù)所見模式的特性,將其劃歸為某一類的過程,實際上就是模式識別的過程。模式識別這個詞既可以是指人對事物的,一個分析、描述、判斷和識別的過程,也可以是指利用計算機對某些物理對象進行分類的這門學科。模式和集合的概念是分不開的,模式可以看作是集合論中的元素,而類那么可以看作是子集。2.2人工神經(jīng)網(wǎng)絡模式識別具體的模式識別是多種多樣的,如果從識別的根本方法上劃分,傳統(tǒng)的模式識別大體分為統(tǒng)計模式識別和句法模式識別,在識別系統(tǒng)中引入神經(jīng)網(wǎng)絡是一種近年來開展起來的新的模式識別方法。盡管引入神經(jīng)網(wǎng)絡的方法和引入網(wǎng)絡的結(jié)構(gòu)可以各不相同,但都可稱為神經(jīng)網(wǎng)絡模式識別。而且這些識別方法在解決傳統(tǒng)方法較難處理的某些問題上帶來了新的進展和突破,因而得到了人們越來越多的重視和研究。人工神經(jīng)元網(wǎng)絡(ArtificialNeuralNetwork)簡稱神經(jīng)網(wǎng)絡,是基于日前人們對自然神經(jīng)系統(tǒng)的認識而提出的一些神經(jīng)系統(tǒng)的模型,一般是由一系列被稱為神經(jīng)元的具有某種簡單計算功能的節(jié)點經(jīng)過廣泛連接構(gòu)成的一定網(wǎng)絡結(jié)構(gòu),而其網(wǎng)絡連接的權(quán)值根據(jù)某種學習規(guī)那么在外界輸入的作用下不斷調(diào)節(jié),最后使網(wǎng)絡具有某種期望的輸出特性。神經(jīng)網(wǎng)絡的這種可以根據(jù)輸入樣本學習的功能使得它非常適合于用來解決模式識別問題,這也是神經(jīng)網(wǎng)絡目前最成功的應用領(lǐng)域之一。神經(jīng)網(wǎng)絡模式識別的根本方法是,首先用己知樣本訓練神經(jīng)網(wǎng)絡,使之對不同類別的己知樣本給出所希望的不同輸出,然后用該網(wǎng)絡識別未知的樣本,根據(jù)各樣本所對應的網(wǎng)絡輸出情況來劃分未知樣本的類別。神經(jīng)網(wǎng)絡進行模式識別的一般步驟如圖2-1所示,分為如下幾個局部。預處理神經(jīng)網(wǎng)絡識別特征變換常規(guī)處理樣本獲取神經(jīng)網(wǎng)絡識別特征變換常規(guī)處理樣本獲取圖2-1神經(jīng)網(wǎng)絡模式識別根本構(gòu)成1、樣本獲取這一步驟主要是為了得到一定數(shù)量的用于訓練和識別的樣本。2、常規(guī)處理其作用相當于傳統(tǒng)模式識別中的數(shù)據(jù)獲取和常規(guī)處理兩步的功能。即通過對識別對象的有效觀測、進行采樣量化,獲得一系列數(shù)據(jù),再經(jīng)過去除噪聲、加強有用信息等工作獲得盡量逼真的原始數(shù)據(jù)。通過這一步驟,得到了樣本的原始表達。3、特征變換在原始樣本表達的根底上,進行適當?shù)淖儞Q,得到適合神經(jīng)網(wǎng)絡進行識別的樣本的特征表達。以上兩步構(gòu)成了神經(jīng)網(wǎng)絡模式識別中的預處理過程。這一步驟與傳統(tǒng)模式識別的特征提取選擇的位置很相似,不同的是,神經(jīng)網(wǎng)絡可以對原始樣本直接進行處理,因此這種變換在神經(jīng)網(wǎng)絡模式識別中不象傳統(tǒng)模式識別的特征提取選擇那樣必不可少,神經(jīng)網(wǎng)絡對預處理的要求與傳統(tǒng)模式識別對特征提取選擇的要求也有所不同。4、神經(jīng)網(wǎng)絡識別根據(jù)識別對象和研究問題的不同,選用不同的網(wǎng)絡結(jié)構(gòu)并采用適當?shù)膶W習算法,用樣本作為訓練集對神經(jīng)網(wǎng)絡進行訓練,使其網(wǎng)絡連接的權(quán)值不斷調(diào)整,直到網(wǎng)絡的輸出特性與期望的相符合。訓練過程結(jié)束以后,網(wǎng)絡相當于一個固定的映射器,新的輸入樣木(測試樣本)通過網(wǎng)絡映射到不同的類別。神經(jīng)網(wǎng)絡能夠應用于模式識別,關(guān)鍵在于它具有一般數(shù)學模型所不具有的諸多優(yōu)點。1、分布存儲和容錯性一個信息不是存儲在一個地方,而是按內(nèi)容而分布在整個網(wǎng)絡上,網(wǎng)絡某一處不是只存儲一個外部信息,而每個神經(jīng)元存儲多種信息的局部內(nèi)容。網(wǎng)絡的每局部對信息的存儲有等勢作用。這種分布式存儲算法是存儲區(qū)與運算區(qū)合為一體的。在神經(jīng)網(wǎng)絡中,要獲得存儲的知識那么采用“聯(lián)想〞的方法,即當一個神經(jīng)網(wǎng)絡輸入一個鼓勵時,它要在己存的知識中尋找與該輸入匹配最好的存儲知識為其解。當然在信息輸出時也還要經(jīng)過一種處理。而不是直接從記憶中取出。這種存儲方式的優(yōu)點在于假設局部信息不完全,就是說或者喪失或者損壞甚至有錯誤的信息,它仍能恢復出原來正確的完整的信息,系統(tǒng)仍能運行。這就是網(wǎng)絡具有容錯性和聯(lián)想記憶功能,自然是表現(xiàn)出較強的魯莽性。人的大腦的容錯性是它的一種重要的智慧形式。2、大規(guī)模并行處理人工神經(jīng)元網(wǎng)絡在結(jié)構(gòu)上是并行的,而且網(wǎng)絡的各個單元可以同時進行類似的處理過程。因此,網(wǎng)絡中的信息處理是在大量單元中平行而又有層次地進行,運算速度高,大大超過傳統(tǒng)的序列式運算的數(shù)字機。雖然每個神經(jīng)元的信息傳遞(神經(jīng)脈沖)速度是以毫秒計算的,比普通序列式計算機要慢很多,但是人通常能在1秒內(nèi)即可作出對外界事物的判斷和決策、這就是能神奇地完成所謂“百步〞決策。這按照現(xiàn)有傳統(tǒng)的計算機及人工智能技術(shù)目前還是做不到的。3、自學習、自組織和自適應性學習和適應要求在時間過程中系統(tǒng)內(nèi)部結(jié)構(gòu)和聯(lián)系方式有改變,神經(jīng)元網(wǎng)絡是一種變結(jié)構(gòu)系統(tǒng),恰好能完成對環(huán)境的活應和對外界事物的學習能力。神經(jīng)元之間的連接有多種多樣,各神經(jīng)元之間連接強度具有一定的可塑性,相當于突觸傳遞信息能力的變化,這樣,網(wǎng)絡可以通過學習和訓練進行自組織以適應不同信息處理的要求。神經(jīng)元網(wǎng)絡是大量神經(jīng)元的集體行為,并不是各單元行為的簡單的相加,而表現(xiàn)出一般復雜非線性動態(tài)系統(tǒng)的特性。如不可預測性、不可逆性、有各種類型的吸引子(信息正是“存儲〞在定點吸引子)和出現(xiàn)混沌現(xiàn)象等。正是由于神經(jīng)網(wǎng)絡具有這些特點,所以可以處理一些環(huán)境信息十分復雜、知識背景不清楚和推理規(guī)那么不明確的問題。例如語音識別和識別、醫(yī)學診斷以及市場估計等,都是具有復雜非線性和不確定性對象的控制。在那里,信源提供的模式豐富多彩,有的互相間存在矛盾,而判定決策原那么又無條理可循。通過神經(jīng)元網(wǎng)絡學習(按照學習法那么),從典型事例中學會處理具體事例,給出比擬滿意的解答。2.3人工神經(jīng)網(wǎng)絡的根本原理2.3.1神經(jīng)細胞以及人工神經(jīng)元的組成神經(jīng)系統(tǒng)的根本構(gòu)造單元是神經(jīng)細胞,也稱神經(jīng)元。它和人體中其他細胞的關(guān)鍵區(qū)別在于具有產(chǎn)生、處理和傳遞信號的功能。每個神經(jīng)元都包括三個主要局部:細胞體、樹突和軸突。樹突的作用是向四方收集由其他神經(jīng)細胞傳來的信息,軸突的功能是傳出從細胞體送來的信息。每個神經(jīng)細胞所產(chǎn)生和傳遞的根本信息是興奮或抑制。在兩個神經(jīng)細胞之間的相互接觸點稱為突觸。簡單神經(jīng)元網(wǎng)絡及其簡化結(jié)構(gòu)如圖2-2所示。從信息的傳遞過程來看,一個神經(jīng)細胞的樹突,在突觸處從其他神經(jīng)細胞接受信號。這些信號可能是興奮性的,也可能是抑制性的。所有樹突接受到的信號都傳到細胞體進行綜合處理,如果在一個時間間隔內(nèi),某一細胞接受到的興奮性信號量足夠大,以致于使該細胞被激活,而產(chǎn)生一個脈沖信號。這個信號將沿著該細胞的軸突傳送出去,并通過突觸傳給其他神經(jīng)細胞.神經(jīng)細胞通過突觸的聯(lián)接形成神經(jīng)網(wǎng)絡?!?〕細胞體〔2〕樹突〔3〕軸突〔4〕突觸圖2-2簡單神經(jīng)元網(wǎng)絡及其簡化結(jié)構(gòu)圖人們正是通過對人腦神經(jīng)系統(tǒng)的初步認識,嘗試構(gòu)造出人工神經(jīng)元以組成人工神經(jīng)網(wǎng)絡系統(tǒng)來對人的智能,甚至是思維行為進行研究:嘗試從理性角度說明大腦的高級機能。經(jīng)過幾十年的努力與開展,己涌現(xiàn)出上百種人工神經(jīng)網(wǎng)絡模型,它們的網(wǎng)絡結(jié)構(gòu)、性能、算法及應用領(lǐng)域各異,但均是根據(jù)生物學事實衍生出來的。由于其根本處理單元是對生物神經(jīng)元的近似仿真,因而被稱之為人工神經(jīng)元。它用于仿效生物神經(jīng)細胞最根本的特性,與生物原型相對應。人工神經(jīng)元的主要結(jié)構(gòu)單元是信號的輸入、綜合處理和輸出,其輸出信號的強度大小反映了該單元對相鄰單元影響的強弱。人工神經(jīng)元之間通過互相聯(lián)接形成網(wǎng)絡,稱為人工神經(jīng)網(wǎng)絡。神經(jīng)元之間相互聯(lián)接的方式稱為聯(lián)接模式,相互之間的聯(lián)接度由聯(lián)接權(quán)值表達在人工神經(jīng)網(wǎng)絡中,改變信息處理過程及其能力,就是修改網(wǎng)絡權(quán)值的過程。目前多數(shù)人工神經(jīng)網(wǎng)絡的構(gòu)造大體上都采用如下的一些原那么:1、由一定數(shù)量的根本單元分層聯(lián)接構(gòu)成;2、每個單元的輸入、輸出信號以及綜合處理內(nèi)容都比擬簡單;3、網(wǎng)絡的學習和知識存儲表達在各單元之間的聯(lián)接強度上。2.3.2人工神經(jīng)元的模型神經(jīng)元是人工神經(jīng)網(wǎng)絡的根本處理單元,它一般是一個多輸入/單輸出的非線性元件。神經(jīng)元輸出除受輸入信號的影響外,同時也受到神經(jīng)元內(nèi)部其它因素的影響,所以在人工神經(jīng)元的建模中,常常還加有一個額外輸入信號、稱為偏差(bais),有時也稱為閾值或門限值。一個具有r個輸入分量的神經(jīng)元如圖2-2所示。其中,輸入分量通過與和它相乘的權(quán)值分量相連,以的形式求和后,形成激活函數(shù)f()的輸入。激活函數(shù)的另一個輸入是神經(jīng)元的偏差b,權(quán)值Wj和輸入分量的矩陣形式可以由W的行矢量以及P的列矢量來表示:〔2.1〕2.4神經(jīng)網(wǎng)絡的結(jié)構(gòu)與學習規(guī)那么2.4.1神經(jīng)網(wǎng)絡的聯(lián)接形式人腦中大量的神經(jīng)細胞都不是孤立的,而是通過突觸形式相互聯(lián)系著,構(gòu)成結(jié)構(gòu)與功能十分復雜的神經(jīng)網(wǎng)絡系統(tǒng)。為了便于從結(jié)構(gòu)出發(fā)模擬智能,因此必須將一定數(shù)量的神經(jīng)元適當?shù)芈?lián)接成網(wǎng)絡,從而形成多種神經(jīng)網(wǎng)絡模型。通常所說的神經(jīng)網(wǎng)絡的結(jié)構(gòu),主要指它的聯(lián)接方式。神經(jīng)網(wǎng)絡按照拓撲結(jié)構(gòu)屬于以神經(jīng)元為節(jié)點,以及節(jié)點間有向連接為邊的一種圖,其結(jié)構(gòu)大體上可分為層狀和網(wǎng)狀兩大類。層狀結(jié)構(gòu)的神經(jīng)網(wǎng)絡是由假設干層組成,每層中有一定數(shù)量的神經(jīng)元,相鄰層中神經(jīng)元單向聯(lián)接,一般地同層內(nèi)的神經(jīng)元不能聯(lián)接,網(wǎng)狀結(jié)構(gòu)的神經(jīng)網(wǎng)絡中,任何兩個神經(jīng)元之間都可能雙向聯(lián)接。下面介紹幾種網(wǎng)絡結(jié)構(gòu):1、前向網(wǎng)絡前向網(wǎng)絡通常包含許多層,如圖2-3所示為3層網(wǎng)絡。這種網(wǎng)絡特點是只有前后相鄰兩層之間神經(jīng)元相互聯(lián)接,各神經(jīng)元之間沒有反應。每個神經(jīng)元可以從前一層接收多個輸入,并只有一個輸出送給下一層的各神經(jīng)元。三層前向網(wǎng)絡分為輸入層、隱層和輸出層。在前向網(wǎng)絡中有計算功能的節(jié)點稱為計算單元,而輸入節(jié)點無計算功能。2、反應網(wǎng)絡反應網(wǎng)絡從輸出層到輸入層有反應。即每一個節(jié)點同時接收外來輸入和來自其它節(jié)點的反應輸入,其中也包括神經(jīng)元輸出信號引回到本身輸入構(gòu)成的自環(huán)反應,如圖2-4所示。這種反應網(wǎng)絡每個節(jié)點都是一個計算單元。圖2-3前向網(wǎng)絡圖2-4反應網(wǎng)絡3、相互結(jié)合型網(wǎng)絡相互結(jié)合型網(wǎng)絡如圖2-5所示,它是屬于網(wǎng)狀結(jié)構(gòu)。構(gòu)成網(wǎng)絡中各個神經(jīng)元都可能相互雙向聯(lián)接,所有的神經(jīng)元既作輸入,同時也用于輸出。在這種網(wǎng)絡中,如果在某一時刻從神經(jīng)網(wǎng)絡外部施加一個輸入,各個神經(jīng)元一邊相互作用,一邊進行信息處理,直到使網(wǎng)絡所有神經(jīng)元的活性度或輸出值,收斂于某個平均值為止作為信息處理的結(jié)束。圖2-5網(wǎng)狀結(jié)構(gòu)網(wǎng)絡圖2-6混合型網(wǎng)絡4、混合型網(wǎng)絡上述的前向網(wǎng)絡和相互結(jié)合型網(wǎng)絡分別是典型的層狀結(jié)構(gòu)網(wǎng)絡和網(wǎng)絡結(jié)構(gòu)網(wǎng)絡,介于這兩種網(wǎng)絡中間的一種聯(lián)接方式,如圖2-6所示,在前向網(wǎng)絡的同層間神經(jīng)元有互聯(lián)的結(jié)構(gòu),稱為混合型網(wǎng)絡。這種在同一層內(nèi)的互聯(lián),目的是為了限制同層內(nèi)神經(jīng)元同時興奮或抑制的神經(jīng)元數(shù)目,以完成特定的功能。2.4.2神經(jīng)網(wǎng)絡的學習和訓練人腦中一個典型神經(jīng)元通過許多樹突的精細結(jié)構(gòu),收集來自其它神經(jīng)元的信息,神經(jīng)元又通過軸突發(fā)出電活性脈沖。軸突分裂上千條分支,在每條分支末端,通過突觸的結(jié)構(gòu)把來自軸突的電活性變?yōu)殡娮饔?,從而使與之相連的各種神經(jīng)元的活性受到抑制或興奮。當一個神經(jīng)元收到興奮輸入,而興奮輸入又比神經(jīng)元的抑制輸入足夠大時,神經(jīng)元把電活性脈沖向下傳到它的軸突,改變軸突的有效性,從而使一個神經(jīng)元對另一個神經(jīng)元的影響改變,便發(fā)生了學習行為。因此,可以認為神經(jīng)網(wǎng)絡學習的本質(zhì)特征在于神經(jīng)細胞特殊的突觸結(jié)構(gòu)所具有的可塑性連接,而如何調(diào)整連接權(quán)重就構(gòu)成了不同的學習算法。神經(jīng)網(wǎng)絡按學習方式分為有教師學習和無教師學習兩大類。1、有教師學習為了使神經(jīng)網(wǎng)絡在實際應用中解決各種問題,必須對它進行訓練,就是從應用環(huán)境中選出一些樣本數(shù)據(jù),通過不斷地調(diào)整權(quán)值矩陣,直到得到適宜的輸入輸出關(guān)系為止,這個過程就是對神經(jīng)網(wǎng)絡的訓練過程,這種訓練的過程需要有教師示范,提供訓練數(shù)據(jù),又稱樣本數(shù)據(jù)。在訓練過程中又需教師的監(jiān)督,故這種有教師的學習又稱監(jiān)督式學習。有教師學習方法雖然簡單,但是要求教師對環(huán)境和網(wǎng)絡的結(jié)構(gòu)應該比擬熟悉,當系統(tǒng)復雜,環(huán)境變化時,就變得困難。為了適應環(huán)境變化就要重新調(diào)整加權(quán)值,這樣,當學習到新知識的同時,也容易忘掉已學過的舊知識,這一些是有教師學習方法的缺點。2、無教師學習無教師學習的訓練數(shù)據(jù)集中,只有輸入而沒有目標輸出,訓練過程神經(jīng)網(wǎng)絡自動地將各輸入數(shù)據(jù)的特征提取出來,并將其分成假設干類。經(jīng)過訓練好的網(wǎng)絡能夠識別訓練數(shù)據(jù)集以外的新的輸入類別,并相應獲得不同的輸出。顯然,無教師的訓練方式可使網(wǎng)絡具有自組織和自學習的功能。2.4.3神經(jīng)網(wǎng)絡的學習規(guī)那么人類高度開展的智能,主要是通過學習獲得的。要模擬人腦神經(jīng)系統(tǒng)的學習功能,必須使得人工神經(jīng)網(wǎng)絡具有學習功能。因此,有關(guān)神經(jīng)網(wǎng)絡的學習算法的研究一直占有特殊的地位。神經(jīng)網(wǎng)絡中常用的有四種學習規(guī)那么:1、聯(lián)想式學習Hebb規(guī)那么。2、誤差傳播式學習Delta學習規(guī)那么。3、概率式學習。4、競爭式學習。第3章前饋多層網(wǎng)絡結(jié)構(gòu)及其BP學習算法3.1前向多層網(wǎng)絡的結(jié)構(gòu)及BP學習算法前向網(wǎng)絡是目前研究最多的網(wǎng)絡形式之一。如圖3-1所示,在此模式中,共有三層神經(jīng)元,每層由假設干節(jié)點組成,第k層的每個節(jié)點與第k+1層的每個節(jié)點連接。第一層為輸入層;第二層為中間層,又稱為隱層;最后一層為網(wǎng)絡的輸出層。其結(jié)構(gòu)可以表示為:n-q-m網(wǎng)絡,n為輸入層節(jié)點數(shù),q為隱含層節(jié)點數(shù),m為輸出層節(jié)點數(shù)。每個連接對應一個權(quán)值,通過修正這些權(quán)值“學習〞或“訓練〞網(wǎng)絡,從而修正輸入到輸出映射的網(wǎng)絡函數(shù)。輸入單元的活性(狀態(tài))代表輸入此網(wǎng)絡中的原始信息。每個隱單元的活性取決于輸入單元的活性及該輸入單元與隱單元之間聯(lián)接權(quán)值。同樣輸出單元的行為取決于隱單元的活性及隱單元和輸出單元之何的權(quán)值。上述網(wǎng)絡的信息傳播是由輸入單元傳到隱單元,最后傳到輸出單元。這種含有隱層的前向網(wǎng)絡有一個重要特征,即隱單元可以任意構(gòu)成它們自身的輸入表示,輸入單元和隱單元間的權(quán)值決定每個隱單元何時是活性的,因此,借修改這些權(quán)值,一個隱單元可以選擇它代表什么。圖3-1BP網(wǎng)絡結(jié)構(gòu)BP(BackPropagation)算法是誤差反向傳播算法,網(wǎng)絡的學習由四局部組成:輸入模式由輸入層經(jīng)向輸出層的模式順傳播過程。網(wǎng)絡的希望輸出與網(wǎng)絡實際輸出之間的誤差信號,由輸出層經(jīng)中間層向輸入層的誤差逆?zhèn)鞑ミ^程。由模式順傳播與誤差逆?zhèn)鞑シ磸徒惶孢M行的網(wǎng)絡記憶訓練過程。網(wǎng)絡趨向收斂即網(wǎng)絡的全局誤差趨向極小值的學習收斂過程。3.2BP網(wǎng)絡誤差反向傳播學習算法的根本思想為了研究神經(jīng)網(wǎng)絡是怎樣從經(jīng)驗中學習的,我們應該首先向網(wǎng)絡提供一些訓練例子,并可以通過下述方法,能教會一個三層前向網(wǎng)絡完成某個特定的任務。其方法步驟如下:〔1〕向網(wǎng)絡提供訓練例子,包括輸入單元的活性模式和期望的輸出單元活性模式;〔2〕確定網(wǎng)絡的實際輸出與期望輸出之間允許的誤差;〔3〕改變網(wǎng)絡中所有聯(lián)接權(quán)值,使網(wǎng)絡產(chǎn)生的輸出更接近于期望的輸出,直到滿足確定的允許誤差。下面以網(wǎng)絡識別數(shù)字為例說明上述方法。比方使用64個傳感器組成傳感器陣列,每個傳感器記錄一個數(shù)字的一小局部面積內(nèi)是否有筆寫的墨跡存在。因此,網(wǎng)絡需要64個輸入單元(每個傳感器一個),10個輸出單元(每種數(shù)字一個)和許多隱單元。為便于傳感器記錄每種數(shù)字,網(wǎng)絡應在適當?shù)妮敵鰡卧挟a(chǎn)生高活性,并在其它輸單元中產(chǎn)生低的活性。為了訓練此網(wǎng)絡,提供一幅某個數(shù)字的圖像并把10個輸出單元的實際活性和期望活性加以比擬,然后計算誤差,將實際活性與期望活性差值的平方定義為誤差。其次,改變網(wǎng)絡中所有聯(lián)接權(quán)值以減少誤差。針對每種數(shù)字的多種不同圖像重復訓練,直到網(wǎng)絡能對每個數(shù)字正確地歸類為止。實現(xiàn)上述訓練過程的關(guān)鍵是必須改變的每個權(quán)值,且其變化量應正比于權(quán)值改變時誤差的變化率,此量稱權(quán)值的誤差導數(shù),簡記為EW。但是,要對EW的有效計算是十分復雜棘手的問題。如果采取稍許擾動每個權(quán)值,并觀察誤差如何變化,這種方法效率太低,因為要求對每一個權(quán)值都要單獨加擾動。1979年前后,正在哈佛大學攻讀博士的Werbos創(chuàng)造了一種高效的計算EW的方法,即誤差反向傳播算法,只因創(chuàng)造后多年來未受重視,也沒有充分體會到它的用處,直到1985年Rumelhart和Parker兩人各自再次發(fā)現(xiàn)該算法后才得以推廣。首先研究網(wǎng)絡的單元是線性時誤差反向傳播的算法.首先計算改變一個單元活性水平時誤差的變化率EA,再計算每個權(quán)值的誤差導數(shù)EW。對于輸出單元,EA只是實際輸出和期望輸出間的差值。為計算在輸出層前面一層的一個隱單元的Eel,首先區(qū)分該隱單元和與它相聯(lián)的那些輸出用數(shù)字識別的BP神經(jīng)網(wǎng)絡單元間的所有權(quán)值,然后把這些權(quán)值乘以這些輸出單元的EA并求和,此和值即為所選定的隱單元的EA。將所有隱單元的EA計算出后,可用類似的方法計算其它層的Eel值,計算的順序恰好與活性專播過網(wǎng)絡路徑相反的方向逐層進行,故稱為誤差反向傳播算法。計算出一個單元的EA后,再計算該單元每條輸入聯(lián)接的EW,EW是EA和經(jīng)過該輸入聯(lián)接活性的乘積。對于非線性單元,反向傳播算法還包括另外一步,即在反向傳播前,必須把FA變換為EI,EI是一個單元所收到的總輸入變化時誤差的變化率。綜上所述,為了訓練前向網(wǎng)絡完成某項任務,必須調(diào)整每個單元的權(quán)值,即減小期望輸出與實際輸出之間的誤差,為此必須計算每個權(quán)值變化時誤差的變化,即誤差導數(shù)EW,而反向傳播算法是一種確定EW使用的最有效的方法。誤差反傳學習算法一種改良算法可以用圖3-2表示,它添加了多個隱層.圖3-2誤差反向傳播學習算法網(wǎng)絡結(jié)構(gòu)圖在如圖3.1所給出的前向多層BP網(wǎng)絡,設單元j、i分別是輸出層和它前面一層中的一個單元。為計算輸出單元j的活性,首先計算總加權(quán)輸入,即〔3.1〕其中Y是前面一層中第1個單元的活性水平,Wij是第i個單元和第j個單元的聯(lián)接權(quán)值.其次,為了利用上述求得的總加權(quán)輸入Xi來計算Yi,必須使用某個函數(shù)來激活輸入與輸出函數(shù)。一般常用S型函數(shù):〔3.2〕在確定了所有輸出單元的活性之后,利用下式計算網(wǎng)絡的誤差:〔3.3〕式中Yj是輸出層中第j個單元的活性水平,dj是第j個單元的期望輸出概括起來反向傳播算法包括以下四個步驟:(1)一個輸出單元活性改變時的誤差導數(shù)EA,即實際活性與期望活性的差值:〔3.4〕(2)計算一個單元所接受總輸入變化時的誤差導數(shù)EI,EI實際上等于上述步驟(1)的結(jié)果乘以一個單元的總輸入變化時其輸出的變化率,即〔3.5〕(3)計算一個與輸出單元聯(lián)接權(quán)值改變時的誤差變化率EW。〔3.6〕不難看出等于上述步驟(2)的結(jié)果,乘以與該輸出單元相連接單元i的活性水平(4)計算前面一層中一個單元活性改變時的誤差變化率,前面一層中一個單元活性的改變會影響與該單元相連接的所有輸出單元的活性。因此,為了計算對誤差總的影響,把對各輸出單元的所有單獨影響相加.〔3.7〕運用步驟(2)和(4),可把一層單元的EA變成前面一層單元的FA,為了得到期望的前面各層的EA??芍貜痛擞嬎悴襟E。當?shù)玫揭粋€單元的EA后,可用步驟(2)和(3)來計算作用于它的輸入聯(lián)接上的EW。3.3BP算法的計算機實現(xiàn)流程BP算法的計算機實現(xiàn)按下述步驟進行:(1)初始化,對所有權(quán)值賦以隨機任意小值,并對閥值設定初值;(2)給定訓練數(shù)據(jù)集,即提供輸入向量x和期望輸出y:(3)計算實際輸出y〔3.8〕其中f函數(shù)為Sigmoid函數(shù):(4)調(diào)整權(quán)值,按誤差反向傳播方向,從輸出節(jié)點開始返回到隱層按下式修正權(quán)值.〔3.9〕其中為大于0的增益,為節(jié)點j的誤差,的計算根據(jù)節(jié)點j的形式不同,由下式分別計算:〔3.10〕(5)返回(2)步重復,直至誤差滿足要求為止。3.4激活轉(zhuǎn)移函數(shù)激活函數(shù)(Activationtransferfunction)是一個神經(jīng)元及網(wǎng)絡的核心。網(wǎng)絡解決問題的能力與成效除了與網(wǎng)絡結(jié)構(gòu)有關(guān),在很大程度上取決于網(wǎng)絡所采用的激活函數(shù)。激活函數(shù)的根本作用是:〔1〕控制輸入對輸出的激活作用;〔2〕對輸入、輸出進行函數(shù)轉(zhuǎn)換;〔3〕可將可能無限域的輸入變換成指定的有限范圍內(nèi)的輸出。在這個設計的BP神經(jīng)網(wǎng)絡中我們選擇的是S型〔Sigmod型〕激活函數(shù)。S型激活函數(shù)將任意輸入值壓縮到(0,1)的范圍內(nèi),如圖3-3所示。帶有偏差的對數(shù)S型曲線帶有偏差的雙曲S型函數(shù)圖3-3S型激活函數(shù)此種激活函數(shù)常用對數(shù)或雙曲正切等一類S形狀的曲線來表示,如對數(shù)S型激活函數(shù)關(guān)系為:(3.12)而雙曲正切S型曲線的輸入輸出函數(shù)關(guān)系為:〔3.13〕S型激活函數(shù)具有非線性放大增益,對任意輸入的增益等于在輸入/輸出曲線中該輸入點處的曲線斜率值。當輸入由無窮增大到零時,其增益由0增至最大,然后當輸入由0增加至正無窮時,其增益又由最大逐漸降低至0,并總為正值。利用該函數(shù)可以使同一神經(jīng)網(wǎng)絡既能處理小信號,也能處理大信號。因為該函數(shù)的中間高增益區(qū)解決了處理小信號的間題,而在伸向兩邊的低增益區(qū)正好適用于處理大信號的輸入。一般地,稱一個神經(jīng)網(wǎng)絡是線性或非線性是由網(wǎng)絡神經(jīng)元中所具有的激活函數(shù)的線性或非線性來決定的。第4章數(shù)字識別系統(tǒng)的設計與實現(xiàn)4.1系統(tǒng)的流程幾種常用的解決問題的軟件開發(fā)方法,一種是對問題追述的方法,也就是從問題的結(jié)果分析起一步一步找到問題的源頭。另一種解決問題的方法是尋找容易解決的或者是己經(jīng)解決的相關(guān)的問題轉(zhuǎn)而應用到解決當前的問題來。但是當前軟件開發(fā)中更為流行和常用的方法是逐步求精法。這種方法是一種由頂向下的方法,也就是由一般到特殊的方法,它的根本思想是將原始的問題分割成假設干個子問題,子問題較整個大問題容易解決。本文程序設計采用逐步求精法,將整個系統(tǒng)問題分割成假設干個子問題來做,主要包括圖像數(shù)據(jù)輸入模塊GetDIB()、二值化模塊Threshold()、平滑濾波模塊Smooth()、分割模塊divide()、字符切分模塊CharSegment()、字符識別模塊CharRecognition()。首先分別對每個模塊進行單元測試分析和模塊測試,然后再組合成系統(tǒng),進行系統(tǒng)測試。圖4-1系統(tǒng)邏輯模型流程圖此圖為系統(tǒng)邏輯模型流程圖,其中細箭頭代表程序的進程,整個程序就是按上圖所示流程編寫的。4.2系統(tǒng)的軟件實現(xiàn)面對琳瑯滿目的各種開發(fā)環(huán)境和開發(fā)軟件,我沒有使用MATLAB,最主要的原因是VC對內(nèi)存的掌控很好,這對運算量極大的BP算法有著關(guān)鍵的作用,要知道,設計一個BP網(wǎng)絡不難,難的是設計一個高效,高速,穩(wěn)定的BP網(wǎng)絡,這就需要我們來對內(nèi)存進行優(yōu)化,對算法進行最大程度的開掘.否那么設計出來的BP算法將是不健壯、不穩(wěn)定、不實用的.一定要注意在設計時盡可能多的釋放掉不使用的內(nèi)存.Visua1C++6.0,是Microsoft公司開發(fā)的VisualStudio集成開發(fā)環(huán)境中功能最為強大、代碼效率最高的開發(fā)工共。利用VisualC++6.0可以兩種方式編寫Win32應用程序,一種方式是基于WindowsAPI的C編程方式,另一種是基于MFC的C++編程方式。C編程方式是傳統(tǒng)的、久經(jīng)考驗的編程方式,代碼的效率較高,但開發(fā)難度與開發(fā)的工作量都很大。而C++編程方式代碼運行效率相對較低,其開發(fā)難度小、開發(fā)工作量小、源代碼效率高,尤其Microsoft根底類庫〔MicrosoftFoundationClassLibrary,MFC〕為用戶提供了Windows95/NT環(huán)境下面向?qū)ο蟮某绦蜷_發(fā)界面,它提供了大量預先編寫好的類及支持代碼,用于處理多數(shù)標準Windows編程任務,因此大大簡化了Windows應用程序編寫工作。MFC類庫的優(yōu)越性表現(xiàn)在以下幾個方面:1、MFC幾乎完整地封裝了WindowsAPI函數(shù)。包括窗口函數(shù)、消息、控件、菜單、對話框、GDI對象、對象鏈接,以及多文檔界面等。2、MFC支持多線程,所有的應用至少有一個線程,這個線程由CWinApp類的對象創(chuàng)立,被稱為“主〞線程口為方便多線程編程,MFC還提供了同步對象類。3、MFC庫提供了自動消息處理功能。MFC庫自動處理每一個Windows消息,且每一條Windows消息被直接映射到一個進行處理的成員函數(shù)。4.2.1BMP圖像格式簡介程序中能夠進行處理的是灰度圖像。灰度圖是只含亮度信息,不含色彩信息的圖像,就像平時看到亮度由暗到明變化連續(xù)的黑白照片一樣。因此要表示灰度圖,就需要把亮度值進行量化,通常劃分成0到255共256個級別,0最暗(全黑),255最亮(全白),并將所有灰度圖像轉(zhuǎn)化為DIB(Device-IndependentBitmap設備無關(guān)位圖)位圖文件格式。位圖(BMP)文件中DIB的結(jié)構(gòu)由四局部組成:第1局部為位圖文件頭BITMAPFILEH-EADER,指定文件為BMP文件類型,并且指定了從文件頭到實際位圖數(shù)據(jù)的偏移字節(jié)數(shù);第二局部為位圖信息BITMAPINFOHEADER,其中說明了位圖包含的根本信息,如大小,寬度,高度,顏色位數(shù),水平和垂直分辨率等;第三局部調(diào)色板(Palette)保存顏色信息;第四局部就是實際的圖像數(shù)據(jù)。由于DIB位圖能獨立的保存固有的圖像信息,能在不同的系統(tǒng)中重現(xiàn)其圖像,故成為Windows環(huán)境中的根本圖像格式。由MFC中沒有設計一處理DIB位圖的類,因此,利用VisualC++進行DIB位圖編程時只能使用“非面向?qū)ο蟥暤姆椒?,即直接調(diào)用Win32SDK的有關(guān)API函數(shù),這是一個很大的缺陷,彌補的最好方法就是定義一個處理DIB位圖的專用類,比方一個名為CDib的類,在其中封裝必需的DIB數(shù)據(jù)成員和處理函數(shù)。但是在構(gòu)建CDib類時會遇到許多的困難,因為Win32SDK沒有提供多少直接處理DIB位圖的API函數(shù),僅支持一些重要的DIB訪問,在實際應用時很不夠,必須定義一套完整的DIB處理函數(shù)。但是Win32SDK中的DIBAPI函數(shù)是定義DIB處理函數(shù)集的根底,因此,還是要分析Win32SDK中的DIBAPI函數(shù),如表4.1所示。從這些函數(shù)中可以看出它們能完成DIB位圖的一些最根本的功能,如能申請到內(nèi)存,完成DIB位圖的構(gòu)造,能縮放顯示DIB于顯示器和打印機上,直接從磁盤文件中讀入位圖,返回該句柄,能設置和獲取位圖的顏色表。在構(gòu)造自己的CDib類時,也要以這些函數(shù)和功能為根底。表4-1Win32SDK中的DIBAPI函數(shù)函數(shù)功能GetDIBits從DDB中獲取位圖的圖象位,用于將DDB轉(zhuǎn)換為DIB格式SetDIBits設置DIB位圖的圖象位,用于將DIB轉(zhuǎn)換為DDB形式CreateDIBitmap用指定的DIB來創(chuàng)立DDB,并用DIB信息初始化位圖的圖象位SetDIBitsToDevice直接將DIB位圖的圖象位輸出到設備,用于顯示DIBStretchDIBits將DIB位圖映射輸出到設備的一個矩形區(qū)域,位圖可能被縮放CreateDIBSection創(chuàng)立一個可直接寫入的DIBGetDIBColorTable獲取DIB的顏色表SetDIBColorTable設置DIB的顏色表4.2.2CDib類的構(gòu)造一、CDib類設計的目標面向?qū)ο笤O計的重點是類的設計,而不是對象的設計,如果將對象比作房子,那么類就是房子的設計圖紙。對于C++程序而言,設計孤立的類比擬容易,難的是正確設置其基類及派生類。1、功能根據(jù)對DIB操作的分析,以及參照CBitmap的功能設計,CDib類的根本操作功能應該包括如下:〔1〕多種形式的構(gòu)造函數(shù),包括創(chuàng)立空DIB,從DIB句柄創(chuàng)立,從DIB數(shù)據(jù)塊指針創(chuàng)立及從屏幕或顯示創(chuàng)立等。〔2〕DIB文件的讀寫操作?!?〕DIB的顯示和縮放顯示?!?〕提供DIB的空間、顏色和格式特征等信息?!?〕DIB格式轉(zhuǎn)換和調(diào)色板操作?!?〕能獲取DIB位圖數(shù)據(jù)的句柄并且生成DIB數(shù)據(jù)的拷貝。2、父類由于MFC中已有一個支持DDB操作的CBitmap類,因此容易想到以CBitmap類作為基類派生出CDib類。但是這樣做有諸多的不適,首先,CBitmap類是為DDB的操作而設計的,其中沒有處理DIB的功能,故CDib類不能從中繼承任何可用的功能;其次,CBitmap類是從CGdiObject中派生出來的,CBitmap類以及它從CGdiObject類繼承來的數(shù)據(jù)成員和功能函數(shù)對CDib來說都是不適宜的,也是多余的。此外,CBitmap類沒有提供有效的文件操作機制,而DIB主要是一種“外部〞位圖,即它主要以文件形式進行存儲和交換,所以CDib類應該能很好的處理文件操作。MFC中的CObject類是MFC中其他大多數(shù)類的基類。它不但提供許多有用的特性,還包括對文件串行化的支持,運行時的類信息和對象診斷的輸出等。如果從CObject類來派生,那么可以繼承該類的這種特性。另外,CObject類具有最低限度的成員數(shù)據(jù)和函數(shù),從CObject類派生的類所花的代價是最低的,因此,采用CObject類作為CDib類的基類是很合理的。3、數(shù)據(jù)成員數(shù)據(jù)成員很少,只有四個,都定義為公有變量public:HDIBmhDib//DIB位圖句柄CPalette*m_pPalette//位圖調(diào)色板類成員對象指針CBitmap*m_pBitmap//bitmap類成員對象指針VVin32SDK使用句柄來表示操作內(nèi)存對象,因此,這里也定義了一個DIB句柄來表示DIB的內(nèi)存數(shù)據(jù)塊:#defineHDIBHANDLEHDIB定義為存儲BITMAPINFO結(jié)構(gòu)和位圖位數(shù)數(shù)據(jù)塊的內(nèi)存句柄,用GlobalLock鎖定HDIB得到DIB數(shù)據(jù)塊的地址指針,并可將該指針強制為LPBITMAPINF()或LPBITMAPINFOHEADER來使用,如HDIBhDIBLPBITMAPINFOlpbi;LPBITMAPINFOHEADERIpbih;Lpbi=(LPBITMAPINFO)GlobalLock(HDIB):Lpbih=(LPBITMAPINFOHEADER)lpbi;二、CDib類成員函數(shù)以下介紹的Win32SDKAPI函數(shù)和CDib類的數(shù)據(jù)成員是磚石,現(xiàn)在可以開始構(gòu)筑CDib類的成員函數(shù)也即DIB處理類的根基了,將定義的DIB處理函數(shù)分為以下幾類:初始化函數(shù)類,屬性函數(shù)類,顯示函數(shù)類,操作函數(shù)類,調(diào)色板函數(shù)類。初始化函數(shù)類用來創(chuàng)立DIB,讀入DIB數(shù)據(jù),保存DIB文件和釋放DIB內(nèi)存空間等;屬性函數(shù)是為了方便得到DIB的空間、顏色和圖像數(shù)據(jù)方面的信息如圖像的高度,寬度,數(shù)據(jù)塊地址等;操作函數(shù)類定義了對DIB文件的各類實際操作和變換,這個類的函數(shù)可以改寫DIB的數(shù)據(jù)所以是個核心函數(shù)類;調(diào)色板函數(shù)類完成對調(diào)色板的操作。DIB處理函數(shù)集的各個函數(shù)的名稱和功能說明如表4-2所示:表4-2DIB處理函數(shù)集各個函數(shù)函數(shù)類型函數(shù)名稱功能初始化函數(shù)CreateDIB創(chuàng)立一個空的DIBCreateDefaultDIB用當前的系統(tǒng)調(diào)色板創(chuàng)立一個空的DIBDestroyDIB釋放DIB內(nèi)存塊LoadDIB從DIB文件裝載DIB數(shù)據(jù)SaveDIB將DIB存到文件中ReadDIBFile讀DIB文件到內(nèi)存中屬性函數(shù)BytesPerLine獲取DIB每行所占的字節(jié)數(shù)DIBlockSize獲取DIB數(shù)據(jù)塊的大小DIBHeight獲取DIB的高度DIBWidth獲取DIB寬度DIBNumColors獲取DIB的顏色數(shù)DIBBitsCount獲取DIB的圖象顏色位數(shù)FindDIBBits獲取DIB數(shù)據(jù)塊的地址〔指針〕PaletteSize獲取DIB調(diào)色板的顏色表項數(shù)操作函數(shù)DIBToDIBSection將DIB數(shù)據(jù)塊轉(zhuǎn)換為DIBSELECTIONDIBSectionToDIB將DIBSELECTION轉(zhuǎn)換為DIB數(shù)據(jù)塊ConvertDIBFormat修改DIB的格式BitmapToDIB將DDB轉(zhuǎn)換為DIBChangeBitmapFormat修改DDB的格式DIBToBitmap將DIB轉(zhuǎn)換為DDBChangeDIBFormat基于當前的系統(tǒng)調(diào)色板修改DIB的格式Threshold圖象二值化CharSegment提取后的圖象字符切分Smooth圖象平滑CharUniform字符圖象規(guī)格化4.2.3程序設計相關(guān)內(nèi)容介紹1、首先建立一個用戶界面的菜單。菜單項具備三個關(guān)鍵字段:ID,Caption〔標題〕和Prompt〔提示〕。每個菜單項所對應的ID是唯一的,Caption字段中包含實際顯示在菜單中的文本,Prompt字段是用戶“瀏覽〞某個菜單項時希望顯示在窗口底端狀態(tài)欄中的文本。MFC使用框架窗口類從應用程序資源中創(chuàng)立幾個用戶界面元素。MFC默認的菜單項是屬于CMmainFrame類的,名稱為IDR_MAINFRAME.創(chuàng)立一個菜單資源后,下一步的運行ClassWizard,為各個菜單項創(chuàng)立代碼,ClassWizard將各個菜單項作為一個由C++類表示的獨立用戶界面元素。對于各個菜單項,必須確定它們都應該分別由哪些類處理,然后確定是否需要為COMMAND菜單消息,UPDATE_COMMAND_UI菜單消息編寫代碼。在系統(tǒng)中設置了新類CChildview,子窗口菜單由此新類來處理。對應的代碼都寫入了文件CChildView.cpp,而其對應的算法函數(shù)寫在文件mydiblib.h中,字符識別函數(shù)〔CodeRecognize〕在文件BP.h中。2、VC應用中很重要的一點是要學會如何調(diào)試程序,程序如此龐大如果不回調(diào)試程序,哪里出了錯是很難找到的。要學會用斷點來調(diào)試程序。VC++集成調(diào)試程序的兩個重要特征是將斷點插入到程序代碼中的能力以及逐步執(zhí)行〔一次執(zhí)行一條指令〕程序代碼的能力。在代碼中放置斷點的最簡單方式是將源代碼窗口中的文本光標移動到希望放置斷點的位置然后按F9設置此斷點。VisualStudio在相應的行左邊放置一個大紅點來表示斷點。對于簡單斷點來說有兩點是很重要的。首先,可以在源文件內(nèi)的任意位置設置斷點,如注釋行,括號等,然而,當在注釋行、括號等行設置斷點后VC++并不執(zhí)行編譯。其次,VC++允許在Diassembly窗口內(nèi)設置斷點。既可以啟用斷點,也可以禁用斷點。當程序中尋找活動斷點,同時程序以Debug〔調(diào)試〕模式執(zhí)行時,Breakpoints對話框在該斷點旁邊顯示對號。如果單擊斷點旁邊這一對號,那么斷點被禁用。VisualStudio將被禁用的斷點以空心紅圈的形式顯示在源代碼窗口中。除了使用斷點外,還可以使用Debug菜單上的Break選項隨時中斷程序執(zhí)行。然而,這樣的中斷從性質(zhì)上講是異步的,經(jīng)常在一系列嵌套的的系統(tǒng)函數(shù)內(nèi)中斷程序,在這種情況下,可以使用Debug菜單上的StepOut(步出)選項,從系統(tǒng)函數(shù)中走出來,直到到達代碼中的可標示位置。Debug菜單中的很多分步命令都有快捷鍵,可簡化程序的執(zhí)行。下表列出了Debug菜單上Step命令的快捷鍵。表4-3單步執(zhí)行命令的快捷鍵命令快捷鍵StepOverF10RuntoCursor(運行到光標處)Ctrl+F10StepInto〔步進到〕F11StepOut〔步出〕Shift+F114.3數(shù)字識別中的圖像預處理神經(jīng)網(wǎng)絡為數(shù)字識別提供一個強有力的手段。目前,在神經(jīng)網(wǎng)絡模式識別中根據(jù)對輸入樣本的表達方式的選擇有下面兩大類:一類是直接將數(shù)字圖像經(jīng)數(shù)值化處理之后得到的像素點原始樣本作為神經(jīng)網(wǎng)絡的輸入;另一類那么是對這種原始像素點構(gòu)成的原始輸入樣本再作進一步的預處理或變換。雖然,在某些情況下,人們采用第一類樣本表達獲得了較好的識別結(jié)果,但這種輸入方式,通常使得網(wǎng)絡分類器結(jié)構(gòu)的復雜程度大大增加,所以,對原始樣本進行預處理,已成為神經(jīng)網(wǎng)絡模式識別成功的一個很重要的方面。對于數(shù)字的預處理,人們己作了許多工作,但歸根結(jié)底有下面幾步:首先是將數(shù)字轉(zhuǎn)化為n*n像素點矩陣形式,再經(jīng)二值化處理,可以得到原始的輸入表達方式。接下來,對原始樣本表達進行一些常規(guī)變換,包括平滑、銳化、規(guī)格化和細化。而本文是通過大量的樣本訓練網(wǎng)絡,以到達預期的識別率。4.3.1數(shù)值化數(shù)字識別時,首先將印在紙上的數(shù)字經(jīng)過光電掃描產(chǎn)生模擬信號,再通過模數(shù)轉(zhuǎn)換變成表示灰度值的數(shù)字信號輸入計算機。紙張薄厚、潔白度、光潔度、書寫力度和筆劃質(zhì)量都要造成字形的變化,產(chǎn)生污點、飛白、斷筆、交連等干擾。因此,一般由掃描得到的數(shù)值化的字符還需要多種進一步的處理。4.3.2二值化二值化處理是將數(shù)字圖像轉(zhuǎn)化為由0和1表示的值像素矩陣形式,最簡單也是最原始的作法是將整個數(shù)字所在區(qū)域用n*n網(wǎng)格劃分,然后將數(shù)字筆劃通過的網(wǎng)格內(nèi)填1,不通過的網(wǎng)格內(nèi)填0,這樣就將整個數(shù)字變?yōu)橐粋€由二值構(gòu)成的矩陣。而在采用光電掃描儀對數(shù)字進行掃描輸入時,通常是將數(shù)字轉(zhuǎn)換為帶灰度值的數(shù)字信號輸入計算機。因而,二值化的工作不再是簡單的筆劃通過與否。在本設計中是先將256色位圖轉(zhuǎn)化為對應灰度值的灰度圖,再將灰度圖轉(zhuǎn)化為二值黑白圖象.設像素點(i,j)的灰度為g(i,j)。有劃的局部g(i,j)小,白背景局部g(i,j)大。二值化可以通過設定灰度閾值來完成,即當g(i,j)值比預定閾值大,看成背景,以0表示;否那么看成筆劃,以1表示。這樣,經(jīng)過二值化,各點重新表示為:〔4.1〕二值化的關(guān)鍵在于閾值T的選擇??紤]到各個樣本數(shù)字的灰度范圍的差異,可以采用不同的閾值進行處理。本設計中二值化選擇的閾值為250.常用于文字識別的閾值選擇方法有整體閾值二值化、局部閾值二值化和動態(tài)閾值二值化等。根據(jù)數(shù)字的特點和掃描得到的數(shù)字圖像的灰度差異,可以分別用上述不同確定閾值的方法進行二值化。4.3.3平滑實際獲得的圖像在形成、傳輸、接受和處理的過程中,不可防止地存在著外部干擾和內(nèi)部干擾,如光點轉(zhuǎn)換過程中敏感元件靈敏度的不均勻性,數(shù)字化過程的量化噪聲,傳輸過程中的誤差以及人為因素等,均會使圖像質(zhì)量變差,使圖像模糊。因此,消除噪聲,恢復原始圖像是圖像處理中的一個重要內(nèi)容。圖像平滑的目的有兩個:改善圖像的質(zhì)量和抽出對象的特征。平滑的方法有中值濾波,均值濾波等很多方法,本設計選擇的平滑技術(shù)是中值濾波法。中值濾波是一種對干擾脈沖和點狀噪聲有良好抑制作用,而對圖像邊緣能較好保持的非現(xiàn)行圖像增強技術(shù)。在一維形式下,中值濾波器是一個含有奇數(shù)個像素的滑動窗口,經(jīng)排序后,窗口像素序列為v=(L-1)/2,L為窗口長度,F(xiàn)i即為窗口像素的中值濾波輸出。記做Med{*}表示取窗口中值。如一窗口長度為5,像素灰度分別為{20,10,30,15,25},那么假設灰度級為30的像素為椒鹽噪聲〔表現(xiàn)為黑圖像上的白點,白圖像上的黑點〕,在經(jīng)過中值濾波后即被消除。一維中值濾波的概念很容易推廣到二維。這時取某種形式的二維窗口,將窗口內(nèi)像素排序,生成單調(diào)二維數(shù)據(jù)序列{Fjk}.類似于一維,二維中值濾波被輸出G(j,k)為(4.2)一般來說,二維中值濾波器比一維濾波器更能抑制噪聲。二維中值濾波器的窗口形狀可以有多種,如線狀,方形,十字形,圓形,菱形等〔見圖4-1〕。不同形狀的窗口產(chǎn)生不同的濾波效果,使用中必須根據(jù)圖像的內(nèi)容和不同的要求加以選擇。從以往的經(jīng)驗看,方形或圓形窗口適宜于外廓線繳長的物體圖像,十字形窗口優(yōu)選與有尖頂角物體的圖像。圖4-1中值濾波器常用窗口使用中值濾波器濾除噪聲的方法有多種,且十分靈活。一種方法是先使用小尺寸窗口,后逐漸加大窗口尺寸,直到中值濾波器的害處多于好處為止。另一種方法是一維濾波器和二維濾波器交替使用。此外還有疊代操作,就是對輸入圖像重復進行同樣的中值濾波,直到它不再有變化為止。中值濾波具有很多重要特性。1、對離散階躍信號,斜升信號不產(chǎn)生影響,連續(xù)個數(shù)小于窗口長度一半的高圖4-2中值濾波例如〔a〕階躍〔b〕斜坡〔c〕單脈沖〔d〕雙脈沖〔e〕三脈沖〔f〕三角形離散脈沖將被平滑,三角函數(shù)的頂部平坦化〔見圖4-2〕2、令C為常數(shù),那么(4.3)3、中值濾波后,信號頻譜根本不變。4.3.4銳化圖像的銳化處理主要用于增強圖像中的輪廓邊緣,細化以及灰度跳變局部,形成完整的物體邊界,到達將物體從圖像中別離出來或?qū)⒈硎就晃矬w外表的區(qū)域檢測出來的目的。它是早期視覺理論和算法中的根本問題,也是中期和后期視覺成敗的重要因素之一。與圖像的平滑處理一樣,圖像的銳化也有很多處理方法,如針對平均或積分運算使圖像模糊,可逆其道而采取微分運算,使用高通濾波器優(yōu)化高頻分量,抑制低頻分量,提高圖像邊界清晰度等。在設計中我選擇使用了梯度銳化法.對圖像函數(shù)F(j,k),其在點(j,k)上的梯度定義為矢量(4.4)G(j,k)的幅度為(4.5)在后面的討論中,均以上式為根底。現(xiàn)在約定把G[F〔j,k〕]叫做梯度,而不再說G[F〔j,k〕]是G[F〔j,k〕]的幅度。對離散圖像而言,可用差分近似表示上式,一種常用的近似關(guān)系式是:(4.6)為便于編程和提高運算精度,在某些場合可進一步簡化為:(4.7)還有一種羅伯特梯度的算子,表達式是:(4.8)對應的絕對值表達式是:(4.9)〔4.7〕式和〔4.8〕式中各因子之間的關(guān)系分別如圖〔a〕〔b〕所描述。對照此圖是很容易記住梯度差分表達式的?!?.7〕式是沿水平軸和垂直軸兩個方向的微分和,〔4.8〕是取正反旋轉(zhuǎn)45度兩個方向的微分的和。(a)水平梯度銳化法(b)羅伯特銳化法圖4-3二維梯度的兩種差分算法知道了梯度G[F(j,k)]后,如何確定銳化輸出G(j,k)呢?下面提供了幾種思路:1、直接以梯度值代替G(j,k)=G[F(j,k)](4.10)這種方法直截了當,簡單。但是F(j,k)均勻的區(qū)域,因梯度值G[F(j,k)]很小〔極端情況下甚至為0〕,會表現(xiàn)出暗的特性,這在有些場合是不適宜的。2、輔以門限判斷(4.11)該方法根本上不破壞圖像背景,又可增強圖像邊緣。3、給邊緣規(guī)定一個特定的灰度級,即〔4.12〕4、給背景規(guī)定特定的灰度級〔4.13〕5、二值圖像〔4.14〕梯度是向量,各向同性,梯度方向?qū)cF(j,k)最大變化率方向上,即〔4.15〕梯度幅度比例于相鄰像素的灰度級差值。在灰度陡變區(qū)域,梯度值大;在灰度相似區(qū)域,梯度值??;在灰度級為常數(shù)的區(qū)域,梯度為0。熟悉梯度的這些性質(zhì),根據(jù)不同的目的選擇不同的算法,就能獲得滿意的銳化效果。4.3.5字符切分數(shù)字識別常用于郵政編碼的自動識別和支票的檢驗等。在這些應用中,給出的數(shù)字往往是互相牽連,并且常帶有覆蓋相交叉,所以為了獲得可以進行識別的輸入樣本表達,必須進行數(shù)字之間的別離,消除不必要的記號和符號。經(jīng)過文字切分得到的一個個獨立的樣本,可以用于進一步的處理。通??梢砸罁?jù)兩種原那么進行分割。一是依據(jù)各個象素點的灰度不連續(xù)性進行分割;一是依據(jù)同一區(qū)域具有相似的灰度(或組織特性)這一特征,尋求不同區(qū)域之邊界。前者稱為基于點相關(guān)的分割技術(shù),后者稱為基于區(qū)域相關(guān)的分割技術(shù)。本設計中選擇使用基于灰度閾值的全局閾值化方法.這是一種最常用、同時也是最簡單的分割方法,它特別適用于對象和背景占據(jù)不同灰度級范圍這類圖像。此時,我們只要選取一個適當?shù)幕叶燃夐撝?,然后將每個象素灰度和它進行比擬。超過閾值的重新分配以最大灰度(例如255),低于閾值的分配以最小灰度(例如0),那么,我們就可以組成一個新的二值圖像,并成功地把對象從背景中顯露出來。在分割之前進行背景平滑和噪聲消除,常常能改善分割的性能。4.3.6規(guī)格化由于樣本數(shù)字大小不一,為了便于提取數(shù)字特征,需要對樣本進行尺寸大小規(guī)一化,或者說是將數(shù)字的長度和寬度都調(diào)整到充滿整個n*n的網(wǎng)格之中。4.3.7細化在傳統(tǒng)的模式識別中,對于數(shù)字的特征提取往往是從字形結(jié)構(gòu)的提取入手。因而人們認為在二值化的字符圖像中,對識別有價值的字符特征主要集中在字符的輪廓或者骨架上?;谶@種認識,在經(jīng)過以上幾個步驟的處理,得到干凈、平滑、標準的樣本集合之后,往往要進行細化。即將字符中的粗細不等的筆劃變換成只有一層像素點構(gòu)成的統(tǒng)一的筆劃。細化的根本原理都是從字的邊界開始逐層移去黑點,直到尋找到一個集合,此集合與其邊界相重合,這種方法被稱為脫殼算法。關(guān)于細化及快速細化的算法有許多,比方快速細化算法QA,Rutorit算法(簡稱RA),Hildith算法(簡稱HA)等。經(jīng)過上面幾個步驟的預處理變換,那么可以獲得一種簡單像素點輸入樣本表達。對傳統(tǒng)的識別系統(tǒng),這種樣本不能直接進行識別,以上的步驟只是為特征提取選擇打下根底。而對于神經(jīng)網(wǎng)絡識別系統(tǒng),這種簡單樣本表達可以直接輸入進行模式識別。但是,這種簡單的原始二值表達式在代表數(shù)字時有下面幾點缺乏:1、樣本維數(shù)很大,而中間許多特征不一定有用;2、沒有將那些真正反映數(shù)字特點的特征突出出來;3、對于不同數(shù)字的外圍或邊緣及主干特征并沒有考慮進去,這樣對一些有相似局部的數(shù)字容易出現(xiàn)誤識。由于上面三方面的原因,在神經(jīng)網(wǎng)絡模式識別中,我們要用帶污染的輸入量去訓練神經(jīng)網(wǎng)絡,使其具有一定的抗干擾能力,這樣對所要識別的數(shù)字,能到達更好的識別率。4.4BP網(wǎng)絡在數(shù)字識別中的應用BP算法的流程圖如以下圖所示。初始化初始化給定輸入向量和目標輸出求隱層、輸出層各單元輸出求實際輸出與目標值的偏差ee滿足要求?計算隱層誤差單元求梯度誤差權(quán)值調(diào)整全部e滿足?結(jié)束SHAPEYNNY圖4-4BP算法流程圖BP算法在數(shù)字識別中的應用流程圖:采樣數(shù)據(jù)采樣數(shù)據(jù)輸入判斷語句映射關(guān)系初步的神經(jīng)網(wǎng)絡模型學習結(jié)束?學習樣本穩(wěn)態(tài)時的神經(jīng)網(wǎng)絡模型輸出判斷語句輸入屬于給定設計空間的新的輸入變量集圖4-5BP算法在數(shù)字識別中的應用4.4.1BP神經(jīng)網(wǎng)絡的設計將要識別的目標是從0到9的10個數(shù)字字符。每個字符被分成8*8的小塊進行數(shù)字化,分別用一個向量來表示。10個含64個元素的輸入向量被定義為一個輸入向量矩陣,向量代表某個數(shù)字,其相應有數(shù)的位置值為1,而其他位置值為0。共有兩類這樣的數(shù)據(jù)作為輸入:一類是在理想的狀態(tài)下的信號;另一類是隨機方式生成含有噪聲的信號。如圖4-6所示。圖4-6理想信號〔上〕含有噪音的信號〔下〕網(wǎng)絡通過輸出一個具有10個元素的輸出向量來區(qū)分這些數(shù)字字符,例如字符1對應的向量,其第一個位置的元素值為1,而隨后位置的元素值都是0。確定好輸入輸出后可進行網(wǎng)絡結(jié)構(gòu)的設計。第1層為輸入層,根據(jù)以待識別的數(shù)據(jù)分析可確定神經(jīng)網(wǎng)絡輸入層有64個節(jié)點;第2層為隱含層,一般依靠經(jīng)驗和嘗試的方法來確定節(jié)點數(shù)目,第3層為輸出層,由目標輸出為含有10個數(shù)據(jù)的向量可知該層有10個節(jié)點。選擇了開發(fā)環(huán)境就要設計網(wǎng)絡。設計訓練一個神經(jīng)網(wǎng)絡能夠識別10個數(shù)字字母的網(wǎng)絡,意味著每當給訓練過的網(wǎng)絡一個表示某一數(shù)字的輸入時,網(wǎng)絡能夠正確地在輸出指出該數(shù)字,那么很顯然,該網(wǎng)絡記憶住了所有10個數(shù)字。神經(jīng)網(wǎng)絡的訓練應當是有監(jiān)督地訓練出輸入端的10組分別表示數(shù)字0到9的數(shù)組,能夠?qū)鲚敵龆?到9的具體的位置。首先必須將每個數(shù)字進行數(shù)字化處理,以便構(gòu)造輸入樣本。即首先要選擇一種編碼方式.在這里可以采用行編碼和列編碼,但經(jīng)過大量的試驗說明,這兩種編碼方式的抗干擾性能不佳。我最終選擇的還是點陣直接0-1編碼方式.比方,對于數(shù)字0,可以編碼為:0011111000100010001000100010001000100010001000100010001000111110這樣很容易確定該BP網(wǎng)絡的輸入為64維.當數(shù)字數(shù)據(jù)混入噪聲時,可以看作是對0,1數(shù)據(jù)進行簡單的隨機反轉(zhuǎn).比方說,要參加7%的噪聲,那就可以對4個0或者1進行反轉(zhuǎn),翻轉(zhuǎn)哪一個這里是隨即的.經(jīng)過干擾后0的編碼為:0011111000100010001000100010011000100010001000100011101100111110圖中,斜體局部就是噪聲.另外一個很重要的需要考慮的因素是:所要設計的網(wǎng)絡應當具有抗干擾能力,即設計出的網(wǎng)絡應當能夠處理嗓聲。具有在由一定不標準的輸入情況下辨識出正確的數(shù)字輸入的能力。將干擾嗓聲進行數(shù)字化處理后即變成具有平均值為0--0.2之間變化的隨機值。接下來來確定輸出層的神經(jīng)元個數(shù).在輸出層,因為0-9共10個數(shù)字,最簡單就是確定10個輸出層.所以確定輸出層有10個神經(jīng)元。遵循一般的,我在隱層中使用了處處可微分的Sigmoid函數(shù).Sigmoid函數(shù)已經(jīng)在第三章中介紹過,這里不在贅述。4.4.2BP神經(jīng)網(wǎng)絡的實現(xiàn)設計了BP神經(jīng)網(wǎng)絡,有64個輸入層,10個輸出層,激活函數(shù)使用Sigmoid函數(shù)。接下來就要確定網(wǎng)絡的具體參數(shù)以實現(xiàn)最終的結(jié)果。隱層神經(jīng)元數(shù)目確實定,是BP算法設計的關(guān)鍵,一般來說,在做類似于函數(shù)逼近的課題時,隱層的神經(jīng)元越多,那么逼近就越精確.但對于當前的這個模式分類的題目,隱層神經(jīng)元的數(shù)目必須要適當?shù)倪x取,即不能過多也不能過少,如果隱層的神經(jīng)元過多,一來會大大的加大訓練時間,二來,雖然神經(jīng)元的增多可以更加精確的描述分類判別的空間的界限,但同時,也造成網(wǎng)絡的容錯能力下降。這對于我們當前這個0-9數(shù)字識別是極為不利的.當然,神經(jīng)元數(shù)目過少的時候,又無法滿足分類的要求.編程證明,當隱層神經(jīng)元數(shù)目超過25的時候,網(wǎng)絡的訓練時間將無法忍受,同時抗噪聲能力大大降低;當神經(jīng)元數(shù)目低于5時,系統(tǒng)誤差無法收斂到滿意的值,又造成識別率過低。經(jīng)過反復的試驗測定,比照,我認為隱層的神經(jīng)元的數(shù)目為8-15為佳。小于8個神經(jīng)元的時候,網(wǎng)絡輸出誤差就太大了,大于15個神經(jīng)元的時候,識別率又過低。系統(tǒng)誤差是系統(tǒng)進行訓練的目標。當系統(tǒng)的輸出誤差小于這個允許的誤差的時候即停止訓練。誤差選擇過大,將造成系統(tǒng)識別率過低;誤差選擇過小,會大大延長訓練時間,是一種浪費。這里,也要通過屢次的比擬分析得到最正確的允許誤差。訓練步長的選擇也是BP網(wǎng)絡設計的關(guān)鍵所在.訓練步長過長,那么可能造成算法無法收斂;步長過短,一來加大了訓練時間,二來很容易陷入所謂的局部極小值。4.5識別系統(tǒng)運行的結(jié)果本系統(tǒng)軟件是基于VC++6.0為開發(fā)平臺下采用文檔/視圖結(jié)構(gòu)來構(gòu)建的,便于將數(shù)據(jù)的管理和顯示隔離開來,其界面如以下圖4-7。能完成圖像預處理、訓練網(wǎng)絡、字符識別等等。識別前先要確定歸一化的長度和寬度,還要設定BP訓練網(wǎng)絡的參數(shù),界面如圖4-8、4-9所示。圖4-6識別的界面圖4-7歸一化界面圖4-8網(wǎng)絡參數(shù)設置框4.6系統(tǒng)設計中遇到的問題與結(jié)果分析1、數(shù)字圖像規(guī)格化中如何確定規(guī)格化后數(shù)字的長寬取值是一個重要的問題。假設長寬取得過小,規(guī)那么化后的字符圖像容易變形;相反取得過大,那么使得后期的模板匹配和神經(jīng)網(wǎng)絡的特征提取量增加,另外長寬還要滿足一定的比例。在設計中我選擇的長寬比例為2:1。2、數(shù)字圖像識別網(wǎng)絡中如何確定網(wǎng)絡隱層個數(shù)也是一個重要的問題。隱層個數(shù)取的不對就可能訓練不出來,導致識別結(jié)果也不正確。在設計中我選擇10個隱層不變。3、圖像的去噪濾波問題。噪聲在圖像中不可防止,整個系統(tǒng)中有幾次需要對圖像進行降噪處理,例如二值化處理后,字符圖像切分之前的降噪處理等。針對不同的情況采用了不同降噪的方法,如二值化后為了消除大量的斑點噪聲而采用數(shù)學形態(tài)學的運算一方面完成降噪處理另一方面有利于后期定位分割處理。4、參數(shù)的設置問題。識別結(jié)果總是不盡理想,由于參數(shù)設置的不同,結(jié)果總是有差異,經(jīng)總結(jié)設置的誤差越小,相關(guān)系數(shù)越小,訓練樣本的次數(shù)越多,當識別數(shù)字時的結(jié)果就越正確。當系數(shù)設置不好時,如誤差過小,或相關(guān)系數(shù)過小,會導致訓練時間過長或者網(wǎng)絡訓練陷入死循環(huán),訓練不出來。由于這是一個10類數(shù)字區(qū)分問題,最終決定使用十個隱層,允許誤差在0.001-0.2之間,訓練步長設定在0.01-0.3之間.5、訓練網(wǎng)絡的問題。在數(shù)字識別時,要先訓練網(wǎng)絡,但系統(tǒng)中網(wǎng)絡的訓練不能一次到位,根本上訓練一次網(wǎng)絡之后最進的幾次識別精度比擬高,當識別幾次之后,精度就在不斷下降。這是一個未解決的問題??傊?,這個系統(tǒng)的識別結(jié)果有的時候不是很穩(wěn)定,如不同的數(shù)字設置的參數(shù)就要不同,不能用同一個參數(shù)對所有的數(shù)字都到達很高的識別精度。但系統(tǒng)總的識別正確率在90%左右。這個系統(tǒng)還有很多不完善的地方,還有待于利用更好的算法進行改良。4.7系統(tǒng)設計的調(diào)試與心得1、這是我第一次采用面向?qū)ο缶幊蹋睦锔杏|頗多,也第一次真正體會到VC++功能的強大,用戶界面設計簡單高效,強大的類庫支持,調(diào)試功能的強大,它采用斷點技術(shù)動態(tài)跟蹤程序的運行,極大地方便了程序員及時了解內(nèi)存變化情況、變量值現(xiàn)況及每個語句對變量所產(chǎn)生的影響,其單步運行方式便于程序員及時準確的發(fā)現(xiàn)某些潛伏性的錯誤并現(xiàn)場更正。2、提高程序效率。程序的效率包括兩個方面一是時間效率,另一個是空間效率。程序的時間效率是指運行速度,空間效率是指程序占用內(nèi)存或者外存的狀況。提高程序效率先要優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,在優(yōu)化執(zhí)行代碼,在本程序中構(gòu)造CDib類封裝數(shù)據(jù)成員和成員函數(shù)使得操作DIB位圖簡捷明了。有時候時間效率和空間效率可能對立,此時應當分析哪個更為重要,做出適當?shù)恼壑?。如有時需要多花費些內(nèi)存來提高性能,同時不要一味地追求程序的效率,應當在滿足正確性、可靠性、健壯性、可讀性等質(zhì)量因素的前提下,設法提高程序的效率。3、編程的標準化。這包括命名和程序書寫的標準。命名標準是由于Windows的程序一般很長,容易忘記所有變量的含義,為了幫助記憶,Windows中有個約定叫做匈牙利表示法(Hungariannotation).該命名規(guī)那么的主要思想是“在變量和函數(shù)名中參加前綴以增進人們對程序的理解〞。例如所有字符變量前均加ch前綴,假設是整型變量那么追加i的前綴。程序中不要出現(xiàn)標識符完全相同的局部變量和全局變量,容易使人誤解等,也要盡量防止名字中出現(xiàn)數(shù)字編號。程序書寫版式雖然不會影響程序的功能,但會影響可讀性,程序的版式追求清晰、美觀,是程序風格的重要構(gòu)成因素。4、面向?qū)ο蟪绦蛟O計的優(yōu)勢。C++是一種面向?qū)ο蟪绦蛘Z言主要有封裝性(Encapsulation)、繼承性(Inheritance)、多態(tài)性(Polymorphism)等特點。封裝把數(shù)據(jù)與操作結(jié)合成一體,使程序結(jié)構(gòu)更加緊湊,同時防止了數(shù)據(jù)紊亂帶來的調(diào)試與維護的困難;繼承增強了軟件的可擴充性,并為代碼重用提供了強有力的手段;多態(tài)性使程序員在設計程序時可以對問題進行更好的抽象,以設計出實用性和維護性俱佳的程序,這些都顯示了強大的優(yōu)越性。5
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程審計合同
- 2025版實習生實習期間實習單位培訓責任協(xié)議3篇
- 寫字樓電梯管理協(xié)議
- 2025個人貨車租賃合同書
- 建筑工程:車庫雨棚施工合同范本
- 家政服務伸縮縫安裝施工協(xié)議
- 2025版勞動合同補充協(xié)議范本匯編3篇
- 2024年教育培訓機構(gòu)廣告合作合同范本3篇
- 自建房屋建筑設備租賃合同
- 證券投資聯(lián)合體投標協(xié)議模板
- 信陽市光山縣2023-2024學年七年級上學期期末數(shù)學測試卷(含答案)
- 抽沙船施工方案
- 內(nèi)蒙古蘇尼特右旗銅鉛鋅礦選礦試驗報告
- 諾如病毒檢測技術(shù)培訓
- 物業(yè)工程維修作業(yè)安全操作指南
- 自考05627職業(yè)輔導個人筆記
- 昆山通海中學小升初考試試卷
- 成人高等教育行業(yè)營銷方案
- 活動義齒(設計)課件
- SA8000-2014社會責任績效委員會SPT組織架構(gòu)、職責和定期檢討及評審會議記錄
- 部編版六年級語文上冊《認識分號》教學課件
評論
0/150
提交評論