全自動虛擬切片掃描系統(tǒng)條形碼識別模塊設(shè)計說明_第1頁
全自動虛擬切片掃描系統(tǒng)條形碼識別模塊設(shè)計說明_第2頁
全自動虛擬切片掃描系統(tǒng)條形碼識別模塊設(shè)計說明_第3頁
全自動虛擬切片掃描系統(tǒng)條形碼識別模塊設(shè)計說明_第4頁
全自動虛擬切片掃描系統(tǒng)條形碼識別模塊設(shè)計說明_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢業(yè)設(shè)計題目全自動虛擬切片掃描系統(tǒng)-條形碼識別模塊學(xué)院機械工程學(xué)院專業(yè)機械設(shè)計制造與其自動化班級機設(shè)07q2學(xué)生徐哲學(xué)號指導(dǎo)教師王玉增二一一年五月三十日27 / 281前言1.1全自動虛擬切片掃描系統(tǒng)-條形碼識別模塊的背景 傳統(tǒng)病理學(xué)技術(shù)主要是在玻璃切片和顯微鏡的基礎(chǔ)之上發(fā)展起來的,已經(jīng)發(fā)展了200多年。最近幾十年,隨著計算機和信息技術(shù)的發(fā)展,病理學(xué)數(shù)字化也產(chǎn)生了。最早應(yīng)用于虛擬病理技術(shù)的技術(shù)是使用數(shù)字式或模擬式攝像頭進行圖像采集、存儲和傳輸,目前在病理的各方面工作中得到了廣泛的應(yīng)用。攝像頭圖像采集作為數(shù)字化病理的首次應(yīng)用,所以相比較于傳統(tǒng)切片具有很多的優(yōu)點,比如可以顯示病理切片中的典型病變特

2、點,其次是占用相對較少的存儲空間而且方便存儲和傳輸,并且能在數(shù)字圖像上進行計算和圖像處理等。隨著數(shù)字化技術(shù)的飛速發(fā)展,就可以將整切片進行數(shù)字化即“虛擬切片技術(shù)”。該技術(shù)已經(jīng)在歐美和日本等科技發(fā)達國家進行了研發(fā),并取得了很大的突破。 傳統(tǒng)的病理切片由于是基于玻璃片,所以保存和運輸困難。而這種虛擬切片技術(shù)就解決了這些不足。但是對于如此大量的虛擬切片,如何準確而且快速的被醫(yī)生或者病人與其家屬成功提取成為一個問題。然而條形碼技術(shù)的產(chǎn)生與發(fā)展,很好的解決了這一問題。 條形碼技術(shù)是在計算機應(yīng)用實踐中產(chǎn)生和發(fā)展起來的一種自動識別技術(shù) ,是為實現(xiàn)對信息的自動掃描而設(shè)計的。它是實現(xiàn)快速、準確而可靠地采集數(shù)據(jù)的有

3、效手段 。條形碼技術(shù)的應(yīng)用解決了數(shù)據(jù)錄入和數(shù)據(jù)采集和“瓶頸”問題,為供應(yīng)鏈管理提供了有力的技術(shù)支持,輸入速度快 ,信息量大,準確度高 ,成本低,可靠性強。1.2全自動虛擬切片掃描系統(tǒng)-條形碼識別模塊的現(xiàn)狀在近幾年的發(fā)展中,對于虛擬切片技術(shù)的發(fā)展主要有兩個方向,第一,就是基于自動顯微鏡;第二,是基于切片掃描儀。對于第一方向開發(fā)較早,其關(guān)鍵設(shè)備為顯微鏡上的自動載物臺,成像部件為數(shù)字式攝像頭,成像速度和質(zhì)量現(xiàn)階段還都不能滿足使用要求。而對于第二種發(fā)展方向的關(guān)鍵部件有自動切片轉(zhuǎn)運部件、高速線性或矩陣式數(shù)字成像部件等,隨著虛擬技術(shù)的長足發(fā)展,在成像質(zhì)量和速度上都有了較大提高,可以成批快速掃描切片,近年來

4、占據(jù)了主要的虛擬切片設(shè)備市場。但是,目前還有阻礙其發(fā)展的有兩大因素:第一,價格昂貴;第二,是配套軟件較少。我們可以把虛擬切片制作系統(tǒng)分為兩大部分:硬件和軟件。其中,硬件包括虛擬切片掃描儀和計算速度高,存儲容量大的高級計算機,軟件就是虛擬切片掃描系統(tǒng)和能夠安裝在計算機上的圖像瀏覽和編輯軟件?,F(xiàn)階段中國主要應(yīng)用的是日本研發(fā)的虛擬切片掃描儀。在掃描過程中多數(shù)情況下無需人工干預(yù),從切片傳遞、選擇圖像區(qū)域、對焦、成像、文件合成等一系列操作完全由計算機控制自動完成。而且,可以進行多層切片掃描,形成三維虛擬切片,便于多層次、多截面觀察。對于條形碼技術(shù),由于它的領(lǐng)域特別的大,所以近些年來其技術(shù)發(fā)展迅速,很多不

