2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩47頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  本科畢業(yè)設(shè)計(jì)(論文)</p><p><b> ?。ǘ?屆)</b></p><p>  圖片文字提取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)</p><p>  所在學(xué)院 </p><p>  專(zhuān)業(yè)班級(jí) 計(jì)算機(jī)科學(xué)與技術(shù) </p>

2、;<p>  學(xué)生姓名 學(xué)號(hào) </p><p>  指導(dǎo)教師 職稱(chēng) </p><p>  完成日期 年 月 </p><p>  摘要:從圖像中提取文字屬于信息智能化處理的前沿課題,是當(dāng)前人工智能與模式識(shí)別領(lǐng)域中的研究熱點(diǎn)。

3、由于文字具有高級(jí)語(yǔ)義特征,對(duì)圖片內(nèi)容的理解、索引、檢索具有重要作用,因此,研究圖片文字提取具有重要的實(shí)際意義。本論文是研究基于圖片的文字提取技術(shù),通過(guò)文字定位來(lái)實(shí)現(xiàn)對(duì)位圖圖片文件中文字的提取。在讀入圖片后,通過(guò)灰度化,求水平梯度,二值化,窗口過(guò)濾等一系列處理后定位文字。本文在Windows XP環(huán)境下,以Visual C++ 6.0為開(kāi)發(fā)工具,自行設(shè)計(jì)并實(shí)現(xiàn)系統(tǒng),驗(yàn)證了基于C++的圖片文字提取算法。實(shí)驗(yàn)結(jié)果表明:算法能夠比較準(zhǔn)確地定位圖

4、中的文字。</p><p>  關(guān)鍵詞:圖像處理;文字定位;文字提??;位圖結(jié)構(gòu)</p><p>  The Design and Implementation of The Technology of Extracting Texts from Images </p><p>  Abstract: Extracting the text from images b

5、elongs to the frontier topics on intelligent information processing, and it is the current research focus in artificial intelligence and pattern recognition. As the text with high-level semantic feature and playing an im

6、portant role on understanding, indexing and retrieval of image content. Therefore, the study on extracting texts from images have important actual meanings. The paper presents a text location algorithm which localize the

7、 text in an image</p><p>  Key words: image processing; text location; text extraction; Bitmap Structure</p><p><b>  目錄</b></p><p><b>  1 引言1</b></p>

8、<p>  1.1 課題背景1</p><p>  1.2 圖片文字提取技術(shù)在國(guó)內(nèi)外的發(fā)展及現(xiàn)狀1</p><p>  1.2.1 人工文字提取的算法1</p><p>  1.2.2 場(chǎng)景文字提取算法2</p><p>  1.2.3 圖像邊緣檢測(cè)算法2</p><p>  1.3

9、 本課題研究的意義3</p><p>  1.4 開(kāi)發(fā)平臺(tái)簡(jiǎn)介3</p><p>  2 BMP位圖4</p><p>  2.1 位圖簡(jiǎn)介4</p><p>  2.2 BMP位圖文件4</p><p>  2.2.1 位圖文件頭4</p><p>  2.2.2 位圖

10、信息頭5</p><p>  2.2.3 位圖顏色表6</p><p>  3 圖片文字提取算法7</p><p>  3.1 文字提取基本過(guò)程7</p><p>  3.2 文字提取算法7</p><p>  3.2.1 圖片讀入7</p><p>  3.2.2 灰度

11、化10</p><p>  3.2.3 水平梯度12</p><p>  3.2.4 二值化15</p><p>  3.2.5 文字定位17</p><p>  4 系統(tǒng)測(cè)試22</p><p>  4.1 運(yùn)行界面22</p><p>  4.2 測(cè)試圖片文字提取2

12、2</p><p>  4.2.1 第一組測(cè)試22</p><p>  4.2.2 第二組測(cè)試27</p><p>  4.2.3 第三組測(cè)試30</p><p>  5 結(jié)論及展望33</p><p>  致謝錯(cuò)誤!未定義書(shū)簽。</p><p><b>  參考文獻(xiàn)

13、34</b></p><p><b>  1 引言</b></p><p><b>  1.1 課題背景</b></p><p>  隨著計(jì)算機(jī)科學(xué)的飛速發(fā)展,以圖像為主的多媒體信息迅速成為重要的信息傳遞媒介。圖片文字的檢測(cè)與識(shí)別技術(shù)在計(jì)算機(jī)網(wǎng)絡(luò)日益發(fā)展的今天有著大量的應(yīng)用,特別是對(duì)于基于內(nèi)容的圖片或視頻

14、過(guò)濾、檢索等應(yīng)用來(lái)講,有重要意義,它可以幫助我們了解圖片內(nèi)容或者視頻內(nèi)容。文字具有高級(jí)語(yǔ)義特征,因此圖像中的文本是圖像內(nèi)容的一個(gè)重要來(lái)源,如果這些文本能自動(dòng)地被檢測(cè)、分割、識(shí)別出來(lái),則對(duì)圖像語(yǔ)義的自動(dòng)理解、索引和檢索是非常有價(jià)值的。所以,研究圖片文字提取就具有了重要的實(shí)際意義。</p><p>  1.2 圖片文字提取技術(shù)在國(guó)內(nèi)外的發(fā)展及現(xiàn)狀</p><p>  1.2.1 人工文字提

15、取的算法</p><p>  (1) 為了能夠清楚地辨識(shí)出每個(gè)字的結(jié)構(gòu),文字在顏色上與其背景總是存在一定差異。因此,文字提取的實(shí)質(zhì)就是描述文字圖層與背景圖層之間的差異,并以這種差異對(duì)像素進(jìn)行聚類(lèi)。對(duì)彩色圖像在HSV顏色空間進(jìn)行色彩聚類(lèi)形成顏色圖層,再通過(guò)投影算法將顏色圖層進(jìn)一步細(xì)分為子圖層進(jìn)行圖層分析,最后通過(guò)子圖層合并產(chǎn)生備選文字圖層,能夠良好地從各種復(fù)雜顏色背景中提取垂直或平行于圖像邊緣的單色文字。具體方法:

