模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)_第1頁
模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)_第2頁
模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)_第3頁
模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)_第4頁
模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

...wd......wd......wd...模板匹配算法的字符識別系統(tǒng)研究與實現(xiàn)自從計算機問世以來,讓機器具有模式識別能力一直是計算機科學(xué)家們的努力方向。研究說明,對視覺和聽覺信息的處理過程,不僅僅是一個感知過程,也是一個認知過程。因此,研究模式識別,是理解人類智能的本質(zhì)的重要途徑。字符識別是一個傳統(tǒng)和典型的模式識別問題,脫機手寫數(shù)字識別是一個典型的大類別的模式識別問題。手寫體數(shù)字具有不同字符字型相差不大、一樣字符有多種不同寫法、數(shù)字沒有上下文關(guān)系等等特點,使得脫機手寫體數(shù)字識別成為識別領(lǐng)域最大的難題和最終的目標。在這種大類別識別的研究中,傳統(tǒng)上大多采用模板匹配的方法來解決問題。而在模板匹配算法中,得計算其特征值。圖像需要經(jīng)過二值化,細化等預(yù)處理。關(guān)鍵字模板匹配;特征值;細化;二值化引言手寫數(shù)字識別(HandwrittenNumeralRecognition)是光學(xué)字符識別技術(shù)(OpticalCharacterRecognition,簡稱OCR)的一個分支,它研究的對象是:若何利用電子計算機自動識別人手寫在紙上的阿拉伯數(shù)字。在整個OCR領(lǐng)域中,最為困難的就是脫機手寫字符的識別。到目前為止,盡管人們在脫機手寫英文、漢字識別的研究中已取得很多可喜成就,但距實用還有一定距離。而在手寫數(shù)字識別這個方向上,經(jīng)過多年研究,研究工作者已經(jīng)開場把它向各種實際應(yīng)用推廣,為手寫數(shù)據(jù)的高速自動輸入提供了一種解決方案。手寫數(shù)字識別作為模式識別領(lǐng)域的一個重要問題,也有著重要的理論價值:(1).阿拉伯數(shù)字是唯一的被世界各國通用的符號,對手寫數(shù)字識別的研究基本上與文化背景無關(guān),這樣就為各國,各地區(qū)的研究工作者提供了一個施展才智的大舞臺。在這一領(lǐng)域大家可以探討,對比各種研究方法。(2).由于數(shù)字識別的類別數(shù)較小,有助于做深入分析及驗證一些新的理論。這方面最明顯的例子就是人工神經(jīng)網(wǎng)絡(luò)------相當一局部的ANN模型和算法都以手寫數(shù)字識別作為具體的實驗平臺,驗證理論的有效性,評價各種方法的優(yōu)缺點。(3).盡管人們對手寫數(shù)字的識別已從事了很長時間的研究,并已取得了很多成果,但到目前為止機器的識別本領(lǐng)還無法與人的認知能力相比,這仍是一個有難度的開放問題。(4).手寫數(shù)字的識別方法很容易推廣到其它一些相關(guān)問題棗一個直接的應(yīng)用是對英文這樣的拼音文字的識別。事實上,很多學(xué)者就是把數(shù)字和英文字母的識別放在一塊兒研究的。人類認知事物的過程中,視覺起到了舉足輕重的作用。視覺是人類最高級的感知器官,它不僅指對光信號的感受,還包括了對視覺信息的獲取、傳輸、處理、存儲與理解的全過程。隨著工業(yè)自動化的開展,機器視覺作為一種應(yīng)用系統(tǒng)逐漸得到完善和開展。機器視覺就是用機器代替人眼來做測量和判斷。其特點是能夠提高生產(chǎn)的柔性和自動化程度,在一些不適合人工作業(yè)的不安全工作環(huán)境或人工視覺難以滿足要求的場合,常用機器視覺來替代人工視覺;同時在大批量工業(yè)生產(chǎn)過程中,用人工視覺檢查產(chǎn)品質(zhì)量效率低且精度不高,用機器視覺檢測方法可以大大提高生產(chǎn)效率和生產(chǎn)的自動化程度。而且機器視覺易于實現(xiàn)信息集成,是實現(xiàn)計算機制造的根基技術(shù)。在機器視覺中,常常需要從圖像背景中把感興趣的物體檢測出來,模板匹配是最常用也是最基本的方法。隨著信號處理技術(shù)和計算機技術(shù)的不斷開展,模板匹配在工業(yè)檢測、衛(wèi)星遙感、半導(dǎo)體封裝、文字識別、導(dǎo)航制導(dǎo)、醫(yī)學(xué)X射線圖片處理、氣象云圖分析、光學(xué)和雷達的圖像模板跟蹤、工業(yè)流水線的自動監(jiān)控、工業(yè)儀表的自動監(jiān)控、資源分析、交通管理、圖像數(shù)據(jù)庫檢索以及景物分析中的變化檢測等領(lǐng)域應(yīng)用越來越廣泛??梢?,匹配技術(shù)己經(jīng)成為機器視覺和眾多領(lǐng)域中不可或缺的組成局部,對圖像匹配技術(shù)進展探索研究勢在必行。在下面各章我將以一個字符識別系統(tǒng)為例,就字符識別概述、模板匹配算法及改良、圖像預(yù)處理、系統(tǒng)的具體實現(xiàn)等方面進展描述。緒論。模板匹配算法及改良。圖像的預(yù)處理。系統(tǒng)的設(shè)計與實現(xiàn)。系統(tǒng)運行及測試。完畢語局部對本次畢業(yè)設(shè)計做出總結(jié)。目錄摘要………………….2ABSTRACT………….3引言…………………4第一章緒論1.1課題研究背景意義…………71.2字符識別概述………………71.3字符識別分類………………81.4研究對象及目標……………81.4.1研究的對象…………......81.4.2研究的目標…………......8第二章模板匹配算法及改良2.1模板匹配算法描述…………..92.2模板匹配算法的數(shù)學(xué)描述…………………..102.3算法的改良及圖示……………11第三章圖像的預(yù)處理3.1圖像的平滑去噪……………..143.2BMP圖像的存儲構(gòu)造……….153.3顏色處理……………………..173.4圖像的二值化………………..173.5圖像的細化…………………..183.5.1細化算法的定義……….......183.5.2細化的要求……………......193.5.3Hilditch算法描述………......19第四章系統(tǒng)的設(shè)計與實現(xiàn)4.1VisualC++6.0介紹…………...214.1.1環(huán)境安裝及選擇的原因……………….......214.1.2MFC概述……………….......214.2系統(tǒng)界面按扭的生成………....214.3模板計算的實現(xiàn)…………….....234.3.1模板計算設(shè)計思想…………………...234.3.2代碼實現(xiàn)………………........234.4樣本測試的實現(xiàn)……………….254.4.1樣本測試設(shè)計思想….…………………..…..254.4.2代碼實現(xiàn)……………………25第五章系統(tǒng)運行及測試5.1系統(tǒng)的運行…………………….285.2系統(tǒng)的測試…………………….285.3系統(tǒng)的評價…………………….30完畢語…………………..30參考文獻………………..30致謝語…………………..31附錄局部代碼清單…………………..31第一章字符識別概述1.1課題研究背景意義在機器視覺中,常常需要從圖像背景中把感興趣的物體檢測出來,模板匹配是最常用也是最基本的方法。隨著信號處理技術(shù)和計算機技術(shù)的不斷開展,模板匹配在工業(yè)檢測、衛(wèi)星遙感、半導(dǎo)體封裝、文字識別、導(dǎo)航制導(dǎo)、醫(yī)學(xué)X射線圖片處理、氣象云圖分析、光學(xué)和雷達的圖像模板跟蹤、工業(yè)流水線的自動監(jiān)控、工業(yè)儀表的自動監(jiān)控、資源分析、交通管理、圖像數(shù)據(jù)庫檢索以及景物分析中的變化檢測等領(lǐng)域應(yīng)用越來越廣泛??梢?,匹配技術(shù)己經(jīng)成為機器視覺和眾多領(lǐng)域中不可或缺的組成局部,對圖像匹配技術(shù)進展探索研究勢在必行。手寫數(shù)字識別有著極為廣泛的應(yīng)用前景,這也是受到研究者重視的一個主要原因。比方說在大規(guī)模的數(shù)據(jù)統(tǒng)計(如行業(yè)年鑒、人口普查等)中,在財務(wù)、稅務(wù)、金融領(lǐng)域中,在郵件分揀中均有著應(yīng)用。1.2字符識別概述計算機硬件的迅速開展以及計算機應(yīng)用領(lǐng)域的不斷開拓,急迫地需要計算機能夠更有效的感知諸如聲音、文字、圖像等人類賴以開展自身、改造環(huán)境所運用的信息資料。但就一般意義來說,目前計算機卻無法感知他們,鍵盤,鼠標等輸入設(shè)備,對于五花八門的外部世界顯得無能為力。雖然電視攝象機、圖文掃描儀、話筒等設(shè)備已解決了上述非電信號的轉(zhuǎn)換,并與計算機聯(lián)機,但這并不能使計算機真正知道所承受的終究是什么信息。計算機對外部世界感知能力的低下,成為開拓計算機應(yīng)用的瓶頸,也與其高超的運算能力形成強烈的比照。因此,著眼與提高計算機感知外部信息能力的學(xué)科----模式識別得到了迅速的開展。在模式識別領(lǐng)域中,手寫字符的識別是一個非?;顫姷难芯糠较?。但這方面的研究工作已有很多,其中不少成果得到了廣泛的應(yīng)用。但是由于手寫字符拓撲構(gòu)造的多樣性,目前已有的手寫字符識別體統(tǒng)在對無限制手寫字符進展分類時,始終存在這樣或那樣的缺陷。字符識別是模式識別領(lǐng)域中的一個非?;顫姷姆种?。這一方面是由于問題本身的難度使之成為一個極具挑戰(zhàn)性的課題。另一方面,是因為字符識別不是一項孤立的應(yīng)用技術(shù),其中包含了模式識別領(lǐng)域中其它分之都會遇到的一些最基本的和共性的問題。也正是由于字符識別技術(shù)的飛速開展,才促使識別領(lǐng)域和圖像分析開展為一個成熟的科學(xué)領(lǐng)域。字符識別技術(shù)的研究主要集中在特征抽取和模式匹配兩個方面,這一直是光學(xué)字符識別〔OCR〕技術(shù)的兩大關(guān)鍵所在。由掃描儀轉(zhuǎn)化后的字符二值圖像中各點的值,可以看成是該字符的一組特征。但由于這組特征的數(shù)量較大,而每個特征所含的信息量很少,因此有必要通過映射或變換的方法將信息集中到少量的特征中。這個過程就叫特征抽取。選擇穩(wěn)定的,分類能力強的特征是字符識別系統(tǒng)的核心。在識別過程中,對待識別的字符進展特征抽取后,就要將這些特征與特征庫中的特征進展對比,進展分類,這個過程稱為特征匹配。特征匹配方法可分為完全匹配法和近似匹配法。完全匹配法就是將為未知的字符的特征向量X與特征庫中的所有特征向量〔Yj,j=1,2,…n〕逐一進展對比,假設(shè)X=Yi,則Yi所對應(yīng)的字符就是識別結(jié)果。否則,就拒識。近似匹配法可進一步分為相關(guān)性匹配法,馳豫匹配法和樹搜索法。1.3字符識別的分類字符識別按輸入方式的不同可分為聯(lián)機識別〔也稱為在線識別〕和脫機識別〔也稱為離線識別〕。聯(lián)機識別是對所書寫的字符進展實時識別,即寫即識。所以聯(lián)機識別技術(shù)往往結(jié)合字符的筆劃順序來進展識別。脫機識別方法中,首先對已經(jīng)寫在紙上的字符通過掃描儀轉(zhuǎn)化為二值圖像,然后再對字符的二值圖像進展識別。書寫與識別可以分開進展。因此,脫機識別技術(shù)中不涉及字符的書寫順序。字符識別技術(shù)根據(jù)別識別的字符的類型通??煞譃橛∷Ⅲw識別和手寫體識別兩大類,而手寫體識別又可分為限制手寫體識別和無限制手寫體識別〔也稱為自由手寫體識別〕。印刷體識別是將印刷刊物上的字符掃描轉(zhuǎn)化為二值圖象并進展識別,是將已有刊物上的數(shù)據(jù)大量輸入計算機的最有效的方法。1.4研究的對象及目標1.4.1研究的對象我們的研究對象是無限制手寫數(shù)字和英文大寫字母,這方面目前已經(jīng)有大量的研究成果。但是,由于手寫字符,特別是英文大寫字母,拓撲構(gòu)造變化的多樣性,使得目前已有的一些字符識別系統(tǒng)在應(yīng)用于無限制手寫字符的分類時,始終存在這樣或那樣的缺陷。正因為如此,手寫字符識別對于廣闊研究者來說,是一個充滿魅力的領(lǐng)域。1.4.2研究的目標本文所要做的工作是:(1)建設(shè)一個無限制手寫數(shù)字脫機識別系統(tǒng),要求該系統(tǒng)具有至少90%以上的識別率,并且具備一定的穩(wěn)定性。(2)建設(shè)一個無限制手寫大寫英文字母脫機識別系統(tǒng),要求該系統(tǒng)作為手寫字符識別系統(tǒng)中的脫機識別局部,要求該系統(tǒng)具有至少85%以上的識別率,并且具備一定的穩(wěn)定性。第二章模板匹配算法及改良2.1模板匹配算法的描述在機器識別事物的過程中,常需把不同傳感器或同一傳感器在不同時間、不同成像條件下對同一景物獲取的兩幅或多幅圖像在空間上對準,或根據(jù)己知模式到另一幅圖中尋找相應(yīng)的模式,這就叫做匹配。假設(shè)將模式的圖像稱為模板(如圖2—1),在左側(cè)的待匹配圖像中找到對應(yīng)于右側(cè)模板圖像的過程即為待匹配圖像模板圖2—1待匹配圖像和模板圖像的示意圖模板匹配。因為只有當同一場景的兩幅圖像在同一坐標系下時,才能進展相似性對比,所以模板匹配的過程實際上也就是把一幅圖像變換到另一幅圖像的坐標系過程。圖像的模板匹配就是先給定一幅圖像,然后到另一幅圖像中去查找這幅圖像,如果找到了,則匹配成功。這看起來好似很簡單,因為我們一眼就能看出一幅圖中是否包含另一幅圖像,遺憾的是電腦并不具有人眼的強大的視覺的功能,因而需要電腦去判定一幅圖片中是否包含另一幅圖片是件不容易的事情。對于機器視覺系統(tǒng)而言,實現(xiàn)匹配首先要對圖像進展預(yù)處理。先計算模板圖片的特征值,并存儲到計算機中。然后計算待測試樣板圖片的特征值,與計算機中模板進展對比,運用匹配算法實現(xiàn)匹配。整個過程如圖2—2所示。模板圖片模板圖片預(yù)處理計算特征值存儲搜索策略待測試圖片預(yù)處理計算特征值匹配算法匹配結(jié)果顯示結(jié)果圖2—2圖像匹配系統(tǒng)示意圖從上述圖像匹配系統(tǒng)構(gòu)造圖中可以看出實現(xiàn)匹配要考慮以下幾方面內(nèi)容:(1)圖像的數(shù)據(jù)構(gòu)造類型:即描述像素灰度值和像素光學(xué)特征值之間的信息。(2)圖像的特征空間:由特征數(shù)據(jù)組成,這些特征數(shù)據(jù)可以是原始像素數(shù)據(jù),也可以是經(jīng)過處理后提取的圖像特征數(shù)據(jù)。(3)存儲:將圖像處理的一些相關(guān)信息資料存儲在計算機中,了解其在計算機中存儲的構(gòu)造。(4)匹配算法:是實現(xiàn)匹配的基本思想和方法,是解決匹配問題的關(guān)鍵所在。算法的實現(xiàn)涉及到相似性度量函數(shù)的正確選擇,相似性度量函數(shù)是兩幅圖像相對比的相似性度量,直接影響著匹配的速度和精度。(5)搜索方法:即遍歷圖像時的查找策略,正確的選擇搜索方法直接影響到匹配的速度。在基于圖像處理的應(yīng)用領(lǐng)域中,對于圖像匹配的研究可以說一直都是數(shù)字圖像處理技術(shù)和計算機視覺理解的重要研究內(nèi)容。圖像匹配在機器視覺、工業(yè)自動模式識別、醫(yī)學(xué)圖像的定位等方面都有著重要意義。2.2圖像匹配的數(shù)學(xué)描述以傳統(tǒng)的相關(guān)算法為例對圖像匹配進展數(shù)學(xué)描述。如圖2—3所示,搜索圖即待匹配圖像S為一方形區(qū)域,邊長為N,模板圖像T也是一個方形區(qū)域,邊長為M。設(shè)模板T疊放在搜索圖S上平移,模板覆蓋下的那塊搜索圖(即圖中的陰影局部)叫做子圖S,(i,j)為子圖S的左下角在搜索圖S中的坐標為:1<i,j<N-M+1。M—1N—M+1子圖SM—1N—M+1子圖SN—N—M+1XXXXMMM—1M—1MM(b)圖2—3被搜索圖(a)和模板(b)匹配過程如下所示:假設(shè)模板T從待匹配圖像S的左下角開場逐點遍歷圖像,對比T和S的內(nèi)容。如果兩者一致,則差值為零,可以用下面的測度來衡量T和S的內(nèi)容如果兩者一致,則差值為零,可以用下面的測度來衡量T和S的相似程度,如公式(1—1)所示。D(i,j)=--公式(1—1)展開后有:D(i,j)=--公式(1—2)公式(1—2)右邊第三項代表模板的總能量,與(i,j)無關(guān),是一個常數(shù);第一項為哪一項子圖能量,隨(i,j)而改變,T和S匹配時這一項的取值最大,可以用下面的互相關(guān)系作相似性測度:R(i,j)==--公式(1—3)或歸一化為:R(i,j)=--公式(1—4)顯然R(i,j)越大,模板T和子圖S就越相似,使得R(i,j)取得最大值的位置即為最正確匹配位置,(i,j)也就是我們要搜索的匹配點。2.3算法的改良及圖示根據(jù)以上對模板匹配的介紹,可以對字符圖像進展識別。但是求相似性度量函數(shù),求待匹配圖像和模板之間的相似性映射關(guān)系均對比復(fù)雜。上一節(jié)知識的介紹中,也看到了其過程對比麻煩。本系統(tǒng)中識別的圖像均為2036大小的。即模板圖像和待測圖像大小一樣。即會從圖像的左下角一直順著搜索一直至全圖完畢。而且映射關(guān)系及相似性函數(shù)均對比復(fù)雜,不是數(shù)量級上的關(guān)系。此時識別效率就不明顯。顯得木訥不靈巧。并非像前面介紹的在待測圖片中搜索,并返回得到匹配點。因此需要基于此模板匹配算法原理的根基上,對算法進展改良,才能更有效的去完成識別的功能及簡化其識別的過程。提高識別速度。即將圖片區(qū)域化。算法改良的思想:將圖片(34)分為12塊區(qū)域,具體區(qū)域的劃分如圖2—4所示。圖2—4算法改良的圖像示意圖再加上5條交線。共記有17個特征值。模板訓(xùn)練時,將數(shù)字模板圖片17個特征值的信息記下并存儲在數(shù)組中。當進展樣本訓(xùn)練的時候,用同樣的算法計算圖片中數(shù)字的17個特征值,并到計算機存儲區(qū)中去匹配,直接利用象素灰度值的差異,找到特征值最接近的一個圖片數(shù)字,便完成匹配識別的過程。得到匹配的結(jié)果。這樣變簡單多。算法改良后圖像的17個特征值計算的程序代碼,如附錄中所示。先讓計算機學(xué)習(xí),先計算素材T中模板圖片0~9總共10個數(shù)字的特征值,每一個特征值顯示如下所示:數(shù)字0的特征值為:4.000000,9.000000,9.000000,4.000000,6.000000,0.000000,0.000000,6.000000,4.000000,9.000000,9.000000,4.000000,2.000000,2.000000,2.000000,2.000000,2.000000,數(shù)字1的特征值為:0.000000,1.000000,0.000000,0.000000,6.000000,9.000000,9.000000,5.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,2.000000,1.000000,1.000000,數(shù)字2的特征值為:2.000000,3.000000,0.000000,5.000000,6.000000,0.000000,8.000000,6.000000,4.000000,9.000000,1.000000,3.000000,4.000000,3.000000,2.000000,1.000000,1.000000,數(shù)字3的特征值為:3.000000,0.000000,0.000000,3.000000,7.000000,7.000000,0.000000,6.000000,2.000000,2.000000,9.000000,6.000000,2.000000,4.000000,1.000000,1.000000,2.000000,數(shù)字4的特征值為:0.000000,0.000000,8.000000,0.000000,0.000000,10.000000,1.000000,6.000000,5.000000,5.000000,9.000000,4.000000,3.000000,11.000000,1.000000,2.000000,6.000000,數(shù)字5的特征值為:5.000000,7.000000,0.000000,2.000000,6.000000,6.000000,0.000000,6.000000,2.000000,2.000000,9.000000,4.000000,3.000000,3.000000,1.000000,1.000000,1.000000,數(shù)字6的特征值為:3.000000,9.000000,9.000000,3.000000,6.000000,6.000000,0.000000,6.000000,3.000000,2.000000,9.000000,5.000000,3.000000,3.000000,1.000000,2.000000,2.000000,數(shù)字7的特征值為:3.000000,0.000000,0.000000,0.000000,6.000000,4.000000,9.000000,4.000000,5.000000,5.000000,0.000000,0.000000,1.000000,4.000000,1.000000,1.000000,1.000000,數(shù)字8的特征值為:3.000000,8.000000,8.000000,4.000000,6.000000,2.000000,5.000000,6.000000,3.000000,8.000000,9.000000,5.000000,4.000000,4.000000,2.000000,6.000000,2.000000,數(shù)字9的特征值為:6.000000,8.000000,0.000000,0.000000,6.000000,7.000000,4.000000,5.000000,3.000000,6.000000,5.000000,0.000000,2.000000,10.000000,2.000000,1.000000,1.000000,第三章圖像的預(yù)處理一般說來,被觀測的圖像中含有這種各樣的噪聲和畸變,去掉這些噪聲和畸變,并將圖像變成某種標準形式進展加工,使得特征的提取和識別變的容易進展,這些處理稱為字符識別預(yù)處理。預(yù)處理是識別字符前的重要的一步,預(yù)處理的好壞直接影響著識別方法的難易及識別構(gòu)造的好壞。預(yù)處理工作做的好,使反映字符本質(zhì)特征的局部得到保存甚至突出出來,識別就容易進展,識別率高且識別速度快。反之,就會使識別變的困難,甚至造成識別誤識等不良后果。3.1圖像的平滑去噪平滑處理:字符圖像經(jīng)過平滑處理,能夠去掉孤立噪聲干擾,平滑筆劃邊沿??捎闷交惴?。設(shè)有33窗口如圖3—1所示:圖3—1平滑算法其中P為當前點,N0-N7為其8個鄰接點,平滑準則為:(1)當P為白時,N0,N2,N4,N6中至少有三個元素為黑,則,將P改為黑,否則不變。(2)當P為黑時,如果:(a)N4,N3,N2中至少有1個為黑,同時N6,N7和N0中也至少有一個為黑;(b)N2,N1,N0中至少有一個為黑,同時N4,N5和N6中也至少有一個為黑,則P不變,否則改為白。噪聲處理噪聲處理是一個重要而復(fù)雜的工作,通過掃描得到的字符圖像有時含有噪聲,這些噪聲可能是因為紙張質(zhì)量,污點,掃描通道的碎物或其它干擾造成的。這些噪聲的存在,增加了數(shù)字識別的難度,較容易導(dǎo)致誤識,拒識。如能較好地濾除噪聲,無疑會為正確識別帶來方便。由于阿拉伯數(shù)字0~9和英文大寫字母均為由連續(xù)筆劃組成的字符,因此假設(shè)檢測到字符掃描圖像中的筆劃數(shù)超過1,則認為該字符圖像中肯定存在噪聲或者斷筆,需加以去噪聲或連斷筆處理。將多余的噪聲去掉,或?qū)喙P連在主體筆劃上。而噪聲和斷筆的區(qū)分則可通過設(shè)定閾值來實現(xiàn)。具體的方法如下:設(shè)F(i,j),0im,0jn,,為二值圖象,令A(yù)為二值圖象平面上的一個NN的窗口區(qū)域,令A(yù)為包含A的(N+2)(N+2)的窗口區(qū)域,假設(shè)=0則我們認為窗口區(qū)域A中的筆劃為噪聲或斷筆。通過讓窗口A在圖像平面上浮動,可檢測到的筆劃判斷為噪聲;另N=5,并將檢測到的筆劃判斷為斷筆。對于檢測到的噪聲,只需要對應(yīng)的窗口區(qū)域A中所有的黑點變?yōu)榘c,即可將噪聲去除。3.2BMP圖像的存儲構(gòu)造設(shè)備無關(guān)位圖(Device-IndependentBitmap)DIB是標準的Windows位圖格式,DIB自帶顏色信息,因此調(diào)色板管理非常容易。任何運行Windows的計算機都可以處理DIB,它通常以BMP文件的形式被保存在磁盤中。BMP文件中包含了一個DIB,一個BPM文件大體上分成如下4個局部。如表3—1所示:文件信息頭BITMAPFILEHEARDER位圖信息頭構(gòu)造BITMAPINFOHEADER調(diào)色板Palette位圖象素數(shù)據(jù)DIBPixels表3—1WindowsDIB的組成位圖文件頭:主要用于識別位圖文件,下面是位圖文件頭構(gòu)造定義:TypedefstructtagBITMAPFILEHEADER{UNITbfType;DWORDbfSize;UNITbfReserved1;UNITbfReserved2;DWORDbfOffbits;}BITMAPFILEHEADER;其中,bfType表示文件類型,必須是0X424D,即值應(yīng)該是“BM〞,標志該文件是BMP位圖文件。bfSize的值是位圖文件的大小。bfReserved1和bfReserved2為保存字,不用考慮。bfOffbits為從文件頭到實際的位圖的數(shù)據(jù)的偏移字節(jié)數(shù)。位圖信息頭:包含了單個象素所用字節(jié)數(shù)以及描述顏色的格式,此外還包括位圖的寬度、高度、目標設(shè)備的位圖平面書、圖像的壓縮格式。以下是位圖信息頭構(gòu)造的定義:TypedefstructtagBITMAPINFOHEADER{DWORSbiSize;LONGbiWidth;LONGbiHeight;WORDbiplanes;WORDbiBicCount;DWORDbiCompression;DWORDbiSizeImage;LONGbiXPelPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;}BITMAPINFOHEADER;表3—2是對上述構(gòu)造體中各個成員的說明。構(gòu)造成員說明bitSize構(gòu)造BITMAPINFOHEADER的字節(jié)數(shù),〔40字節(jié)〕biWidth以象素為單位的圖像寬度biHeight以象素為單位的圖像的高度biplanes目標設(shè)備的位平面數(shù),必須是1,不用考慮biBitCount每個象素的位數(shù)biCompression圖像壓縮格式biSizeImage以字節(jié)為單位的圖像數(shù)據(jù)的大小biXPelsPermeter表示目標設(shè)備的水平分辨率biYpelsPerMeter表示目標設(shè)備的垂直分辨率biClrused調(diào)色板中實際使用的顏色數(shù)biClrImportant實現(xiàn)位圖時必須的顏色數(shù)表3—2其中,biBitCount分別有如下的意義:0:用在JPEG格式中。1:單色圖,調(diào)色板中含有兩種顏色,通常說的黑白二色圖。4:16色圖。8:256色圖,通常說的灰度圖。16:64K圖,一般沒有調(diào)色板,圖像數(shù)據(jù)中每兩個字節(jié)表示一個象素。24:16M真彩色圖,沒有調(diào)色板,圖像數(shù)據(jù)中每3個字節(jié)表示一個象素。32:4G真彩色,一般沒有調(diào)色板,每4個字表表示一個象素,相對24位真彩色圖而言,參加了一個透明度,即RGBA模式。biClrused:這個值通常為0,表示使用biBitCount確定的全部顏色。biClrImportant:這個值通常為0,表示所有顏色都是必須的。調(diào)色板(Palette):有些位圖需要調(diào)色板,有些位圖,如真彩色圖,不需要調(diào)色板,它們的BITMAPINFOHEADER后面直接是位圖數(shù)據(jù)。調(diào)色板實際上是一個數(shù)組,調(diào)色板是由顏色表項組成的,調(diào)色板構(gòu)造如下:TypedefstructtagRGBQUAD{BYTErgbBlue;BYTErgbGreen;BYTErgbRed;BYTErgbReserved;}RGBQUAD;需要注意的是,RGBQUARD構(gòu)造中的顏色順序是BGR。位圖數(shù)據(jù):在位圖頭文件、位圖信息頭、調(diào)色板之后,便是位圖的主體局部:位圖數(shù)據(jù)。根據(jù)不同的位圖,位圖數(shù)據(jù)所占據(jù)的字節(jié)數(shù)也是不同的,比方,對于8位位圖,每個字節(jié)代表了一個象素,對于16位位圖,每兩個字節(jié)代表了一個象素,對于24位位圖,每三個字節(jié)代表了1個象素,對于32位位圖,每4個字節(jié)代表了一個象素。3.3圖像的顏色處理在真彩色系統(tǒng)中,圖像的顏色與真實世界中的顏色非常自然逼近,人眼難以區(qū)分他們的差異,通常使用RGB表示法來表現(xiàn)真彩色圖像,每一個象素的值用24位表示,紅、綠、藍三原色的濃度分別用一個字節(jié)來表示。但對于僅能同時顯示16色或者256色的系統(tǒng),每一個象素僅能分別采用4位或者8位表示,象素值與真彩色的顏色值不能一一對應(yīng),這時就必須采用調(diào)色板技術(shù)。所謂調(diào)色板就是在16色或者256色的顯示系統(tǒng)中,由圖像出現(xiàn)的最頻繁的16中顏色或者256種顏色所組成的頻色表,顏色表中的值是某種顏色在顏色查找表中的索引值。當需要對顏色位數(shù)進展轉(zhuǎn)換時,可用八叉樹顏色量化算法進展轉(zhuǎn)換。這種方法首先掃描所有的象素,每遇到一種新的顏色就把它放到八叉樹中,并創(chuàng)立一個葉子節(jié)點,圖像掃描完畢后,如果葉節(jié)點的數(shù)量大于調(diào)色板所需的顏色數(shù),就將某些葉節(jié)點合并到其上一層節(jié)點中(父節(jié)點)去,并將父節(jié)點變?yōu)槿~節(jié)點,這樣進展下去直到葉節(jié)點的數(shù)量等于或者小于調(diào)色板所需的顏色數(shù),之后遍歷八叉樹,將葉節(jié)點的顏色填入調(diào)色板的顏色表中。圖像的二值化實際上在使用的圖像處理系統(tǒng)中,處理的對象主要是二值圖像。這是因為在使用的系統(tǒng)中,要求處理的速度高、成本低,所以信息量大的灰階圖像的處理占用太大的局部不是好方法。因此希望盡可能用二值圖像的形式進展處理。圖像信息和背景信息分別對應(yīng)圖像灰度直方圖,因此可以通過灰度直方圖選擇一個閾值把整個圖像分成圖像信息和背景信息兩局部,從而把灰度圖像轉(zhuǎn)化為黑白二值圖像。圖像的灰度直方圖是將圖像中的象素按其灰度值大小進展組合,所構(gòu)成的象素數(shù)量隨灰度級變化的函數(shù)的圖形形式。通常,灰度直方圖的橫軸表示灰度值,縱軸用來表示頻度。頻度,是指具有某一灰度值的象素在圖像中出現(xiàn)的次數(shù)或者在圖像中占總象素的百分比。如圖3—2所示。圖3—2具有二值傾向的灰度直方圖圖像二值化可根據(jù)下面的閾值處理來進展:一般采用設(shè)定某一閾值,用閾值將圖像的數(shù)據(jù)分成大于閾值和小于閾值的象素群。例如,輸入的函數(shù)是f(x,y),輸出的圖像是f(x,y)。如果用灰度變換的方法來研究f(x,y),其灰度變換函數(shù)為:f(x,y)=其中:為閾值。輸出的圖像的灰度值大于閾值,其數(shù)據(jù)點值取1;反之取0。這種灰度變換的方法,成為圖像的二值化。二值化處理就是把圖像f(x,y)分為對象物和背景兩個領(lǐng)域,然后求其閾值。在數(shù)字化的圖像數(shù)據(jù)中,無用的背景數(shù)據(jù)和對象物的數(shù)據(jù)常?;煸谝黄?。除次之外,在圖像中還含有其它的各種噪聲。所以閾值選取必須根據(jù)實際情況進展調(diào)節(jié)。這里的關(guān)鍵問題是閾值確實定方法。因為灰度圖像二值化后可能喪失掉原圖像中的一些信息,如果閾值選擇不當,二值化后的圖像有可能與原圖像相差很大,不能正確的反映原圖像,這樣,二值化就失去了意義/因為圖像二值化的目的是要在盡可能多的保存原圖像特征的前提下舍棄冗余信息。所以閾值的正確選擇很重要。系統(tǒng)中二值化的代碼實現(xiàn)如下:voidCDigitClass::BinaryDigit(BYTEthre){ digitWidth=digitdib.GetWidth(); digitHeight=digitdib.GetHeight(); LONGx,y; for(x=0;x<digitWidth;x++) { for(y=0;y<digitHeight;y++) { if(digitarray[x][y]>=thre) digitarray[x][y]=(BYTE)1; else digitarray[x][y]=(BYTE)0;} }}3.5圖像的細化3.5.1細化的定義經(jīng)過預(yù)處理,待細化的圖像是0,1二值圖象。象素值為1的是需要細化的局部,象素值為0的是背景區(qū)域。一個圖像的“骨架〞是指圖像的中央的骨骼局部,可以理解為圖像的中軸。例如一個長方形的骨架是它的長方向上的中軸線;正方形的骨架是他的中心點;圓的骨架是他的圓心;直線的骨架是它自身;孤立點的骨架也是它自身。骨架是描述圖像幾何及拓撲性質(zhì)的重要特征之一。求圖像骨架的過程通常稱為對圖像“細化〞的過程。3.5.2細化的要求在字符識別系統(tǒng)中,為減少數(shù)據(jù)量,準確提取特征,常常需要采用細化算法。不過字符經(jīng)過細化后,將不可防止地喪失局部信息。因此是否細化應(yīng)根據(jù)實際情況而定。但一旦決定對字符進展細化,則對細化結(jié)果的好壞,將直接影響著識別率。一般來說,細化有以下的基本的要求:(1)細化要保持原有字符的連續(xù)性,不能使本來相連的筆劃斷開。(2)要細化成1象素的骨架,骨架應(yīng)接近原筆劃的中心線。(3)不要產(chǎn)生嚴重的畸變,對噪聲不敏感。(4)保存字符原有的拓撲,幾何特征,特別是一些明顯的拐角不應(yīng)被光滑掉。3.5.3Hilditch算法描述Hilditch細化算法描述Hilditch提出了一種串行細化算法,由于該算法是Hilditch提出的,就叫做Hilditch算法。Hilditch詳細講述了該算法的思想,但沒有給出這種算法地一個簡潔的表達式。Hilditch細化算法是一種串行算法。這種方法需要對整幅圖像作屢次掃描,在每一次掃描過程中。一些滿足給定條件的象素點將被標記,在本次掃描完畢后,再將這些標記的象素點刪除,然后開場下一次掃描,直到在某一次掃描過程中,再沒有象素點被標記,整個細化過程完畢。通常在二值圖象中,象素點的值為1或者0,值為1的點,稱為黑點,也是前景點,即圖形象素;值為0的點,稱為白點,也是背景點。在細化算法中,每一次掃描過程中,一個黑點,即圖形象素點必須滿足下面的條件才能被刪除:(1)該點是一個邊界點。(2)該點不是一個端點。(3)該點不是一個斷點。(4)該點的刪除不應(yīng)該造成過度侵蝕。圖像未經(jīng)細化時模板訓(xùn)練的效果如圖3—3所示圖片3—3細化前的效果如圖3—4所示,當前象素點P(值為1)的8領(lǐng)域,以及P為邊界點、端點、斷點時的一種表現(xiàn)形式。1)P的8領(lǐng)域2)P為邊界點3)P為端點4)P為斷點圖3—4P的幾種形式為了方便討論,令B(P)為當前象素點P的8領(lǐng)域中的黑象素點,S4(P)為P的4領(lǐng)域之和,S8(P)為P的8領(lǐng)域之和。次算法在對二值圖像的每一次掃描處理過程中,掃描順序是從左到右,從上到下,一個黑象素點同時滿足以下七個條件將被刪除:(1)P=1。這個條件保證當前處理象素點P為黑點,即為圖形信息點。(2)S4(P)<=3。這個條件保證P不是邊界點。(3)S8(P)>=2。這個條件保證P不是端點。(4)N(P)>=1。N(P)是P的8領(lǐng)域中沒有被標記的黑象素的個數(shù),這個條件是為了保證細線的兩端不被刪除。(5)N(P)>=1。N(P)的定義為:X(P)為對bi的求和。(i=1,2,3,4),bi取值:當P(2i—1)值為0并且P(2i)的值為1或者P(2i+1)的值取為1,其他情況bi的值為0。Hilditch定義X(P)為穿插數(shù),穿插數(shù)X(P)的取值總是0-4之間,可以從理論上證明可以刪除的象素與穿插數(shù)為1的情況是一致的。(6)X4(P)=1或者P4沒有被標志。X4(P)的定義為:假設(shè)P4為0時,求出穿插數(shù)X4(P)。(7)X8(P)=1或者P6沒有被標志。同上一條。這兩個條件都是為了防止過度腐蝕。在每一次掃描完畢后,被標記的象素點被刪除。在最后一次掃描過程中,假設(shè)沒有象素點被標記,整個細化算法完畢。圖片細化之后,模板訓(xùn)練的效果如圖3—5所示圖3—5細化后的效果第四章系統(tǒng)的設(shè)計與實現(xiàn)4.1VisualC++6.0簡介是一種程序設(shè)計語言,也是一個集成開發(fā)軟件,它提供自動生成軟件代碼和可視化資源編輯的功能。與Win32嚴密相連。可靈活的開發(fā)底層軟件到上層直接面向用戶的軟件。4.1.1運行環(huán)境安裝:(a)安裝MICROSOFT公司的VisualC++6.0開發(fā)工具。(b)安裝VisualAssistV6編程助手。(c)安裝MSDNLibrary。選擇VisualC++6.0的原因:(1)它是C和C++的混合編譯器,使得VisualC++6.0開發(fā)的程序具備了C和C++的高效、簡潔的特點。(2)它是一種面向?qū)ο蟮恼Z言,使得軟件能夠在編碼級、類級、控件級等多個級別上的重用,軟件的開發(fā)效率大為提高。(3)借助于Microsoft基本類庫(MicrosoftFoundationClassLibrary,簡稱MFC)和應(yīng)用程序框架,能夠輕松的開發(fā)出Windows標準界面的應(yīng)用程序??墒褂肁ppWizard生成完整的基于MFC類庫的源文件和資源文件;可使用MFCActiveXControlWizard生成創(chuàng)立ActiveX空間所需的開場文件;還可使用ClassWizard來創(chuàng)立新類(Class),定義消息處理函數(shù)(MessageHander),覆蓋虛擬函數(shù)(VirtualFunction),從對話框(DialogBox)的空間中獲取數(shù)據(jù)并驗證數(shù)據(jù)的合法性等。其界面更友好,便于操作。4.1.2MFC概述微軟根基類庫〔MFC,MicrosoftFoundationClass〕是微軟為Windows程序員提供的一個面向?qū)ο蟮腤indows編程接口,它大大簡化了Windows編程工作。使用MFC類庫的好處是:首先,MFC提供了一個標準化的構(gòu)造,這樣開發(fā)人員不必從頭設(shè)計創(chuàng)立和管理一個標準Windows應(yīng)用程序所需的程序,而是“站在巨人的肩膀上〞,從一個對比高的起點編程,故節(jié)省了大量的時間;其次,它提供了大量的代碼,指導(dǎo)用戶編程時實現(xiàn)某些技術(shù)和功能。MFC類庫充分利用了Microsoft開發(fā)人員多年開發(fā)Windows程序的經(jīng)歷,并可以將這些經(jīng)歷融入到用戶自己開發(fā)的應(yīng)用程序中去。4.2系統(tǒng)界面按扭的生成可以使用上圖的控件調(diào)色板,直接把控件從調(diào)色板上拖到新的對話框中,然后放到適宜的位置。并且加以命名。各個按扭的具體情況如表4—1所示。IDPropertiesCaptionIDC_PIC_TESTPicturePropertieIDC_EDIT_RESULTEditPropertiesIDC_BUTTON_INPUT_EQUIPPushButtonProperties模板計算IDC_BUTTON_INPUT_TESTPushButtonProperties樣本測試表4—1按扭的詳細定義選中對話框,點擊右鍵點擊類向?qū)А睠lassWizard〕,根據(jù)上述介紹的原理,翻開類向?qū)А;蛘哌x擇“VIEW〞菜單中的“ClassWizard〞菜單項,彈出“MFCClassWizard〞對話框。選擇“MessageMaps〞選項卡。在“Classname〞列表框中選擇類CDigitRecogDlg,在“ObjectIDs〞列表框中選擇“IDC_BUTTON_INPUT_EQUIP〞,在對應(yīng)的“Messages〞列表中選擇“BN_CLICKED〞。然后單擊“AddFunction〞按扭,添加對鼠標點擊左鍵的響應(yīng),點確認鍵。在“Memberfunctions〞欄中,將會增加一個OnButtonInputEquip函數(shù)。如圖4—1所示:圖4—1使用類向?qū)ё詣由纱a雙擊“OnButtonInputEquip〞函數(shù)或者在選種函數(shù)的情況下點擊“EditCode〞按扭,在出現(xiàn)下面的函數(shù)代碼,如圖4—2所示。voidCDigitRecogDlg::OnButtonInputvoidCDigitRecogDlg::OnButtonInputEquip(){ //TODO:Addyourcontrolnotificationhandlercodehere }圖4—2類向?qū)ё詣由傻木植看a4.3模板計算的過程4.3.1模板計算設(shè)計思想函數(shù)調(diào)用關(guān)系如圖4—3所示CDigitRecogDlg::OnButtonInputEquip()CDigitRecogDlg::OnButtonInputEquip()調(diào)用arTrainSetFilePath.RemoveAll()j=0strFile=FileDlg.GetNextPathName(pos)digitTrain.digitdib.Load(strFile)digitTrain.CopyBitmapToAr()digitTrain.BinaryDigit(120)digitTrain.ThinDigit()digitTrain.GetFeature()j++strInfo.Format("模板計算圖片:\r\n")J>9計算完圖片圖4—3模板計算函數(shù)調(diào)用關(guān)系圖4.3.2代碼實現(xiàn)voidCDigitRecogDlg::OnButtonInputEquip()//模板計算按扭被按時的處理函數(shù){ //TODO:Addyourcontrolnotificationhandlercodehere CStringFilePathName;//產(chǎn)生添加文件對話框?qū)ο?AddSampleDlgFileDlg(TRUE,"",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, "BMP格式字符圖像(*.bmp)|*.bmp|所有文件(*.*)|*.*||", AfxGetMainWnd()); if(FileDlg.DoModal()!=IDOK) return; CStringstrFile; CStringstrInfo; arTrainSetFilePath.RemoveAll();//去除路徑記錄,重新記錄新的路徑 POSITIONpos=FileDlg.GetStartPosition();//指向所加載的文件位置 pEditResult->SetSel(0,-1);//選中控件變量中的所有內(nèi)容 pEditResult->ReplaceSel("");//清空控件變量peditresult所對應(yīng)的控件 strInfo.Format("模板計算圖片:\r\n");//讀取文件的路徑并顯示在peditresult所對應(yīng)的控件上 intj=0; while(pos) { m_nDigitTemp=j;//給對應(yīng)的模板圖片賦值 strFile=FileDlg.GetNextPathName(pos);//獲取文件名 arTrainSetFilePath.Add(strFile); strInfo+=strFile;//加載路徑 strInfo+="\r\n";//輸出路徑 pEditResult->SetSel(0,-1);//選中控件中的所有內(nèi)容pEditResult->ReplaceSel(strInfo);//用新的控件變量pEditResult替換原來的內(nèi)容 digitTrain.digitdib.Load(strFile); digitTrain.CopyBitmapToAr();//把圖片信息存入數(shù)組中 digitTrain.BinaryDigit(120);//設(shè)置閾值為120,并進展二值化 digitTrain.ThinDigit();//調(diào)用細化函數(shù) digitTrain.GetFeature();//調(diào)用計算特征值的函數(shù) CStringstrtmp; for(inti=0;i<17;i++) { digitTemplate[j].feature[i]=digitTrain.feature[i]; //strtmp.Format("%f,",digitTrain.feature[i]); //strInfo+=strtmp; } //strInfo+=strFile; strInfo+="\r\n"; pEditResult->SetSel(0,-1);//選中控件中的所有內(nèi)容 pEditResult->ReplaceSel(strInfo);//用新的控件變量pEditResult替換原來的內(nèi)容 digitTemplate[j].trueClass=j; j++; }}4.4樣本測試的實現(xiàn)4.4.1樣本測試設(shè)計思想函數(shù)調(diào)用關(guān)系如圖4—4所示:strInfo.Format("")CDigitRecogDlg::OnButtonInputTest()strInfo.Format("")CDigitRecogDlg::OnButtonInputTest()調(diào)用AddSampleDlgFileDlgstrFile=FileDlg.GetNextPathName(pos)digitTrain.digitdib.Load(strFile)digitTrain.CopyBitmapToAr()digitTrain.digitdib.Display(pDCOrig,30,30)digitTest.BinaryDigit(120)digitTest.ThinDigit()digitTest.GetFeature()strInfo+="\n\r識別結(jié)果為:";圖4—4樣本測試函數(shù)調(diào)用關(guān)系圖4.4.2代碼實現(xiàn)voidCDigitRecogDlg::OnButtonInputTest()//樣本測試按扭被按時對應(yīng)的處理函數(shù){ //TODO:Addyourcontrolnotificationhandlercodehere CStringFilePathName;//產(chǎn)生添加文件對話框?qū)ο?AddSampleDlgFileDlg(TRUE,"",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, "BMP格式字符測試樣本圖象(*.bmp)|*.bmp|所有文件(*.*)|*.*||", AfxGetMainWnd()); if(FileDlg.DoModal()!=IDOK) return; CStringstrFile; CStringstrInfo; arTestSetFilePath.RemoveAll();//去除路徑記錄,重新記錄新的路徑 POSITIONpos=FileDlg.GetStartPosition();//指向所加載的文件位置 pEditResult->SetSel(0,-1);//選中控件變量中的所有內(nèi)容 pEditResult->ReplaceSel("");//用新的控件變量pEditResult替換原來的內(nèi)容 //清空控件變量peditresult所對應(yīng)的控件 //strInfo.Format("測試樣本集:\r\n");//讀取文件的路徑并顯示在peditresult所對應(yīng)的控件上 while(pos) { strFile=FileDlg.GetNextPathName(pos);//獲取文件名 arTestSetFilePath.Add(strFile); strInfo+=strFile;//加載路徑 strInfo+="\r\n";//輸出路徑 pEditResult->SetSel(0,-1);//選中控件中的所有內(nèi)容 pEditResult->ReplaceSel(strInfo);//用新的控件變量pEditResult替換原來的內(nèi)容 }if((iTotalTestNum=arTestSetFilePath.GetSize())>0){//判斷是否有輸入的待測試圖片 iCurTestNum=0; strFile=arTestSetFilePath.GetAt(0); digitTest.digitdib.Load(strFile);//加載位圖 digitTest.digitdib.Display(pDCTest,30,30);//在pdctest對應(yīng)的控件上顯示圖片信息 digitTest.CopyBitmapToAr();//圖片信息存入對應(yīng)的緩沖中〔數(shù)組〕 } digitTest.BinaryDigit(120);//設(shè)置閾值為120,并且進展二值化 digitTest.ThinDigit();//調(diào)用預(yù)處理中的細化函數(shù) pEditResult->SetSel(0,-1);//選中控件中的所有內(nèi)容 pEditResult->ReplaceSel("");//用新控件pEditResult來替換原來的內(nèi)容 CStringstrTemp; strInfo.Format("");//讀取文件的路徑并顯示在peditresult所對應(yīng)的控件上 inti,j; for(i=0;i<digitTest.digitHeight;i++) { for(j=0;j<digitTest.digitWidth;j++) { if(digitTest.digitarray[j][i]==1) strInfo+="■"; else strInfo+=""; } strInfo+="\r\n"; }//用"■"顯示出圖像中的數(shù)字 pEditResult->SetSel(0,-1); pEditResult->ReplaceSel(strInfo); digitTest.GetFeature(); doublemin=100000.0; intclassResult=-1; //從模板中找和當前待測試圖片的特征值信息最接近的模板 for(i=0;i<10;i++) { doublediff=0.0; for(j=0;j<12;j++) { diff+=fabs(digitTest.feature[j]-digitTemplate[i].feature[j]);//與模板計算中所存的摸板中對應(yīng)的12塊區(qū)域的特征值做對比 } for(j=12;j<17;j++) { diff+=fabs(digitTest.feature[j]-digitTemplate[i].feature[j])*9;//與模板計算中所存的模板中對應(yīng)的5個方向交點上的特征值做對比 } if(diff<min) { min=diff; classResult=i;//得到匹配的結(jié)果 } } strTemp.Format("%d",classResult);//讀取文件的輸出并顯示在classresult所對應(yīng)的控件上 strInfo+="\n\r識別結(jié)果為:"; strInfo+=strTemp;//加載輸出結(jié)果 pEditResult->SetSel(0,-1);//選中控件pEditResult中的所有內(nèi)容 pEditResult->ReplaceSel(strInfo); //用新的控件來替換原來的內(nèi)容}第五章系統(tǒng)運行及測試5.1系統(tǒng)的運行運行的界面如圖5—1所示。圖5—1運行界面圖5.2系統(tǒng)的測試系統(tǒng)的測試,檢查程序中的代碼以及最終的總體測試??聪到y(tǒng)識別出的數(shù)字的結(jié)果是否與我們所期望的值一樣。以及通過一定的數(shù)據(jù)測試,估算出系統(tǒng)的識別率。以素材文件夾中T文件夾里的10個BMP文件格式的數(shù)字圖像為模板,以素材里其他圖像為測試對象。每個數(shù)字均有很多圖片。分以下兩組數(shù)據(jù)對比從0~9的10個數(shù)字中的圖片中隨機性測試各5次。共50組圖片。如以以以下圖所示:在手寫數(shù)字識別系統(tǒng)中,可以用(正確)識別率、誤識率(替代率)、拒識率三個指標來標識系統(tǒng)的性能。具體定義如下面所示:識別率=正確識別樣本數(shù)/全部樣本數(shù)*100%誤識率=錯誤識別樣本數(shù)/全部樣本數(shù)*100%拒識率=拒識樣本數(shù)/全部樣本數(shù)*100%而本系統(tǒng)測試數(shù)字樣本圖片時,只有正確識別和錯誤識別兩種結(jié)果,因此拒識率為零。就不畫在下面的表中了。全部樣本總數(shù)為50。系統(tǒng)分成9塊區(qū)域時,細化后上述50張待測試圖片依次識別的結(jié)果為:00000111112222233333876643555569285779578888899999系統(tǒng)分成12塊區(qū)域時,細化后上述50張待測試圖片依次識別的結(jié)果為:00000111112222233533444445555566606717778868899999計算得到的數(shù)據(jù)如表5—1所示:系統(tǒng)(細化后)識別率誤識率9塊區(qū)域78%22%12塊區(qū)域92%8%表5—1細化前后識別率比照1由此可見,適當?shù)母牧妓惴ㄒ部梢蕴岣咦R別率。系統(tǒng)分成12塊區(qū)域時,細化前上述50張待測試圖片依次識別的結(jié)果為:00008111117222233333444445553380666777678888899999比照計算得到數(shù)據(jù)如表5—2所示:系統(tǒng)(分12塊區(qū)域)識別率誤識率細化前86%14%細化后92%8%表5—2模塊分割區(qū)域的比照由此可見,加強對圖像的預(yù)處理可以提高識別率。系統(tǒng)分9塊區(qū)域時,細化前上述50張待測試圖片依次識別的結(jié)果為:000801111125222624332444485658452266777478688899999計算得到數(shù)據(jù)如表5—3所示:系統(tǒng)(分9塊區(qū)域)識別率誤識率細化前72%28%細化后78%22%表5—3細化前后比照識別率25.3系統(tǒng)的評價本系統(tǒng)基本能完成對數(shù)字圖像的識別功能。雖然有一定的誤識率。但是在這一領(lǐng)域里,應(yīng)該知道沒有“最好〞-----研究識別率到達100%是我們的理想,只有更好----通過我們的研究可以不斷地將字符識別技術(shù)推向前進。完畢語字符識別是傳統(tǒng)和典型的模式識別問題,手寫數(shù)字識別是字符識別領(lǐng)域中最大的難題之一,攻克這一難題已經(jīng)成為眾多科技工作者的目標。本文主要研究了字符識別中的預(yù)處理的一些情況,以及模板匹配識別的過程。以后,要使手寫數(shù)字圖像的識別率能夠再有進一步的提高,一方面可以從預(yù)處理方面著手。另一方面可以改良更好的算法。附錄附錄一:以下是按扭的局部代碼清單://輸入測試按扭被按時對應(yīng)的處理函數(shù)voidCDigitRecogDlg::OnButtonInputTest(){ //TODO:Addyourcontrolnotificationhandlercodehere CStringFilePathName;//產(chǎn)生添加文件對話框?qū)ο?AddSampleDlgFileDlg(TRUE,"",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, "BMP格式字符測試樣本圖像(*.bmp)|*.bmp|所有文件(*.*)|*.*||", AfxGetMainWnd()); if(FileDlg.DoModal()!=IDOK) return; CStringstrFile; CStringstrInfo; arTestSetFilePath.RemoveAll();//去除路徑記錄,重新記錄新的路徑 POSITIONpos=FileDlg.GetStartPosition();//指向所加載的文件位置 pEditResult->SetSel(0,-1);//選中控件變量中的所有內(nèi)容 pEditResult->ReplaceSel("");//用新的控件變量pEditResult替換原來的內(nèi)容 //清空控件變量peditresult所對應(yīng)的控件 //strInfo.Format("測試樣本集:\r\n");//讀取文件的路徑并顯示在peditresult所對應(yīng)的控件上 while(pos) { strFile=FileDlg.GetNextPathName(pos);//獲取文件名 arTestSetFilePath.Add(strFile); strInfo+=strFile;//加載路徑 strInfo+="\r\n";//輸出路徑 pEditResult->SetSel(0,-1);//選中控件中的所有內(nèi)容 pEditResult->ReplaceSel(strInfo);//用新的控件變量pEditResult替換原來的內(nèi)容 } if((iTotalTestNum=arTestSetFilePath.GetSize())>0){//判斷是否有輸入的待測試的圖片 iCurTestNum=0; strFile=arTestSetFilePath.GetAt(0); digitTest.digitdib.Load(strFile);//加載位圖 digitTest.digitdib.Display(pDCTest,30,30);//在pdctest對應(yīng)的控件上顯示圖片信息 digitTest.CopyBitmapToAr();//圖片信息存入對應(yīng)的緩沖中〔數(shù)組〕 } digitTest.BinaryDigit(120);//設(shè)置閾值為120,并且進展二值化 digitTest.ThinDigit();//調(diào)用預(yù)處理中的細化函數(shù) pEditResult->SetSel(0,-1);//選中控件中的所有內(nèi)容 pEditResult->ReplaceSel("");//用新控件pEditResult來替換原來的內(nèi)容 CStringstrTemp; strInfo.Format("");//讀取文件的路徑并顯示在peditresult所對應(yīng)的控件上 inti,j; for(i=0;i<digitTest.digitHeight;i++) { for(j=0;j<digitTest.digitWidth;j++) { if(digitTest.digitarray[j][i]==1) strInfo+="■"; else strInfo+=""; } strInfo+="\r\n"; }//用"■"顯示出圖像中的數(shù)字 pEditResult->SetSel(0,-1); pEditResult->ReplaceSel(strInfo); digitTest.GetFeature(); doublemin=100000.0; intclassResult=-1; //從模板中找和當前待測試圖片的特征值信息最接近的模板 for(i=0;i<10;i++) { doublediff=0.0; for(j=0;j<12;j++) { diff+=fabs(digitTest.feature[j]-digitTemplate[i].feature[j]);//與模板計算中所存的摸板中對應(yīng)的12塊區(qū)域的特征值做對比 } for(j=12;j<17;j++) { diff+=fabs(digitTest.feature[j]-digitTemplate[i].feature[j])*9;//與模板計算中所存的模板中對應(yīng)的5個方向交點上的特征值做對比 } if(diff<min) { min=diff; classResult=i;//得到匹配的結(jié)果 } } strTemp.Format("%d",classResult);//讀取文件的輸出并顯示在classresult所對應(yīng)的控件上 strInfo+="\n\r識別結(jié)果為:"; strInfo+=strTemp;//加載輸出結(jié)果 pEditResult->SetSel(0,-1);//選中控件pEditResult中的所有內(nèi)容 pEditResult->ReplaceSel(strInfo); //用新的控件來替換原來的內(nèi)容}voidCDigitRecogDlg::OnButtonInputEquip()//模板計算按扭被按時的處理函數(shù){ //TODO:Addyourcontrolnotificationhandlercodehere CStringFilePathName;//產(chǎn)生添加文件對話框?qū)ο?AddSampleDlgFileDlg(TRUE,"",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, "BMP格式字符圖象(*.bmp)|*.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論