5、同種類和不同編碼標準的條形碼相繼被應(yīng)用于社會的各個領(lǐng)域,每一種條形碼都具有各自特點。最具代表性的就是EAN13一維條形碼和PDF417二維條形碼。在開始選取條形碼進行學(xué)習(xí)的時候,我首先采用了pdf417二維條形碼,它的特點非常突出。二維條形碼除具有普通條碼的優(yōu)點外,二維條碼還具有信息容量大、可靠性高、防偽性強、易于制作、成本低等優(yōu)點。二維條碼DF417作為一種新的信息存儲和傳遞技術(shù),現(xiàn)階段已應(yīng)用在醫(yī)療保健、工業(yè)、國防、公共安全、金融、交通運輸、商業(yè)、海關(guān)與政府管理等領(lǐng)域。美國十多個的美國軍人證、駕駛證、軍人醫(yī)療證等幾年前早已采用了PDF417條形碼技術(shù)。將證件上的個人信息與照片編在二維條碼中,

6、這樣不但可以實現(xiàn)件的自動識讀,而且可以有效地防止假冒證件事件的發(fā)生。此外,本條形碼要應(yīng)用在醫(yī)院常用的玻璃病理切片上,所以對條形碼的大小有一定的要求,而二維條形碼就具有這樣的特點:條碼符號形狀、尺寸大小比例可變。除此之外,二維條形碼還具有容錯能力強的特點,具有糾錯功能,這使得二維條碼因穿孔、污損等引起局部損壞時,照樣可以正確得到識讀,損毀面積達50仍可恢復(fù)信息;譯碼可靠性高:它比普通條碼譯碼錯誤率百萬分之二要低得多,誤碼率不超過千萬分之一的特點。但是,隨著學(xué)習(xí)的深入和在查閱相關(guān)文獻的過程,結(jié)合與導(dǎo)師進行課題討論的過程中,我發(fā)現(xiàn)在現(xiàn)階段醫(yī)院進行病理切片或者病理檔案時,最常用到的條形碼是一維條形碼。

7、雖然一維條形碼,如EAN13條形碼,能編碼的容和種類遠遠沒有二維條形碼,如PDF417條形碼的多,但是把它作為管理病理切片的編號是遠遠足夠的(結(jié)合數(shù)學(xué)排列組合和現(xiàn)在我國人口的增長水平,此條形碼可在100年不重復(fù))。再者,二維條形碼雖然編碼的容很多,但是不太符合當(dāng)今醫(yī)院的體系,錄入病人信息的過程相對復(fù)雜,且容量很大并且需要有一定專業(yè)醫(yī)學(xué)知識的醫(yī)務(wù)工作者才可以勝任,在錄入病理信息的過程中還要保持高度的警惕性,以免出現(xiàn)錯誤。而一維條形碼只需錄入一組數(shù)字簡單,快捷,方便,且出錯率低。2全自動虛擬切片掃描系統(tǒng)-條形碼識別模塊設(shè)計方案2.1全自動虛擬切片掃描系統(tǒng)-條形碼識別模塊設(shè)計容全自動虛擬切片機是遠程

8、醫(yī)學(xué)診斷系統(tǒng)的重要組成部分,其工作原理是在本地采集病理切片,然后通過生物顯微鏡、數(shù)字攝像機、圖像采集卡采集到計算機。病人編碼用條形碼表示,在醫(yī)院登記處給病人一個編碼,生成條形碼并用條形碼打印機打印出條形碼貼片,把條形碼貼在病理切片的固定區(qū)域。本課題的研究的容為全自動虛擬切片機的條形碼識別模塊,包括條形碼的采集與識別。2.2 設(shè)計中使用的軟件平臺和工具介紹2.2.1 VisualStudio 2010簡介VisualStudio作為一套完整的開發(fā)工具集,用于生成XMLWebServices 、ASP.NETWeb應(yīng)用程序、移動應(yīng)用程序和桌面應(yīng)用程序。VisualC+、VisualC#、Visua

9、lBasic、VisualJ#全都使用一樣的集成開發(fā)環(huán)境(IDE),利用此IDE不僅可以共享工具而且有助于創(chuàng)建混合語言解決方案。另外,這些語言利用了.NETFramework的功能,通過此框架可使用XMLWebServices開發(fā)的關(guān)鍵技術(shù),簡化ASPWeb應(yīng)用程序。VS2010的主要部分包括:(1)使用Microsoft.NETFramework3.5.NET Framework提供了用于解決常見編程任務(wù)的構(gòu)建基塊(預(yù)制的軟件),從而能夠快速構(gòu)造具有最終用戶體驗的出色的緊密聯(lián)系的應(yīng)用程序。在.NET Framework模型業(yè)務(wù)流程上有效構(gòu)建的應(yīng)用程序有利于在異類環(huán)境中實現(xiàn)系統(tǒng)集成。.NETF

10、ramework 和Visual Studio的結(jié)合使用減少了對公用管道代碼的需要,從而縮短了開發(fā)時間而且使開發(fā)人員能夠集中精力解決業(yè)務(wù)問題。.NET Framework3.5是在.NETFramework3.0的基礎(chǔ)上構(gòu)建的更高版本。得到增強的功能領(lǐng)域包括基類庫、Windows CommunicationFoundation、Windows workflow foundation、WindowsCard Space和Windows PresentationFoundation。開發(fā)人員使用VisualStudio2010旗艦版可以:集成的單元測試更有效的驗證應(yīng)用程序。應(yīng)用程序的單元測試能夠幫