16、顏色聚類(lèi);子圖層分割;圖層分析;圖層合并[1]。</p><p>  (2) 視頻文字大小自適應(yīng)提取算法基于離散傅里葉變換(discrete Fourier transform,DFT)特征、多分辨率處理及支持向量機(jī)分類(lèi)技術(shù)。算法在不同分辨率下結(jié)合梯度信息、文字邊界定位技術(shù)提取出文字候選區(qū)域,然后用支持向量機(jī)對(duì)于候選圖像塊DFT特征作進(jìn)一步分類(lèi)。具體方法:提取候選區(qū)域;分割候選區(qū)域塊及文字邊界定位;多分辨率融合處

17、理;驗(yàn)證候選塊[2]。</p><p>  (3) 彩色圖像下的文本提取方法,該方法對(duì)彩色圖像在R、G、B 三個(gè)顏色層分別進(jìn)行亮度分級(jí),以避開(kāi)傳統(tǒng)顏色聚類(lèi)方法的聚類(lèi)數(shù)目選擇問(wèn)題,降低圖像復(fù)雜度;考慮到文字筆畫(huà)的顯著方向性特征,并且通常具有穩(wěn)定的顏色,利用方向梯度算法進(jìn)行文本粗定位;然后進(jìn)一步利用多類(lèi)SVM分類(lèi)器實(shí)現(xiàn)文本區(qū)域精確判別。具體方法:亮度分級(jí);筆畫(huà)檢測(cè)算法;SVM 精確判別[3]。</p>

18、<p>  (4) 自動(dòng)提取圖像中的文本對(duì)圖像視頻檢索具有重要意義。提出了一種基于顏色和筆畫(huà)特征,應(yīng)用無(wú)監(jiān)督聚類(lèi)方法進(jìn)行復(fù)雜背景下的文本分割算法。首先在對(duì)文本進(jìn)行圖像增強(qiáng)的基礎(chǔ)上,應(yīng)用顏色約減和直方圖確定文本顏色。然后提取顏色和筆畫(huà)特征,應(yīng)用k的均值聚類(lèi)算法分割出文本和背景像素。最后應(yīng)用后處理優(yōu)化分割結(jié)果。具體方法:圖像增強(qiáng)預(yù)處理;文本顏色估計(jì);特征提??;無(wú)監(jiān)督聚類(lèi);基于連通成分的后處理[4]。</p><

19、p>  (5) 為解決漸變色給文字提取聚類(lèi)算法帶來(lái)的問(wèn)題,研究與實(shí)現(xiàn)了基于二值化聚類(lèi)的圖像文字提取算法。圖像通過(guò)一系列預(yù)處理后,得到了利于聚類(lèi)的二值圖像,根據(jù)背景圖像區(qū)域特征,對(duì)圖像進(jìn)行聚類(lèi)分塊,再利用文字圖像區(qū)域特征,聚類(lèi)識(shí)別出文字區(qū)域。具體方法:預(yù)處理,包括灰度化、二值化、長(zhǎng)線剔除;文本聚類(lèi),包括背景查找、文字分割[5]。</p><p>  (6) 一種利用筆畫(huà)線條的統(tǒng)計(jì)特征基于支持向量機(jī)進(jìn)行圖像中疊

20、加文字檢測(cè)的方法。該算法首先通過(guò)一種改進(jìn)的線段檢測(cè)算子提取出筆畫(huà)線段;然后對(duì)筆畫(huà)線條通過(guò)區(qū)域合并定位出候選文字塊;接著對(duì)候選文字塊提取一個(gè)反映文字筆畫(huà)線條空間分布特點(diǎn)的32 維特征,并通過(guò)支持向量機(jī)建立的模型對(duì)候選文字塊進(jìn)行確認(rèn)分類(lèi)。具體方法:基于筆畫(huà)線條的特征抽?。换赟VM的候選文字塊分類(lèi)確認(rèn);基于筆畫(huà)線條粗定位候選文字塊[6]。</p><p>  1.2.2 場(chǎng)景文字提取算法</p>&l

21、t;p>  (1) 基于邊緣檢測(cè)的文本提取方法對(duì)自然場(chǎng)景文本的提取進(jìn)行研究。通過(guò)改進(jìn)彩色圖像邊緣檢測(cè)和二值邊緣圖像的形態(tài)學(xué)文本定位的算法,從而實(shí)現(xiàn)場(chǎng)景文本的提取。先將原始圖片進(jìn)行金字塔分解,然后進(jìn)行圖片預(yù)處理,對(duì)圖像進(jìn)行邊緣提取和二值化,再形態(tài)學(xué)文本定位,最后文本區(qū)域字符提取[7]。</p><p>  (2) 自然環(huán)境下文本圖像背景復(fù)雜,常規(guī)閾值分割方法往往無(wú)法有效分割;基于譜聚類(lèi)的圖像分割方法利用圖分割

22、理論可以有效地實(shí)現(xiàn)圖像分割,但過(guò)高的計(jì)算復(fù)雜度和空間復(fù)雜度使其在處理大圖像時(shí)不能滿(mǎn)足實(shí)際需求?;诨叶戎狈綀D的譜聚類(lèi)分割方法來(lái)實(shí)現(xiàn)字符提取,利用像素灰度計(jì)算相似性,在灰度直方圖上構(gòu)造相似矩陣,并通過(guò)實(shí)驗(yàn)確定直方圖的理想等級(jí)數(shù)及相關(guān)參數(shù)。通過(guò)將像素級(jí)上的劃分轉(zhuǎn)化為灰度等級(jí)上的劃分,從而大大減少特征值求解時(shí)的計(jì)算量和開(kāi)銷(xiāo),提高算法的實(shí)用性及有效性[8]。</p><p>  1.2.3 圖像邊緣檢測(cè)算法</p