11、助我們在開發(fā)過程的早期輕松發(fā)現(xiàn)大量的問題?,F(xiàn)在,VisualStudio2010旗艦版中集成了單元測試功能,而以前這個功能只在VisualStudioTeamSystem產(chǎn)品中提供。(2)ASP.NETASP.NET是建立在.NETFramework編程類的基礎(chǔ)上的,為Web應(yīng)用程序模型提供了一組可簡化Web應(yīng)用程序生成的基礎(chǔ)結(jié)構(gòu)和控件。ASP.NET包括能用于封裝通用HTML用戶界面元素(像文本框、列表框和按鈕)的一組控件。這些控件在Web服務(wù)器上運行,并以HTML的形式將其用戶界面呈現(xiàn)在瀏覽器中。在服務(wù)器中,這些控件公布面向?qū)ο蟮木幊棠P停撃P湍転閃eb開發(fā)人員提供面向?qū)ο缶幊痰呢S富功能

12、。ASP.NET還提供基礎(chǔ)結(jié)構(gòu)服務(wù),如進程回收和狀態(tài)管理,從而進一步減少開發(fā)人員必須編寫的代碼數(shù)量,而且提高應(yīng)用程序的可靠性。另外,ASP.NET使用這些同樣的概念使開發(fā)人員可以以服務(wù)的形式交付軟件。同時使用XMLWebServices功能,ASP.NET開發(fā)人員可以編寫他們的業(yè)務(wù)邏輯,并使用ASP.NET基礎(chǔ)結(jié)構(gòu)通過SOAP交付該服務(wù)。Visual Studio2010還包括各種增強功能,例如對Web開發(fā)工具的大量改進、可視化設(shè)計器(使用.NETFramework3.5加速開發(fā)),以與能夠加速處理和開發(fā)所有類型數(shù)據(jù)的語言功能。VisualStudio2010為開發(fā)人員提供了所有相關(guān)的框架和工

13、具支持,幫助創(chuàng)建令人印象深刻的、引人注目并支持AJAX的Web應(yīng)用程序。開發(fā)人員能夠利用這些豐富的服務(wù)器端和客戶端框架輕松構(gòu)建以客戶為中心的Web應(yīng)用程序,這些應(yīng)用程序可以集成在任何當(dāng)前瀏覽器運行、任何后端數(shù)據(jù)提供程序、Microsoft平臺以與完全訪問ASP.NET應(yīng)用程序服務(wù)。(3)統(tǒng)一編程類該框架為開發(fā)人員提供了統(tǒng)一的、分層的、面向?qū)ο蟮暮涂蓴U展的類庫集(API)。目前,C+開發(fā)人員使用Microsoft基礎(chǔ)類,而Java開發(fā)人員使用Windows基礎(chǔ)類。該框架統(tǒng)一了這些完全不同的模型,還為JScript和VisualBasict程序員提供了對類庫的訪問。通過所有編程語言的公共API集,

14、公共語言運行庫使得跨語言繼承、調(diào)試、錯誤處理成為可能。從JScript到C+的所有編程語言具有對框架的相似訪問,開發(fā)人員可以自由選擇它們要使用的語言。(4)公共語言運行庫運行庫實際上在開發(fā)時操作中和組件的運行時都起到很大的作用,雖然名稱中沒有體現(xiàn)這個意思。在組件運行時,運行庫除了負責(zé)滿足此組件在其他組件上可能具有的依賴項外,還負責(zé)管理存分配、停止線程、啟動和進程,以與強制執(zhí)行安全策略。由于做了大量的自動處理工作(如存管理),運行庫使開發(fā)人員的操作非常簡單,特別是與今天的COM相比。特別是反射等功能顯著減少了開發(fā)人員為將業(yè)務(wù)邏輯轉(zhuǎn)變?yōu)榭芍赜媒M件而必須編寫的代碼量。(5)快速的應(yīng)用程序開發(fā)為了幫助

15、開發(fā)人員迅速創(chuàng)建先進的軟件,VisualStudio2010提供了數(shù)據(jù)功能和改進的語言,像語言集成的查詢(LINQ),各個編程人員可以利用這些功能更輕松地構(gòu)建解決方案以處理和分析信息。Visual Studio 2010還使開發(fā)人員能夠從同一開發(fā)環(huán)境創(chuàng)建面向多個.NETFramework版本的應(yīng)用程序。開發(fā)人員能夠構(gòu)建面向.NETFramework2.0、3.0或3.5的應(yīng)用程序,這意味他們可以在同一環(huán)境中支持各種各樣的項目。2.2.2C+介紹C+是C語言的超集,在上世紀90年代為滿足程序管理的復(fù)雜性要求,貝爾實驗室的BS博士對C語言進行了擴充和改進,同時由于面向?qū)ο蟮姆椒ㄔ黾恿顺绦虻目蓴U充性