23、><p>  基于灰度直方圖的邊緣檢測(cè),基于梯度的邊緣檢測(cè)包括Roberts邊緣算子、Sobel邊緣檢測(cè)算子、Prewitt邊緣算子、Laplacan邊緣算子,Canny邊緣檢測(cè)算子,模糊推理的邊緣檢測(cè),Mallat小波邊緣檢測(cè)算子等[9]。</p><p>  1.3 本課題研究的意義</p><p>  靜態(tài)圖片中文本提取方面的文獻(xiàn)不是很豐富,之前的研究更多關(guān)注文

24、檔圖像的分析和處理。而對(duì)于復(fù)雜圖像中的文本或者嵌入圖像的文本標(biāo)簽進(jìn)行提取和分析研究剛剛引起人們的興趣。目前提出的紋理特征主要包括有原始像素抽樣[10]、局部方差[11]、梯度分布[12]、強(qiáng)邊緣的密度及方向分布等空域統(tǒng)計(jì)特征,以及小波、FFT、Gabor變換系數(shù)的統(tǒng)計(jì)特征,如矩、直方圖、共生矩陣等。通過(guò)梯度特征進(jìn)行邊緣檢測(cè),可以達(dá)到快速的定位效果,然而同時(shí)約束參數(shù)設(shè)置非常復(fù)雜,并且檢測(cè)錯(cuò)誤率也很高;利用紋理特征決定像素塊是否屬于文字,可

25、以在復(fù)雜背景的條件下檢測(cè)文字信息,但是計(jì)算非常耗時(shí),而且文字精確定位的穩(wěn)定性也不夠理想;對(duì)于視頻文字,可以利用相鄰幀的相關(guān)性大體確定字幕位置,然而這種方法不能用來(lái)處理靜態(tài)圖像。另外,基于支持向量機(jī)(SVM)分類(lèi)器的多尺度定位算法也得到了廣泛的研究,雖然其檢測(cè)效果較好,但算法復(fù)雜,需事先有樣本進(jìn)行學(xué)習(xí)分類(lèi)器的訓(xùn)練[13]。</p><p>  1.4 開(kāi)發(fā)平臺(tái)簡(jiǎn)介</p><p>  本程

26、序的開(kāi)發(fā)平臺(tái)是Visual C++[14]。C++語(yǔ)言是一種優(yōu)秀的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,它在C語(yǔ)言的基礎(chǔ)上發(fā)展而來(lái),但它比C語(yǔ)言更容易為人們學(xué)習(xí)和掌握。面向?qū)ο蟮脑O(shè)計(jì)思想是在原來(lái)結(jié)構(gòu)化程序設(shè)計(jì)方法基礎(chǔ)上的一個(gè)質(zhì)的飛躍,C++完美地體現(xiàn)了面向?qū)ο蟮母鞣N特性。面向?qū)ο笤O(shè)計(jì)語(yǔ)言在軟件開(kāi)發(fā)上有很多優(yōu)點(diǎn),主要體現(xiàn)在易維護(hù)、可讀性高、質(zhì)量高、效率高、易擴(kuò)展等特點(diǎn)上。C++的設(shè)計(jì)目標(biāo),就是要讓C++既具有適合于系統(tǒng)程序設(shè)計(jì)的C語(yǔ)言所具有的可適應(yīng)性和高

27、效性,又能在其程序組織結(jié)構(gòu)方面具有想Simula(Simula所支持的這種程序組織結(jié)構(gòu)通常被稱(chēng)為面向?qū)ο蟪绦蛟O(shè)計(jì)風(fēng)格)那樣的語(yǔ)言設(shè)施。C++語(yǔ)言同事做了很多優(yōu)化工作,使得引借自Simula的高層次的程序設(shè)計(jì)技術(shù)能夠應(yīng)用于系統(tǒng)程序設(shè)計(jì)之中。</p><p><b>  2 BMP位圖</b></p><p>  2.1 位圖簡(jiǎn)介 </p><p&

28、gt;  位圖[15]亦稱(chēng)為點(diǎn)陣圖像或繪制圖像,是由稱(chēng)作像素(圖片元素)的單個(gè)點(diǎn)組成的。這些點(diǎn)可以進(jìn)行不同的排列和染色以構(gòu)成圖樣。當(dāng)放大位圖時(shí),可以看見(jiàn)賴(lài)以構(gòu)成整個(gè)圖像的無(wú)數(shù)單個(gè)方塊。擴(kuò)大位圖尺寸的效果是增多單個(gè)像素,從而使線條和形狀顯得參差不齊。然而,如果從稍遠(yuǎn)的位置觀看它,位圖圖像的顏色和形狀又顯得是連續(xù)的。在體檢時(shí),工作人員會(huì)給你一個(gè)本子,在這個(gè)本子上有一些圖像,而圖像都是由一個(gè)個(gè)的點(diǎn)組成的,這和位圖圖像其實(shí)是差不多的。由于每一個(gè)

29、像素都是單獨(dú)染色的,您可以通過(guò)以每次一個(gè)像素的頻率操作選擇區(qū)域而產(chǎn)生近似相片的逼真效果,諸如加深陰影和加重顏色。縮小位圖尺寸也會(huì)使原圖變形,因?yàn)榇伺e是通過(guò)減少像素來(lái)使整個(gè)圖像變小的。同樣,由于位圖圖像是以排列的像素集合體形式創(chuàng)建的,所以不能單獨(dú)操作(如移動(dòng))局部位圖。</p><p>  2.2 BMP位圖文件 </p><p>  BMP位圖文件包括4部分,即位圖文件頭結(jié)構(gòu)BITMAP

30、FILEHEADER、位圖信息頭結(jié)構(gòu)BITMAPINFOHEADER、位圖顏色表RGBQUAD和位圖像素?cái)?shù)據(jù),BMP位圖文件的結(jié)構(gòu)如圖2-1所示。 </p><p>  圖2-1:BMP位圖文件的結(jié)構(gòu)</p><p>  2.2.1 位圖文件頭</p><p>  位圖文件頭就是用來(lái)標(biāo)志這個(gè)位圖文件一些信息比如:大小、類(lèi)型等等。共有14個(gè)字節(jié)的信息。下面我們就分

31、別對(duì)這14個(gè)字節(jié)的信息分別說(shuō)明一下它們所代表的意義。42 4D 為位圖的標(biāo)志。如果轉(zhuǎn)換成ASCII碼的話就是BM。1E 2B 06 00 這個(gè)雙字信息代表著位圖文件的總字節(jié)數(shù),如果把它轉(zhuǎn)換化十進(jìn)制的話就是(00062B1E)H=(404254)D,也就是這位圖文件的大小是404254個(gè)字節(jié)。00 00 00 00 為保留字。36 00 00 00 表示位圖陣列的起始位置,(00000036)H=(54)D,也就是從第54個(gè)字節(jié)就是這幅圖

32、的位圖陣列了。</p><p>  BMP文件頭BMP文件頭含有BMP文件的類(lèi)型、文件的大小、位圖文件的保留字、位圖數(shù)據(jù)距文件頭的偏移量等信息。結(jié)構(gòu)定義如下:</p><p>  typedef struct tagBITMAPFILEHEADER</p><p><b>  {</b></p><p>  UINT b

33、fType; //位圖文件的類(lèi)型,必須為BM </p><p>  DWORD bfSize; //位圖文件的大小,以字節(jié)為單位 </p><p>  UINT bfReserved1; //位圖文件保留字,必須為0 </p><p>  UINT bfReserved2; //位圖文件保留字,必須為0 </p><p>  DWORD bf

34、OffBits; //位圖數(shù)據(jù)距文件頭的偏移量,以字節(jié)為單位,表示文件起始位置到圖像數(shù)據(jù)的距離</p><p>  }BITMAPFILEHEADER;</p><p>  2.2.2 位圖信息頭</p><p>  位圖信息頭記錄著一些關(guān)于這幅圖的一些基本信息,比如:高度、寬度、分辨率等信息。28 00 00 00 表示著位圖信息頭的長(zhǎng)度,(00000028)H

35、=(40)D,即位圖信息頭的長(zhǎng)度占40個(gè)字節(jié)。39 01 00 00 表示位圖的寬度,(00000139)H=(313)D表示位圖的寬度為313個(gè)像素。C8 00 00 00 表示位圖的高度,(000000C8)H=(200)D表示位圖的高度為200個(gè)像素。01 00 表示位圖設(shè)備級(jí)別。00 00 00 00 表示壓縮類(lèi)型,零表示不壓縮。00 00 00 00 位圖陣列表字節(jié)數(shù)。00 00 00 00 表示水平分辨率。00 00 00

36、00 表示垂直分辨率。00 00 00 00 表示位圖實(shí)際使用的顏色表中的顏色變址。00 00 00 00 表示位圖顯示過(guò)程中被認(rèn)為重要顏色變址數(shù)。</p><p>  BMP位圖信息頭主要包含數(shù)據(jù)結(jié)構(gòu)的大小、圖象的高度和長(zhǎng)度、色彩平面數(shù)、圖象數(shù)據(jù)的大小、分辨率等信息。結(jié)構(gòu)定義如下:</p><p>  typedef struct tagBIMAPINFOHEADER </p>

37、;<p><b>  { </b></p><p>  DWORD biSize; //本結(jié)構(gòu)所占用字節(jié)數(shù) </p><p>  LONG biWidth; //位圖的寬度,以像素為單位 </p><p>  LONG biHeight; //位圖的高度,以像素為單位 </p><p>  WORD biP

38、lanes; //目標(biāo)設(shè)備的級(jí)別,必須為1 </p><p>  WORD biBitCount; //每個(gè)像素所需的位數(shù) </p><p>  DWORD biCompression; //位圖壓縮類(lèi)型 </p><p>  DWORD biSizeImage; //位圖的大小,以字節(jié)為單位 </p><p>  LONG biXPelsP

39、erMeter; //位圖水平分辨率 </p><p>  LONG biYPelsPerMeter; //位圖垂直分辨率 </p><p>  DWORD biClrUsed; //位圖實(shí)際使用的顏色表中的顏色數(shù) </p><p>  DWORD biClrImportant; //位圖顯示過(guò)程中重要的顏色數(shù) </p><p>  } BI

40、TMAPINFOHEADER;</p><p>  2.2.3 位圖顏色表</p><p>  顏色表顏色表用于說(shuō)明位圖中的顏色,它有若干個(gè)表項(xiàng),每一個(gè)表項(xiàng)是一個(gè)RGBQUAD類(lèi)型的結(jié)構(gòu),且定義一種顏色,定義如下: </p><p>  typedef struct tagRGBQUAD </p><p><b>  { <

41、/b></p><p>  BYTE rgbBlue; //藍(lán)色的亮度(值范圍為0~255) </p><p>  BYTE rgbGreen; //綠色的亮度(值范圍為0~255) </p><p>  BYTE rgbRed; //紅色的亮度(值范圍為0~255) </p><p>  BYTE rgbReserved; //保留,

42、必須為0 </p><p><b>  } RGBQUAD</b></p><p> ?。?)位圖信息頭和顏色表組成位圖信息,BITMAPINFO結(jié)構(gòu)定義如下: </p><p>  typedef struct tagBITMAPINFO </p><p><b>  { </b></p&g

43、t;<p>  BITMAPINFOHEADER bmiHeader; </p><p>  RGBQUAD bmiColors[i]; </p><p>  } BITMAPINFO; </p><p>  顏色表中RGBQUAD結(jié)構(gòu)數(shù)據(jù)的個(gè)數(shù)由biBitCount來(lái)確定,當(dāng)biBitCount=1、4、8時(shí),分別有2、16、256個(gè)表項(xiàng);當(dāng)biBi

44、tCount=24時(shí),沒(méi)有顏色表項(xiàng)。</p><p>  3 圖片文字提取算法</p><p>  3.1 文字提取基本過(guò)程</p><p>  圖像文字提取一般分為以下步驟:載入圖片,圖片處理,文字定位。文字如圖3-1所示。</p><p>  圖3-1 文字提取步驟</p><p>  3.2 文字提取算法&

45、lt;/p><p>  圖片文字提取的算法包括圖片讀入,圖片灰度化,求水平梯度,圖片二值化和圖片中文字的定位。</p><p>  3.2.1 圖片讀入</p><p>  類(lèi)CxImage主要功能在于圖片的讀入,具體實(shí)現(xiàn)如下:</p><p>  //構(gòu)造一個(gè)空余空間用來(lái)存放圖片</p><p>  CxImage::

46、CxImage(DWORD imagetype)</p><p><b>  {</b></p><p>  Startup(imagetype);</p><p><b>  }</b></p><p>  //如果空間是空余的則返回true,否則返回false</p><p&

47、gt;  bool CxImage::Destroy()</p><p><b>  {</b></p><p>  if (info.pGhost==NULL){</p><p>  if (pLayers) { </p><p>  for(long n=0; n<info.nNumLayers;n++){ d

48、elete pLayers[n]; }</p><p>  free(pLayers); pLayers=0;</p><p><b>  }</b></p><p>  if (pSelection) {free(pSelection); pSelection=0;}</p><p>  if (pAlpha) {fr

49、ee(pAlpha); pAlpha=0;}</p><p>  if (pDib) {free(pDib); pDib=0;}</p><p>  return true;</p><p><b>  }</b></p><p>  return false;</p><p><b>

50、  }</b></p><p>  //構(gòu)造圖片信息函數(shù)</p><p>  CxImage::CxImage(DWORD dwWidth, DWORD dwHeight, DWORD wBpp, DWORD imagetype)</p><p><b>  {</b></p><p>  Startup(i

51、magetype);</p><p>  Create(dwWidth,dwHeight,wBpp,imagetype);</p><p><b>  }</b></p><p>  //構(gòu)造插入圖片信息函數(shù)</p><p>  CxImage::CxImage(const CxImage &src, bool