16、、可靠性和可維護性,大大提高了程序員編程的效率,因此面向?qū)ο蠹夹g(shù)就成了程序設(shè)計方法的主流。C+是一種混合性語言,不僅保持了C語言的高效,而且對C語言進行了面向?qū)ο蠛头敲嫦驅(qū)ο蟮臄U充,成為當(dāng)今面向?qū)ο蟮淖钍軞g迎的語言,并且已成為事實上的標準。盡管C+與C最最明顯的區(qū)別是它支持面向?qū)ο蟮某绦蛟O(shè)計,但新的語言在非面向?qū)ο筇匦陨弦沧隽瞬簧俚母倪M。尤其在國際信息系統(tǒng)標準委員會的指導(dǎo)下,1988年確立了C+語言國際標準,也就是ISO/IEC FDIS 14882,其中提供了bool類庫、標準模板庫、超過150個的標準類庫、命名空間和外處理機制等,大大豐富了C+語言。下面簡要列出了C+對C的一些擴充:(1)

17、const說明符const說明用于凍結(jié)一個實體在起作用域的值,也可用來凍結(jié)一個指針變量指向的數(shù)據(jù)。函數(shù)的參數(shù)也可以說明為const,以凍結(jié)這個參數(shù)的值。(2)分程序說明C+允許在可執(zhí)行代碼之后和分程序出現(xiàn)變量聲明,而不必在程序的開始處對要使用的變量加以聲明,即可以在分程序第一次使用變量的地方對變量進行說明。(3)強制類型轉(zhuǎn)換 用戶自定義類型名與預(yù)定義類型名都可以作為函數(shù)名使用,明確指明由一種類型轉(zhuǎn)換成另一種兼容的類型。它支持兩種類型轉(zhuǎn)換的形式:“(類型)表達式”和“類型(表達式)”。前者為C語言支持的強制轉(zhuǎn)換形式。(4)sizeof運算符C+提供的sizeof運算符用來查看某變量的字節(jié)數(shù)或數(shù)據(jù)

18、類型。該運算符可將變量名和數(shù)據(jù)類型名作為自變量,比如sizeof(變量)、sizeof(數(shù)據(jù)類型)、sizeof變量、sizeof數(shù)據(jù)類型都是合法的形式。(5)缺省參數(shù)在C+函數(shù)說明時,可以把某個函數(shù)所帶參數(shù)中的后面一個或幾個賦以缺省值。調(diào)用時,可以不提供具有缺省值的自變量,而被舍棄的參數(shù)使用相應(yīng)的缺省值。(6)聯(lián)函數(shù) 聲明函數(shù)的時候,如果加上說明符inLine,那就表明編譯器要把指定的函數(shù)直接插入到每個調(diào)用語句處,這樣用增加程序代碼所占存空間來加快程序執(zhí)行速度。(7)new和delete運算符 用這兩個運算符來進行存動態(tài)分配和釋放。(8)引用參數(shù)在參數(shù)表中的參數(shù)類型后面加&號來表明其為引用參

19、數(shù),當(dāng)進行函數(shù)調(diào)用時,引用參數(shù)成了其自變量的別名,當(dāng)引用參數(shù)發(fā)生變化時自變量的參數(shù)會隨之改變。(9)返回void的函數(shù)和指向void的指針Void函數(shù)類型表明一個函數(shù)不返回任何值,指針變量也可聲明為指向void,這種指針可被看成是可以指向任何基本類型的其他指針。(10)函數(shù)名重載C+允許定義不同參數(shù)表、一樣函數(shù)名的多個函數(shù)。編譯程序可以根據(jù)類型、參數(shù)個數(shù)區(qū)別重載函數(shù)。但是,如果參數(shù)表與函數(shù)名都一樣,僅函數(shù)返回類型不同,編譯程序就會出錯。(11)對象(object)它是C+系統(tǒng)中的基本運行實體,其中的數(shù)據(jù)可視為對象的狀態(tài),對象狀態(tài)的改變,只能由其他對象向該對象發(fā)送信息,接受信息后通過調(diào)用相應(yīng)的函

20、數(shù)來實現(xiàn)。因此,對象的獨立性較強,通過對象來構(gòu)造復(fù)雜的應(yīng)用程序。(12)成員函數(shù)類中的方法稱為該類的成員函數(shù),C+中的成員函數(shù)就是在該類的數(shù)據(jù)上定義的基本操作。(13)類(class) 類是創(chuàng)建對象的關(guān)鍵,每個對象都是由一個類來說明的,類和對象的關(guān)系就好像任何一種計算機語言中的數(shù)據(jù)類型和變量的關(guān)系一樣,一個對象應(yīng)屬于某一個類;一個變量應(yīng)屬于某種數(shù)據(jù)類型。對象也稱為相應(yīng)類的實例。在C+中聲明類的方式為: Class類名Private: /私有數(shù)據(jù)和方法Public: /共有數(shù)據(jù)和方法Protected: /被保護的數(shù)據(jù)和方法 ; 其中private, protected ,public,為訪問控

21、制關(guān)鍵字。(14)繼承 繼承作為面向?qū)ο蟪绦蛟O(shè)計的關(guān)鍵機制,C+同樣支持繼承性。C+中的繼承分為多重繼承和單一繼承。多重繼承,導(dǎo)出類可以有多個父類;單一繼承中導(dǎo)出的類只有一個父類。 多重繼承的方式為: Class C:訪問控制C1,訪問控制C2,,訪問控制Cn 其中導(dǎo)出類C表示同時繼承了C1,C2,Cn(多個)父類的特性。 單一繼承的方式為: Class B:訪問控制A 其中訪問控制為關(guān)鍵字public或private,缺省為private。該形式的聲明表明導(dǎo)出類B能繼承父類A的特性。(15)析構(gòu)函數(shù)和構(gòu)造函數(shù) 析構(gòu)函數(shù)和構(gòu)造函數(shù)是兩種特殊的成員函數(shù)。析構(gòu)函數(shù)即是相應(yīng)的類名前加上符號的成員函數(shù)

22、,與析構(gòu)函數(shù)相反,當(dāng)一個對象離開系統(tǒng)時,系統(tǒng)調(diào)用析構(gòu)函數(shù)以完成該對象所占存空間的釋放以與成員函數(shù)中定義的其他工作。構(gòu)造函數(shù)是與它的類具有一樣名字的成員函數(shù),當(dāng)聲明該類的一個對象時,系統(tǒng)調(diào)用相應(yīng)的構(gòu)造函數(shù),已完成對聲明對象的初始化工作。(16)例外處理和命名空間 這兩種機制是C+國際標準ISO/IEC FDIS 14882最新制定的。命名空間是C國際標準中不可缺少的組成部分。正如我們所知道的那樣,在應(yīng)用開發(fā)過程中,常常需要多個庫,并且這些庫可能來自不同的文件。在這些文件中可以定義一樣名稱的類和函數(shù),所以可以將對象、函數(shù)和類先頂再說明塊,而其他的基本命名空間放在std命名空間中和全局命名空間中。C

23、+國際標準中另一個關(guān)鍵機制是例外處理,此機制可以處理程序運行中的錯誤。大多數(shù)現(xiàn)代的編譯程序都提供了一個集成的開發(fā)環(huán)境。一般情況下,在該環(huán)境中點擊菜單make或build或compiler命令來生成可執(zhí)行的計算機程序。程序員在使用C+語言時,首先編制源程序(擴展名為.cpp).源程序被編譯(compiler)后就生成了目標文件,通常用.obj作為文件的擴名。此目標文件就是源程序的目標代碼,即機器指令。因目標代碼只是一個個的程序塊,這仍不是一個可執(zhí)行的程序,所以若要成為可執(zhí)行的程序必須進行連接(link),即程序間的相互銜接成為操作系統(tǒng)的程序整體。C+程序通過同時連接一個或幾個目標文件與一個或幾個

24、數(shù)據(jù)庫創(chuàng)建。庫的擴展名為.lib,是由一組機器指令構(gòu)建的程序代碼,為可連接文件。庫包括用戶生成的庫和C+標準庫。庫與文件連接后即生成計算機可執(zhí)行的程序。當(dāng)然,難免在集成環(huán)境中編輯C+源程序經(jīng)編譯后產(chǎn)生編譯誤差。此時,程序員必須回到編輯狀態(tài)對程序進行修改。同時,連接時也能產(chǎn)生連接錯誤,這時也要退回到編輯狀態(tài)對源程序進行修改。C+程序的開發(fā)步驟如圖2-1:開始程序設(shè)計編輯源程序程序編譯編譯錯?+=+=?= 否程序連接連接錯? 是否程序運行運行錯? 是 結(jié)束否否 圖2-1 C+程序的開發(fā)步驟2.3EAN13碼簡介一維條形碼是指由一組規(guī)則排列的條、空與其對應(yīng)字符組成的標識,用以表示一定的商品病理切片信

25、息。其對應(yīng)字符由一組阿拉伯?dāng)?shù)字組成,可以被人直接識讀或通過輸入計算機通過鍵盤等輸入設(shè)備數(shù)據(jù)使用。這一組條空和相應(yīng)的字符所表示的信息是一樣的。 “空”指對光線反射率較高的部分,“條”指對光線反射率較低的部分,能夠用特定的設(shè)備識別,轉(zhuǎn)換成與計算機能夠解讀的二進制信息和十進制信息。對于每一個病理切片,它的編碼是獨一無二的,對于普通的一維條形碼來說,還要通過數(shù)據(jù)庫建立條形碼與切片信息的對應(yīng)關(guān)系,當(dāng)條形碼的數(shù)據(jù)傳到計算機上時,由計算機上的應(yīng)用程序?qū)?shù)據(jù)進行操作和處理。其意義是通過在計算機系統(tǒng)的數(shù)據(jù)庫中提取相應(yīng)的信息而實現(xiàn)的 。因此,普通的一維條形碼在使用過程中僅作為識別信息。 EAN13條形碼的特點:(

26、1)除了表示數(shù)字的條碼符號外,還有一些輔助條碼字符,用作表示起始,終止的定界符和平分條碼符號的中間分隔符。(2) EAN條碼字符集包括A子集、B子集和C子集。每個條碼符號均由2個條和2個空構(gòu)成。每個條和空由1-4 模塊組成,每個條碼字符的總模塊數(shù)為7。條碼字符集可表示0-9共10 個數(shù)字字符。(3)條碼符號由一系列相互平行的條和空組成,四周留有空白區(qū)。(4) 供人識別字符位于條碼符號下方,與條碼相對應(yīng)的13位數(shù)字,采用OCR-B字符。2.3.1EAN13碼編碼規(guī)則EAN條形碼通用病理切片條碼是模塊組合型條碼。EAN碼是國際通用的符號體系,是一種長度固定、無含意的條碼,所表達的信息全部為數(shù)字,主