52、copypixels, bool copyselection, bool copyalpha)</p><p><b>  {</b></p><p>  Startup(src.GetType());</p><p>  Copy(src,copypixels,copyselection,copyalpha);</p><

53、p><b>  }</b></p><p>  原始界面:如圖3-2所示。</p><p><b>  圖3-2 原始界面</b></p><p>  插入圖片:如圖3-3所示。</p><p><b>  圖3-3 插入圖片</b></p><p&g

54、t;  3.2.2 灰度化</p><p>  在RGB模型中,如果R=G=B時(shí),則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個(gè)像素只需一個(gè)字節(jié)存放灰度值(又稱(chēng)強(qiáng)度值、亮度值),灰度范圍為0-255。具體實(shí)現(xiàn)如下:</p><p>  //函數(shù)實(shí)現(xiàn)圖片從彩色到黑白的轉(zhuǎn)換</p><p>  HDIB DIB::ToGray(HANDLE h

55、DIB)</p><p><b>  {</b></p><p>  HDIB hNewDIB = NULL;</p><p>  LPBITMAPINFOHEADER lpSrc,lpDest;</p><p>  LPBYTE lpS,lpD;</p><p>  DWORD dwBytesP

56、erLine;</p><p>  DWORD dwImgSize;</p><p>  WORD wBytesPerLine;</p><p>  unsigned i ,j,height,width;</p><p><b>  if(!hDIB)</b></p><p>  return N

57、ULL;</p><p>  lpSrc = (LPBITMAPINFOHEADER)GlobalLock(hDIB);</p><p>  dwBytesPerLine = WIDTHBYTES(24*(lpSrc->biWidth));</p><p>  dwImgSize = lpSrc->biHeight * dwBytesPerLine;&l

58、t;/p><p>  //申請(qǐng)新的內(nèi)存,大小等于原來(lái)圖象的大小</p><p>  hNewDIB = GlobalAlloc(GHND,sizeof(BITMAPINFOHEADER)+dwImgSize);</p><p>  lpDest = (LPBITMAPINFOHEADER)GlobalLock(hNewDIB);</p><p>

59、  //保存圖片的長(zhǎng)寬、顏色深度等信息</p><p>  memcpy((void*)lpDest,(void*)lpSrc,sizeof(BITMAPINFOHEADER));</p><p>  DWORD dwSBytesPerLine;</p><p>  dwSBytesPerLine = (24*(lpSrc->biWidth)+31)/32*4

60、;</p><p>  height = lpDest->biHeight;</p><p>  width = lpDest->biWidth;</p><p>  lpS = (LPBYTE)lpSrc;</p><p>  wBytesPerLine = this->BytePerLine(hDIB);</p&g

61、t;<p>  lpD = (LPBYTE)lpDest;</p><p>  lpS = lpS + sizeof(BITMAPINFOHEADER);</p><p>  lpD = lpD + sizeof(BITMAPINFOHEADER);</p><p>  unsigned r , g ,b,gray ;</p><

62、;p>  //掃描整個(gè)圖片,實(shí)現(xiàn)灰度化</p><p>  for(i = 0 ;i<height; i++)</p><p><b>  {</b></p><p>  for(j = 0 ;j<(unsigned )lpDest->biWidth;j++)</p><p><b> 

63、 {</b></p><p>  //獲得原來(lái)圖片的顏色值</p><p>  r = *(lpS++);</p><p>  g = *(lpS++);</p><p>  b = *(lpS++);</p><p><b>  //計(jì)算灰度值</b></p><

64、;p>  gray = (g*50+r*39+b*11)/100;</p><p>  //保存灰度值到目標(biāo)圖片</p><p>  *(lpD++)=gray;</p><p>  *(lpD++) = gray;</p><p>  *(lpD++) = gray;</p><p><b>  }&

65、lt;/b></p><p>  //處理四字節(jié)對(duì)齊問(wèn)題</p><p>  unsigned k ;</p><p>  for(k=0;k<dwSBytesPerLine-lpSrc->biWidth*3;k++)</p><p><b>  {</b></p><p>&

66、lt;b>  lpS++;</b></p><p><b>  lpD++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  GlobalUnlock(hDIB);</p><p&

67、gt;  GlobalUnlock(hNewDIB);</p><p>  return hNewDIB;</p><p><b>  }</b></p><p>  灰度化后的圖片:如圖3-4所示。</p><p>  圖3-4 灰度化后的圖片</p><p>  3.2.3 水平梯度<

68、/p><p>  圖像梯度可以把圖像看成二維離散函數(shù),圖像梯度其實(shí)就是這個(gè)二維離散函數(shù)的求導(dǎo):</p><p>  圖像梯度: G(x,y) = dx i + dy j;</p><p>  dx(i,j) = I(i+1,j) - I(i,j);//水平梯度</p><p>  dy(i,j) = I(i,j+1) - I(i,j);//垂直梯

69、度</p><p>  其中,I是圖像像素的值(如:RGB值),(i,j)為像素的坐標(biāo)。</p><p>  圖像梯度一般也可以用中值差分:</p><p>  dx(i,j) = [I(i+1,j) + I(i-1,j)]/2;</p><p>  dy(i,j) = [I(i,j+1) +I(i,j-1)]/2; </p>

70、<p>  本文設(shè)計(jì)的算法是求圖像水平梯度的,具體實(shí)現(xiàn)如下:</p><p><b>  //計(jì)算圖片的梯度</b></p><p>  void DIB::GetGraient(HANDLE hGray, int type)</p><p><b>  {</b></p><p> 

71、 LPBITMAPINFOHEADER lpbi;</p><p>  int height;</p><p>  int width;</p><p>  LPBYTE lpData;</p><p><b>  int bpl;</b></p><p><b>  long off;

72、</b></p><p>  //得到圖象的基本信息</p><p>  lpbi = (LPBITMAPINFOHEADER)GlobalLock(hGray);</p><p>  height = lpbi->biHeight;</p><p>  width = lpbi->biWidth;</p>

73、<p>  bpl = this->BytePerLine(hGray);</p><p>  lpData = this->FindDIBBits(hGray);</p><p><b>  //求水平梯度</b></p><p>  if(type == 0) </p><p><b&

74、gt;  {</b></p><p>  for(int i=0;i<height;i++)</p><p>  for(int j=0;j<width-1;j++)</p><p><b>  {</b></p><p>  int off1 = this->PixelOffset(i,j

75、,bpl);</p><p>  int off2 = this->PixelOffset(i,j+1,bpl);</p><p>  lpData[off1] = abs(lpData[off2]-lpData[off1]);</p><p>  lpData[off1+1] = abs(lpData[off2+1]-lpData[off1+1]);<

76、/p><p>  lpData[off1+2] = abs(lpData[off2+2]-lpData[off1+2]);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //垂直梯度</b></p><

77、;p>  else if(type ==1)</p><p><b>  {</b></p><p>  for(int i=0;i<height-1;i++)</p><p>  for(int j=0;j<width;j++)</p><p><b>  {</b></

78、p><p>  int off1 = this->PixelOffset(i,j,bpl);</p><p>  int off2 = this->PixelOffset(i+1,j,bpl);</p><p>  lpData[off1] = abs(lpData[off2]-lpData[off1]);</p><p>  lpD

79、ata[off1+1] = abs(lpData[off2+1]-lpData[off1+1]);</p><p>  lpData[off1+2] = abs(lpData[off2+2]-lpData[off1+2]);</p><p><b>  }</b></p><p><b>  }</b></p>

80、<p><b>  //兩者都要</b></p><p>  else if(type ==2)</p><p><b>  {</b></p><p><b>  }</b></p><p>  GlobalUnlock(hGray);</p>

81、<p><b>  }</b></p><p>  水平梯度后的圖片:如圖3-5所示。</p><p>  圖3-5 水平梯度后的圖片</p><p>  3.2.4 二值化</p><p>  圖像的二值化處理將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果。將256個(gè)亮度等級(jí)

82、的灰度圖像通過(guò)適當(dāng)?shù)拈y值選取而獲得仍然可以反映圖像整體和局部特征的二值化圖像。所有灰度大于或等于閥值的像素被判定為屬于特定物體,其灰度值為255表示,否則這些像素點(diǎn)被排除在物體區(qū)域以外,灰度值為0,表示背景或者例外的物體區(qū)域。具體實(shí)現(xiàn)如下:</p><p>  //實(shí)現(xiàn)圖片的黑白二值化</p><p>  void DIB::WhiteBlack(HANDLE hDIB,unsigned

83、n)</p><p><b>  {</b></p><p>  LPBITMAPINFOHEADER lpbi;</p><p>  LPBYTElpS;</p><p>  intwidth,height;</p><p>  longlOffset;</p>&l

84、t;p>  WORD wBytesPerLine;</p><p><b>  if(!hDIB)</b></p><p><b>  return ;</b></p><p>  wBytesPerLine = this->BytePerLine(hDIB);</p><p>

85、  lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);</p><p>  //得到圖片的長(zhǎng)寬信息</p><p>  width = lpbi->biWidth;</p><p>  height = lpbi->biHeight;</p><p>  lpS = (LPBYTE)lpbi;