27、要應(yīng)用于商品標識。模塊是組成條碼的最基本寬度單位,每個模塊的寬度為033毫米。編碼要求條形碼的國際標準要求編碼由13位十進制數(shù)字構(gòu)成(從左至右分別為第0位第12位)。并且第12位和前12位要滿足如下的關(guān)系:滿足以上關(guān)系的數(shù)碼可以作為條形碼的編碼。條形碼規(guī)符合國際標準條形碼圖案是由113條黑白相間的數(shù)線組成,其中包括黑色和白色兩種反差很大的線條。如圖一所示:圖一 條形碼實例整個圖案包括開始部分、第一數(shù)據(jù)部分(左邊)、中間部分、第二數(shù)據(jù)部分(右邊)和結(jié)束部分等五個部分。n 開始部分:包括12條線。是按照國際標準的國定格式的規(guī)律排列的,從左至右分別是8條白線,一條黑線,一

28、條白線和一條黑線,如圖二:圖二 條形碼起始部分n 第一數(shù)據(jù)部分:包括42條線。他的形成是按照一定的算法形成的,其中包含了這些數(shù)字包含的信息。如圖三。圖三 條形碼第一數(shù)據(jù)部分n 中間部分:包括5條線,同開始部分一樣符合國際標準的規(guī)律,從左到右依次是白線,黑線,白線,黑線,白線。如圖四。圖四 條形碼中間部分n 第二數(shù)據(jù)部分:包括42條線。他的形成同第一數(shù)據(jù)部分是一樣的,都是按照一定的算法形成的,其中包含了的數(shù)字包含的信息。如圖五。圖五 條形碼第二數(shù)據(jù)部分n 結(jié)尾部分:包括12條線。排列順序同開始部分和中間部分,按照國際標準排列,從左至右分別是一條黑線,一條白線和一條黑線,8條白線。如圖六:圖六 條

29、形碼的結(jié)束部分2.4 EAN-13條形碼生成原理條形碼的第一數(shù)據(jù)部分是由7個數(shù)字形成的,其編碼方法具體如下:n 首先使用產(chǎn)生和匹配的字母碼,該字母碼有6個字母組成,字母限于A和B。產(chǎn)生字母碼的列表如下字母碼0AAAAAA1AABABB2AABBAB3AABBBA4ABAABB5ABBAAB6ABBBAA7ABABAB8ABABBA9ABBABA表2.1 映射表n 將和產(chǎn)生的字母碼按位進行搭配,來產(chǎn)生一個數(shù)字-字母匹配對。并通過查表來得到形成的條形碼第一數(shù)據(jù)部分。將和C進行搭配,并通過查表得到,即是形成的條形碼的第二數(shù)據(jù)部分。其映射表,如表二所示:數(shù)字-字母匹配對二進制信息0A00011010B

30、01001110C11100101A00110011B01100111C11001102A00100112B00110112C11011003A01111013B01000013C10000104A01000114B00111014C10111005A01100015B01110015C10011106A01011116B00001016C10100007A01110117B00100017C10001008A01101118B00010018C10010009A00010119B00101119C1110100表2.2 數(shù)字-字母映射表n 繪制條形碼:通過映射二進制數(shù)碼進行繪制,二進制數(shù)字“

31、1”對應(yīng)黑色線,二進制數(shù)字“0”對應(yīng)白色線。2.5 EAN-13條形碼的識別原理首先,通過條形碼的開始部分,即一條黑線、一條白線、一條黑線的規(guī)律組合識別出,第一數(shù)據(jù)部分的開始部分位置position start 1。Position start 1就是EAN-13條形碼的第13條線。從position start 1開始識別第一數(shù)據(jù)部分代表的二進制元信息,即通過從position start 1開始依次向右掃描42條線(第13條線到第54條線),得到42字節(jié)的二進制信息碼。然后將這個元信息碼按照7字節(jié)一組進行分組,得到6個組group1, group2, , group6。然后將GROUP I

32、在表二中進行反向查表,得到數(shù)字-字母匹配對(number-character),即得到了。通過得到的6個字母的組合得到一個字母碼,并通過反向查找表2.1,得到。同時現(xiàn)在的掃描位置為中間部分,即position middle。通過從position middle開始識別一條黑線、一條白線、一條黑線的規(guī)律組合,找到了第二數(shù)據(jù)部分的起始位置position start 2,從position start 2開始識別第二數(shù)據(jù)部分代表的二進制信息,即通過從position start 2開始依次向右掃描42條線(第60條線到第101條線),得到42字節(jié)的二進制元信息碼。然后將這個元信息碼按照7字節(jié)一組進