86、</p><p>  //lps指向數(shù)據(jù)區(qū)</p><p>  lpS = lpS + sizeof(BITMAPINFOHEADER);</p><p>  //掃描整個(gè)圖片,實(shí)現(xiàn)二值化</p><p>  for(int i = 0;i<height;i++)</p><p>  for(int j = 0

87、;j<width;j++)</p><p>  { //得到象素?cái)?shù)據(jù)在數(shù)據(jù)區(qū)中的偏移</p><p>  lOffset = this->PixelOffset(i,j,wBytesPerLine);</p><p>  if(*(lpS+lOffset)<n)//象素值小于臨界值</p><p>  { //把象素

88、填充為黑色</p><p>  *(lpS+lOffset++) = 0;</p><p>  *(lpS+lOffset++) = 0;</p><p>  *(lpS+lOffset) = 0;</p><p><b>  }</b></p><p>  else //象素值大于臨界值&l

89、t;/p><p><b>  { </b></p><p>  //把象素填充為白色</p><p>  *(lpS+lOffset++) = 255;</p><p>  *(lpS+lOffset++) = 255;</p><p>  *(lpS+lOffset) = 255;</

90、p><p><b>  }</b></p><p><b>  }</b></p><p>  GlobalUnlock(hDIB);</p><p><b>  }</b></p><p>  二值化后的圖片:如圖3-6所示。</p><

91、;p>  圖3-6 二值化后的圖片</p><p>  3.2.5 文字定位</p><p>  圖片經(jīng)二值化后,會(huì)呈現(xiàn)黑白分明的兩部分,文字一般集中在白色區(qū)域。本文提供的文字定位方法就是產(chǎn)生一個(gè)矩形框,矩形框逐步移動(dòng),找出文字集中區(qū)域。具體實(shí)現(xiàn)如下:</p><p><b>  //圖片文字定位</b></p><

92、p>  int DIB::LocateText(HANDLE hDIB, CRect &rect)</p><p><b>  {</b></p><p><b>  //灰度化</b></p><p>  this->Togray(hDIB);</p><p><b>

93、;  //求梯度</b></p><p>  this->GetGraientForFrame(hDIB,0);</p><p><b>  //二值化</b></p><p>  this->WhiteBlack(hDIB,25);</p><p>  LPBITMAPINFOHEADER lp

94、bi;</p><p>  lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);</p><p>  int h = lpbi->biHeight;</p><p>  int w = lpbi->biWidth;</p><p>  int bpl = this->BytePerLine

95、(hDIB);</p><p>  LPBYTE lpData = this->FindDIBBits(hDIB);</p><p><b>  //調(diào)整矩形框的寬</b></p><p>  const int windW = w*1/3;</p><p><b>  //調(diào)整矩形框的高</b&g

96、t;</p><p>  const int windH = h/8;</p><p>  int max_i=-1,max_j;</p><p>  int max_v=0;</p><p><b>  //過(guò)濾</b></p><p>  for(int i=0;i<h-windH-1

97、;i+=2)</p><p>  for(int j=150;j<w-windW-5;j+=3)</p><p><b>  {</b></p><p>  rect.top = i;</p><p>  rect.bottom = rect.top+windH;</p><p>  re

98、ct.left = j;</p><p>  rect.right = rect.left+windW;</p><p><b>  int temp;</b></p><p>  //計(jì)算當(dāng)前窗口中的白點(diǎn)個(gè)數(shù)</p><p>  temp = RectCal(lpData,rect,bpl);</p>&

99、lt;p>  //當(dāng)前窗口中的白點(diǎn)更多</p><p>  if(temp >windH*windW*0.05 && temp > max_v)</p><p><b>  {</b></p><p>  max_i = i;</p><p>  max_j = j;</p>

100、<p>  max_v = temp;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(max_i !=-1)</p><p><b>  {</b></p><p>  rect

101、.top = max_i;</p><p>  rect.bottom =max_i+windH-1;</p><p>  rect.left =max_j;</p><p>  rect.right = rect.left + windW-1;</p><p><b>  //區(qū)域收縮</b></p>&

102、lt;p><b>  //上邊界逼近</b></p><p>  for(int i=rect.top;i<rect.bottom;i++)</p><p><b>  {</b></p><p>  int count=0;</p><p>  for(int j=rect.left

103、;j<rect.right;j++)</p><p><b>  {</b></p><p>  int off = this->PixelOffset(i,j,bpl);</p><p>  if(lpData[off] == 255)</p><p><b>  count++;</b&g

104、t;</p><p><b>  }</b></p><p>  //接觸點(diǎn)達(dá)到一定個(gè)數(shù)</p><p>  if(count > (rect.right-rect.left)*0.05)</p><p><b>  break;</b></p><p><b&g

105、t;  }</b></p><p>  int top = i;</p><p>  //從底部向上,尋到下邊界</p><p>  for( i=rect.bottom;i>rect.top;i--)</p><p><b>  {</b></p><p>  int cou

106、nt=0;</p><p>  for(int j=rect.left;j<rect.right;j++)</p><p><b>  {</b></p><p>  int off = this->PixelOffset(i,j,bpl);</p><p>  if(lpData[off] == 255)&

107、lt;/p><p><b>  count++;</b></p><p><b>  }</b></p><p>  //接觸點(diǎn)達(dá)到一定個(gè)數(shù)</p><p>  if(count > (rect.right-rect.left)*0.05)</p><p><b>