33、行分組,得到6個組group1, group2, , group6。然后將GROUPI 在表二中進行反向查表,得到數(shù)字-字母匹配對(number-character),舍棄后面必然為C的字母后即得到了。3 程序編譯與編譯結(jié)果3.1 EAN-13條形碼生成過程程序最終的運行結(jié)果是完成對EAN-13條形碼的13位數(shù)的編碼,最后生成一幅bmp格式的圖像。雙擊進入條形碼編碼程序,此時會出行一個對話框,說明此程序的工作步驟,點擊“OK”。然后單擊“操作”按鈕,此時可將你想要編碼的13位數(shù)出入其對話框中,點擊“您已確定”之后,便可生成一幅EAN-13條形碼圖像。最后,點擊“文件”,“保存”,這樣一幅標準的

34、EAN-13條形碼圖像就生成了。程序進行的第一步就是要首先判斷你想要編碼的這一組數(shù)字是否符合EAN-13條形碼的國際標準要求,就是是否出入的是一組13位數(shù)的阿拉伯?dāng)?shù)字,那么其判別代碼如下:void CGeneratorView:OnEditGive() / TODO: Add your command handler code hereCGiveCodeDlg myDialog; if(myDialog.DoModal()=IDOK)if (myDialog.m_code.GetLength() != 13)MessageBox(_T(位數(shù)不對,無法處理!),_T(出錯啦!),MB_ICONE

35、RROR);return; for (int j=0; j=12; j+)codej=(int)myDialog.m_code.GetAt(j)-48; m_bModified=TRUE; if(code12 != CheckBit()MessageBox(_T(校驗碼有誤,已重新計算!), _T(校驗碼出錯),MB_ICONERROR); code12 = CheckBit();CWnd:Invalidate();要使程序能把13位數(shù)字,轉(zhuǎn)化成一組黑白相間的一維條形碼圖像,就需要把這一組13位數(shù)字首先轉(zhuǎn)化成二進制的一組數(shù)。其轉(zhuǎn)化代碼如下:void CGeneratorView:BldFirs

36、tTable() firstcode0=_T(AAAAAA);firstcode1=_T(AABABB);firstcode2=_T(AABBAB);firstcode3=_T(AABBBA);firstcode4=_T(ABAABB);firstcode5=_T(ABBAAB);firstcode6=_T(ABBBAA);firstcode7=_T(ABABAB);firstcode8=_T(ABABBA);firstcode9=_T(ABBABA);void CGeneratorView:BldSecondTable() coderule_T(0A)=_T(0001101);coderul

37、e_T(0B)=_T(0100111);coderule_T(0C)=_T(1110010);coderule_T(1A)=_T(0011001);coderule_T(1B)=_T(0110011);coderule_T(1C)=_T(1100110);coderule_T(2A)=_T(0010011);coderule_T(2B)=_T(0011011);coderule_T(2C)=_T(1101100); coderule_T(3A)=_T(0111101); coderule_T(3B)=_T(0100001);coderule_T(3C)=_T(1000010); coderul

38、e_T(4A)=_T(0100011);coderule_T(4B)=_T(0011101); coderule_T(4C)=_T(1011100); coderule_T(5A)=_T(0110001); coderule_T(5B)=_T(0111001);coderule_T(5C)=_T(1001110); coderule_T(6A)=_T(0101111);coderule_T(6B)=_T(0000101); coderule_T(6C)=_T(1010000); coderule_T(7A)=_T(0111011); coderule_T(7B)=_T(0010001);cod

39、erule_T(7C)=_T(1000100); coderule_T(8A)=_T(0110111);coderule_T(8B)=_T(0001001); coderule_T(8C)=_T(1001000); coderule_T(9A)=_T(0001011); coderule_T(9B)=_T(0010111);coderule_T(9C)=_T(1110100);int CGeneratorView:CheckBit() int odd=0,even=0,result=0;for(int i=1; i=11; i+=2) odd += codei;for(int j=0; j=1

40、0; j+=2)even += codej;result = 10 - (odd*3+even)%10;return result;在把這一組符合標準的13位數(shù)字轉(zhuǎn)化成一組二進制數(shù)碼之后,程序就要把這些二進制數(shù)轉(zhuǎn)化成黑色與白色的條紋。其轉(zhuǎn)換規(guī)則很簡單,就是“1”代表黑色條紋,“0”代表白色條紋。上面我們已經(jīng)提到,EAN-13條形碼圖像分成五個部分,其中有三部分(起始部分,中間部分和結(jié)束部分)是規(guī)定好的,只有兩個數(shù)據(jù)部分是根據(jù)數(shù)字轉(zhuǎn)換而來,那其數(shù)據(jù)轉(zhuǎn)換成黑白條形碼程序源代碼為:void CGeneratorView:DrawLeft(CDC *ptDC) CString temp1 = firs

41、tcodecode0;CString YorN6; /用于存貯左邊的六位數(shù)的編碼for(int i=0;i=5;i+)char temp2;ToChar(codei+1,temp2);CString temp3(temp2);temp3+=temp1.GetAt(i); /將數(shù)字和字母連接成串 coderule.Lookup(temp3,YorNi); /查表得出編碼int x;for(int j=0;j=5;j+)for(int k=0;k=6;k+) /每個數(shù)字有七位編碼x=12+j*7+k; /計算每個模塊的橫坐標if(YorNj.GetAt(k)=1)DrawOne(ptDC,CPoi

42、nt(x*lineWidth,0),FALSE);elseDrawZero(ptDC,CPoint(x*lineWidth,0);void CGeneratorView:DrawRight(CDC *ptDC) char temp1;CString YorN6; /用于存儲后面六位的編碼for(int i=7;i=12;i+)ToChar(codei,temp1);CString temp2(temp1);temp2+=C;coderule.Lookup(temp2,YorNi-7);int x;for(int j=0;j=5;j+)for(int k=0;k=6;k+) /每個數(shù)字有七位編碼

43、x=59+j*7+k; /計算每個模塊的橫坐標if(YorNj.GetAt(k)=1)DrawOne(ptDC,CPoint(x*lineWidth,0),FALSE);else DrawZero(ptDC,CPoint(x*lineWidth,0);3.1.1 條形碼編碼程序運行過程與運行結(jié)果(1)程序開始運行圖3-1(2)程序進行編碼圖3-2(3)程序運行結(jié)果圖3-33.2 EAN-13條形碼識別過程此程序最終可以實現(xiàn)的功能就是把已經(jīng)生成的EAN-13條形碼圖像“翻譯”成一組13位數(shù)字。首先,打開此程序能出現(xiàn)一個對話框,在這里說明此程序的大致用法,點擊“確定”進入程序主界面。點擊“文件”“

44、打開”,載入早已生成的條形碼。此時程序就可以馬上在主界面的中央顯示在此條形碼中“保存”的數(shù)字信息。在載入條形碼圖像之后,程序要馬上進行的一個步驟就是有此條形碼圖像的起始部分(若為標準EAN-13條形碼其起始部分應(yīng)是13根黑白相間的條紋)判斷是否為符合要求的條形碼圖像,其判斷函數(shù)源代碼為:void CRecognizorView:Recognize(CDC *pDC) CString Bitcode;/ CString testcode; CString thecode12; CString findfirst; RecogBits(pDC,Bitcode);/ for(int k=0;k=6;

45、k+)/ testcode+=Bitcode.GetAt(k);/ if(!IsOdd(testcode)/ Bitcode.MakeReverse(); for(int i=0;i=11;i+) for(int j=i*7;j=i*7+6;j+) thecodei+=Bitcode.GetAt(j); for(int i2=0;i2=5;i2+) if(IsOdd(thecodei2) findfirst+=A; else findfirst+=B; barcode+=firstcodefindfirst; for(int i3=0;i3SetMapMode(MM_TEXT);/DEL fo

46、r(i=0;iGetPixel(i,50) break;/DEL /DEL for(int j=i;jGetPixel(j,50) break;/DEL mode+;/DEL /DEL start=i;/DEL return mode;/DEL 在判斷完條形碼圖像之后,該程序就要開始反查數(shù)字-字母映射表,也就是編碼過程的反過程。其代碼如下:void CRecognizorView:RecogBits(CDC *pDC, CString &bit) int begin=start+3*lineWidth; pDC-SetMapMode(MM_TEXT); for(int i=begin+line

47、Width/2;iGetPixel(i,50) bit+=0; else bit+=1; begin=start+50*lineWidth; for(int j=begin+lineWidth/2;jGetPixel(j,50)bit+=0; else bit+=1; BOOL CRecognizorView:IsOdd(CString str) int count=0;for(int i=0;i=6;i+)if(str.GetAt(i)=1)count+;if(count%2=1)return TRUE;elsereturn FALSE;最后,程序就可以顯示此條形碼的數(shù)字信息了。如果能與醫(yī)院

48、的數(shù)據(jù)庫相連,就可以通過這小小條形碼,在數(shù)以萬計的虛擬病理切片中,快速準確找到相應(yīng)目標。3.2.1條形碼識別程序運行過程與運行結(jié)果(1)程序開始運行圖3-4(2)程序載入圖片并進行解碼,最后得出結(jié)果圖3-54 結(jié) 論全自動虛擬切片掃描系統(tǒng)-條形碼識別模塊雖然沒有與機械設(shè)計等方面有聯(lián)系,但是通過這個畢業(yè)設(shè)計題目卻真真切切的讓我體會到了這樣的一種趨勢,就是機械與信息技術(shù)結(jié)合的復(fù)雜結(jié)合。而這種結(jié)合正符合了當(dāng)今中國工業(yè)化和信息化相結(jié)合的發(fā)展方向。本文結(jié)合全自動虛擬切片掃描系統(tǒng)中的實際需求,對目前該行業(yè)存在的聞題進行了深入分析,以C+為開發(fā)平臺,Visual Studio 2010為開發(fā)工具,研究了如何合理的管理虛擬病理切

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論