108、;  break;</b></p><p><b>  }</b></p><p>  int bottom =i;</p><p><b>  //尋找左邊界</b></p><p>  for( int j=rect.left;j<rect.right;j++)</p&g

109、t;<p><b>  {</b></p><p>  int count =0;</p><p>  for(int i=rect.top;i<rect.bottom;i++)</p><p><b>  {</b></p><p>  int off = this->P

110、ixelOffset(i,j,bpl);</p><p>  if(lpData[off] == 255)</p><p><b>  count++;</b></p><p><b>  }</b></p><p>  //遇到兩白點(diǎn),則停止</p><p>  if(co

111、unt >2)</p><p><b>  break;</b></p><p><b>  }</b></p><p>  int left = j;</p><p>  for( j=rect.right;j>rect.left;j--)</p><p>&l

112、t;b>  {</b></p><p>  int count =0;</p><p>  for(int i=rect.top;i<rect.bottom;i++)</p><p><b>  {</b></p><p>  int off = this->PixelOffset(i,j,

113、bpl);</p><p>  if(lpData[off] == 255)</p><p><b>  count++;</b></p><p><b>  }</b></p><p>  if(count >2)</p><p><b>  break;&

114、lt;/b></p><p><b>  }</b></p><p>  int right = j;</p><p>  rect.top = top;</p><p>  rect.bottom = bottom;</p><p>  rect.left = left;</p>

115、;<p>  rect.right =right;</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b>

116、</p><p>  圖片文字定位:如圖3-7所示。</p><p>  圖3-7 圖片文字定位</p><p><b>  4 系統(tǒng)測(cè)試</b></p><p><b>  4.1 運(yùn)行界面</b></p><p>  程序運(yùn)行后的界面:如圖4-1所示。</p&g

117、t;<p><b>  : </b></p><p><b>  圖4-1 原始界面</b></p><p>  4.2 測(cè)試圖片文字提取 </p><p>  4.2.1 第一組測(cè)試</p><p>  第一組測(cè)試,用于測(cè)試圖片中文字能完全定位的:</p><

118、p>  打開(kāi)第一張圖片:如圖4-2所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW = w*1/4,高度windH = h/3。</p><p>  圖4-2 第一張圖片</p><p>  灰度化:如圖4-3所示。</p><p><b>  圖4-3 灰度化</b></p><p

119、>  水平梯度:如圖4-4所示。</p><p><b>  圖4-4 水平梯度</b></p><p>  二值化:如圖4-5所示。</p><p><b>  圖4-5 二值化</b></p><p>  文字定位:如圖4-6所示。</p><p><b>

120、;  圖4-6 文字定位</b></p><p>  打開(kāi)第二張圖片:如圖4-7所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW = w*1/2,高度windH = h/2。</p><p>  圖4-7 第二張圖片</p><p>  文字定位:如圖4-8所示。</p><p><b&g

121、t;  圖4-8 文字定位</b></p><p>  打開(kāi)第三張圖片:如圖4-9所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW = w*1/3,高度windH = h/6。</p><p>  圖4-9 第三張圖片</p><p>  文字定位:如圖4-10所示。</p><p>  圖4-

122、10 文字定位</p><p>  4.2.2 第二組測(cè)試</p><p>  第二組測(cè)試,用于測(cè)試圖片中文字不能完全定位的:</p><p>  打開(kāi)第一張圖片:如圖4-11所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW = w*1/3,高度windH = h/6。</p><p>  圖4-11 第

123、一張圖片</p><p>  文字定位:如圖4-12所示。</p><p>  圖4-12 文字定位</p><p>  打開(kāi)第二張圖片:如圖4-13所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW = w*1/3,高度windH = h/3。</p><p>  圖4-13 第二張圖片</p>

124、<p>  文字定位:如圖4-14所示。</p><p>  圖4-14 文字定位</p><p>  4.2.3 第三組測(cè)試</p><p>  第三組測(cè)試,用于測(cè)試圖片中文字定位錯(cuò)誤的:</p><p>  打開(kāi)第一張圖片:如圖4-15所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW =

125、 w*1/2,高度windH = h/3。</p><p>  圖4-15 第一張圖片</p><p>  文字定位:如圖4-16所示。</p><p>  圖4-16 文字定位</p><p>  打開(kāi)第二張圖片:圖4-17所示。</p><p>  定位文字的矩形框?yàn)閷挾葁indW = w*1/2,高度windH

126、= h/3。</p><p>  圖4-17 第二張圖片</p><p>  文字定位:如圖4-18所示。</p><p>  圖4-18 文字定位</p><p><b>  5 結(jié)論及展望</b></p><p>  隨著多媒體技術(shù)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,以圖像、音頻和視頻為主的多媒體信息大量

127、涌現(xiàn),為了實(shí)現(xiàn)對(duì)多媒體信息的高效訪問(wèn),多媒體處理和檢索工具的開(kāi)發(fā)就成了當(dāng)務(wù)之急。而圖像中的文字包含了高層的語(yǔ)義信息,是理解圖像內(nèi)容的重要線索,因此,檢測(cè)和識(shí)別圖像中所含的文字是進(jìn)行圖像檢索的有效手段,而圖像中的文字提取技術(shù)也隨之成為多媒體分析領(lǐng)域的研究熱點(diǎn)。</p><p>  本文對(duì)圖片中的文字提取算法進(jìn)行了系統(tǒng)的研究,并在對(duì)算法的深入研究中設(shè)計(jì)實(shí)現(xiàn)了一個(gè)靜態(tài)圖片中文字提取的系統(tǒng)。在閱讀一定量的參考文獻(xiàn)的基礎(chǔ)上

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論