




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、摘要 本論文主要講述了圖像文件(bmp)文件格式下中簡單圖形的識別,主要是直線和圓的識別,這在工程圖的識別和其他領(lǐng)域中都有很多的應(yīng)用。 【關(guān)鍵詞】:圖形識別 、圖像處理、霍夫變換、單義域、多義域、delphi 目 錄第一章 概述4第一節(jié) 引言4第二節(jié) 在工程圖的識別中常用的方法4第二章 論文的工作基礎(chǔ)和工作環(huán)境6第一節(jié) 數(shù)字圖像處理技術(shù)61. 圖像處理的基本內(nèi)容62. 主要的圖像處理技術(shù)6第二節(jié) 圖像格式BMP格式7第三節(jié) 算法及數(shù)學(xué)基礎(chǔ)81. 霍夫變換(Hough Transform)82. 基于單義域的直線及圓識別算法113. 主要技術(shù)14第三章 直線和圓的識別和編輯的實現(xiàn)15第一節(jié) 系統(tǒng)
2、的層次結(jié)構(gòu)的圖示15第二節(jié) 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及類的設(shè)計161. 主要類的層次結(jié)構(gòu)162. 圖形基類(CShape)173. 圖形類(CLine、CCircle)184. 圖形容器類(CShapes)205. 點類(CPoint)216. 單義域類(CSegment)217. 基于單義域識別類(CSegments)228. 霍夫變換識別直線類(CHTLine)239. 霍夫變換識別圓類(CHTCircle)23第三節(jié) 系統(tǒng)功能介紹24第四章 結(jié)束語29參考文獻30第一章 概述第一節(jié) 引言計算機技術(shù)的發(fā)展,使人類社會進入了信息化和自動化,計算機智能識別也隨著計算機的發(fā)展得到了迅速的發(fā)展。特別是圖形圖像
3、的計算機處理技術(shù)更是有了前所未有的進步和應(yīng)用。計算機識別也逐漸的從圖形圖像處理的大環(huán)境下分離出來作為一門新的高科技研究領(lǐng)域出現(xiàn)。圖形圖像的識別涉及到的學(xué)科很多,包括數(shù)字信號處理、工程數(shù)學(xué)、信息論、運籌學(xué)、等,它與計算機、自動化、生物學(xué)、關(guān)學(xué)、視覺心里和生理學(xué)、人工智能、智能信息處理等眾多領(lǐng)域交叉、綜合集成,有廣泛的應(yīng)用。本論文實現(xiàn)的是基礎(chǔ)的圖形識別,bmp圖像文件格式中對圖形的矢量化。識別基本的圖元直線和圓。直線和圓是二值圖像中最基本的組成元素,也是最常見的圖形元素。在工程圖的數(shù)字化識別中有很大的應(yīng)用。關(guān)于理想情況的幾點說明:1. 所識別的bmp圖像文件是經(jīng)過處理的,沒有“噪音”等,在本論文中
4、直接采用的是用Windows中的畫圖軟件畫出的圖像。2. 本論文中圖像中的圖元都是單一的線性,即線寬是一個象素的情況。第二節(jié) 在工程圖的識別中常用的方法圖形的識別最主要的是圖形特征的提取,在這個階段,常用的方法是全局特征方法(包括:不變距,自回歸模型、傅立葉描述符、霍夫變換等),全局特征的特征提取方法是理論比較完善的,計算過程比較清楚。針對不同的特征提取處理,采用相對應(yīng)的模式匹配方法來將圖形分類,模式識別迄今已有很多方法,有模板匹配、統(tǒng)計模式識別、句法模式識別、模糊識別和神經(jīng)網(wǎng)絡(luò)識別等。在二值圖像的處理中,人們常用的數(shù)據(jù)結(jié)果有游程編碼考慮了掃描行上相鄰象素間的相關(guān)性;行相鄰圖法(Line Ad
5、jeceney Gragh),是由Pavlidis提出的一種二值圖的數(shù)據(jù)結(jié)構(gòu),LAG還考慮了相鄰行黑游程之間的相鄰關(guān)系,遍歷時很方便;BAG(Bloek Adjeceney Gragh)是由余斌提出的,它是相鄰圖LAG在兩個方向上的推廣。在本論文中就是利用了LAG的數(shù)據(jù)結(jié)構(gòu)思想與c+ builder的數(shù)據(jù)結(jié)構(gòu)相結(jié)合的方法即:用下一個象素點是與鏈表頭相鄰還是和尾相鄰來描述其相鄰的關(guān)系。本論文中對交點的處理。目前對交點的處理有下面幾類算法:1. 基于網(wǎng)格算法,該算法是通過網(wǎng)格加大搜索步長來跳過交點。2. 基于圖段合并的算法,是根據(jù)交點處行程段的連通性,以交點為界將圖線分割成圖段,記錄各段之間的連接
6、及從屬關(guān)系,然后連接或延長各分支圖段,然后得到整條圖線。在本論文中采用了第二種方法,基于圖段合并的算法。當(dāng)然現(xiàn)下有很多更好的算法和數(shù)據(jù)結(jié)構(gòu),但是大部分是針對具體的結(jié)構(gòu)或者研究方向不具有一般性,所以本論文的實現(xiàn)用了上述的數(shù)據(jù)結(jié)構(gòu)和方法。第二章 論文的工作基礎(chǔ)和工作環(huán)境第一節(jié) 數(shù)字圖像處理技術(shù)將客觀世界實體或圖片等通過不同的量化(數(shù)字化)手段送入計算機,由計算機按使用要求進行圖像的平滑、增強、復(fù)原、分割、重建、編碼、存儲、傳輸?shù)确N種不同的處理,需要時把加工處理后的圖像重新輸出,這個過程稱為圖像處理。因此,圖像處理的含義是用計算機對圖像進行加工處理以得到某種預(yù)期的效果,它本質(zhì)上是一種二維數(shù)字信號處理
7、技術(shù)。1. 圖像處理的基本內(nèi)容圖像處理的基本內(nèi)容可以歸結(jié)為:1. 對圖像進行增強或修改。以改變或強調(diào)圖像信息的某些特點(增強有用信息,無用信息),改善圖像的視覺質(zhì)量;2. 描述圖像的特征并進行特征抽取和分析。例如提取圖像的紋理特征、頻譜特征、邊界特征和顏色特征等;對像素用某個標準衡量并進行分類比較,將抽取的特征歸結(jié)為一定的模式,這屬于模式識別的范圍;3. 圖像的重建(Reconstruction)。對圖像的某些部分合并或進行重新組織,這種技術(shù)是從N1維的信息用某種算法得到N維的圖像,例如計算機視覺就是這樣的一種技術(shù)。2. 主要的圖像處理技術(shù)2.1 圖像的增強和恢復(fù)圖像增強所追求的目標是改善圖像
8、的視覺質(zhì)量,符合人們的主觀要求,它不追究圖像客觀質(zhì)量的降低原因。圖像的視覺質(zhì)量是因人而異的,其質(zhì)量的高低和好壞受觀看者的心理、愛好和文化素質(zhì)等因素的影響。圖像的恢復(fù)則致力于探索圖像質(zhì)量降低的原因,并盡可能消除圖像質(zhì)量的降低,恢復(fù)圖像的本來面目。2.2 圖像的壓縮編碼彩色數(shù)字圖像通常是由三個二維數(shù)組組成的,其信息量相當(dāng)大,這給圖像的傳輸、處理、存儲和顯示等帶來很大的負擔(dān)。但問題的另一方面是圖像中又往往存在很多冗余信息,在傳輸和存儲時可以對數(shù)字圖像進行一定方式的編碼,刪除圖像中的冗余信息,以提高圖像傳輸和存儲的效率。2.3 圖像重建在醫(yī)學(xué)和工程應(yīng)用中,利用超聲波、x射線等技術(shù)取得物體的多幅來自不同
9、角度的投影圖,通過計算可得到物缽內(nèi)部的圖像,這種技術(shù)稱為投影重建,例如CT就是圖像重建的一個應(yīng)用。2.4 圖像的分割和描述計算機按照一定的客觀測度(例如灰度、顏色和幾何性質(zhì)等)將圖像中包含的物體和區(qū)域從圖像中區(qū)分出來,稱為圖像的分割。用適當(dāng)?shù)臄?shù)學(xué)語言來表示被分割出來的物體或區(qū)域的結(jié)構(gòu)和統(tǒng)計特性,或用數(shù)學(xué)語言表示區(qū)域問的關(guān)系,稱為描述。圖像經(jīng)分別和描述后,可較為容易地分類和識別。第二節(jié) 圖像格式BMP格式BMP(Bitmap-File)圖形文件是Windows采用的圖形文件格式,在Windows環(huán)境下運行的所有圖像處理軟件都支持BMP圖像文件格式。Windows系統(tǒng)內(nèi)部各圖像繪制操作都是以BMP
10、為基礎(chǔ)的。Windows 3.0以前的BMP圖文件格式與顯示設(shè)備有關(guān),因此把這種BMP圖像文件格式稱為設(shè)備相關(guān)位圖DDB(device-dependent bitmap)文件格式。Windows 3.0以后的BMP圖像文件與顯示設(shè)備無關(guān),因此把這種BMP圖像文件格式稱為設(shè)備無關(guān)位圖DIB(device-independent bitmap)格式,目的是為了讓W(xué)indows能夠在任何類型的顯示設(shè)備上顯示所存儲的圖像。BMP位圖文件默認的文件擴展名是BMP或者bmp(有時它也會以.DIB或.RLE作擴展名)。l 文件結(jié)構(gòu) 位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file heade
11、r)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節(jié)陣列,它具有如下所示的形式。 位圖文件的組成結(jié)構(gòu)名稱符號位圖文件頭(bitmap-file header)BITMAPFILEHEADERbmfh位圖信息頭(bitmap-information header)BITMAPINFOHEADERbmih彩色表(color table)RGBQUADaColors圖象數(shù)據(jù)陣列字節(jié)BYTEaBitmapBits第三節(jié) 算法及數(shù)學(xué)基礎(chǔ)1. 霍夫變換(Hough Transform)霍夫變換是圖像處理中從圖像中識別幾何形狀的基本方法之一
12、。其基本思想就是把圖像平面上的點對應(yīng)到參數(shù)平面上的曲線,最后通過統(tǒng)計特性來解決問題。自1962年Hough公布了該算法以來,由于其良好的抗噪聲性能和對部分遮蓋的不敏感等特性,霍夫變換在模式識別領(lǐng)域得到廣泛的應(yīng)用,如直線、圓、橢圓、矩形等幾何圖形檢測,任意形狀區(qū)域的邊界提取,二維或三維運動的參數(shù)估計等。下面就于本論文相關(guān)的直線和圓的識別進行簡單的介紹。1.1 霍夫變換識別直線霍夫變換識別直線,是將圖像空間中的一點變換為參數(shù)空間中的一條直線。圖像空間中同一直線上的點,經(jīng)霍夫變換所形成的直線相交于參數(shù)空間中的一點,該點坐標代表圖像空間中直線的斜率及截距。利用累加數(shù)組累計參數(shù)空間中通過該點的直線條數(shù),
13、即代表圖像空間中直線上的點數(shù)。圖1.1 霍夫變換識別直線(1)設(shè)已知一黑白圖像上畫了一條直線,要求出這條直線所在的位置。我們知道,直線的方程可以用來表示,其中k和b是參數(shù),分別是斜率和截距。過某一點的所有直線的參數(shù)都會滿足方程。即圖像空間中的一點確定了參數(shù)空間中的一族直線。方程在參數(shù)k-b平面上是一條直線。這樣,圖像x-y平面上的一個前景像素點就對應(yīng)到參數(shù)平面上的一條直線?;舴蜃儞Q識別直線的算法描述如下:Step1. 初始化一塊緩沖區(qū),對應(yīng)于參數(shù)平面,將其所有數(shù)據(jù)置為0。Step2. 對于圖像上每一前景點,求出參數(shù)平面對應(yīng)的直線,把這直線上的所有點的值都加。Step3. 找到參數(shù)平面上峰值點的
14、位置,這些位置的坐標就是原圖像上直線的參數(shù),每個位置對應(yīng)于原圖像上的一條直線。上面是霍夫變換識別直線的基本思想。在實際應(yīng)用中,形式的直線方程沒有辦法表示x=c形式的直線(這時候,直線的斜率為無窮大)。所以實際應(yīng)用中,是采用參數(shù)方程:這樣,圖像平面(x, y)空間上的一個點就對應(yīng)到參數(shù)空間中的一條正弦曲線上。在變換后的空間中這條正弦曲線上的任意一點對應(yīng)于原始圖像平面(x, y)空間的一條直線,這條直線必通過這個點,而(x, y)空間中所有共線的點經(jīng)過變換后所對應(yīng)的各正弦曲線都相交于一點。圖1.2 霍夫變換識別直線(2)1.2 霍夫變換識別圓1) 半徑已知的圓的識別利用霍夫變換檢測出半徑已知的圓形
15、,是將圖像平面上的每一點對應(yīng)到參數(shù)平面上的一個以已知半徑為半徑的圓。經(jīng)過霍夫變換,在參數(shù)平面上得到圓相交于一點,這個點的坐標即為原圖形坐標平面上待識別的圓心坐標。算法可以簡單描述為:取和圖像平面一樣的參數(shù)平面,以圖像上每一個前景點為圓心,以已知的半徑在參數(shù)平面上畫圓,并把結(jié)果進行累加。最后找出參數(shù)平面上的峰值點,這個位置就對應(yīng)了圖像上的圓心。2) 未知半徑的圓的識別在第一個問題基礎(chǔ)上,把參數(shù)平面擴大稱為三維空間,即x-y-R三維,對應(yīng)圓的圓心和半徑。圖像平面上的每一點就對應(yīng)于參數(shù)空間中每個半徑下的一個圓,在參數(shù)的三維空間中得到一個圓錐。最后找出參數(shù)空間中的峰值點,即得到待識別的圓的圓心和半徑。
16、由于霍夫變換具有良好的抗噪聲性能和對部分遮蓋的不敏感等特性,又不受圖像旋轉(zhuǎn)的影響,在很多領(lǐng)域都有廣泛的應(yīng)用,有關(guān)霍夫變換的研究和改進也很多。例如廣義霍夫變換、隨機霍夫變換、快速霍夫變換等等,就是針對直線的霍夫變換也有很多改進算法。由于時間的原因,在本軟件中,只是使用了標準的霍夫變換算法。2. 基于單義域的直線及圓識別算法霍夫變換為幾何圖形的識別的一個重要算法,但是由于該標準算法的時間復(fù)雜度和空間復(fù)雜度都是,其中m是參數(shù)坐標的維數(shù),雖然有不少針對具體問題(例如直線識別)的改進算法,其在實際使用中也存在計算量大的問題。針對本論文的工作的實際情況,參考文獻【1】,并進行了適當(dāng)?shù)暮喕?,完成了論文的識別
17、部分。下面就對這個基于單義域的識別算法進行簡單的介紹。2.1 多義域的獲得單義域是指對待識別的圖形進行分割得到的具有單一的幾何意義(線段或圓?。c的集合。對圖片進行從上往下、從左往右的掃描,根據(jù)交點進行分割得到多義域,多義域中的點構(gòu)成一個連通區(qū)域。對多義域進行識別并分割得到單義域。多義域由鏈表實現(xiàn)。算法描述如下:1 對圖形進行從上往下、從左往右的掃描;2 對每一個前景點,判斷其是否為交點;3 將該點與現(xiàn)有的多義域的頭(如果其頭節(jié)點不是交點)、尾(如果其尾節(jié)點不是交點)節(jié)點進行比較,如果與頭節(jié)點相鄰,將其插入到該多義域的頭節(jié)點之前;如果與尾節(jié)點相鄰,將其插入到該多義域的尾節(jié)點之后。4 如果該前景
18、點不屬于任何現(xiàn)有多義域,則以該點為頭節(jié)點生成新的多義域。5 直到圖形掃描完畢。注:交點的判斷。由此得到的多義域?qū)⑹且粋€線段、一個圓弧或者線段和圓弧的組合。在后續(xù)的識別過程中將把不是單義域的進行分裂。2.2 最小二乘法擬合直線和圓最小二乘法首先由Karl Gauss為進行行星軌道預(yù)測的研究而提出的?,F(xiàn)在最小二乘法已經(jīng)變成從實驗數(shù)據(jù)來進行參數(shù)估計的主要手段。由最小二乘法獲得的估計在一定條件下有最佳的統(tǒng)計特性:一致、無偏、有效。它提供給我們一個數(shù)學(xué)程式,通過它能獲得一個在最小方差意義上與實驗數(shù)據(jù)最好擬合助模型。運用最小二乘法進行圓的擬合公式如下:其中,為樣點,為所求圓心,為半徑,為平均徑向誤差, 為
19、最大徑向誤差。2.3 多義域分裂和單義域的識別對2.1中得到的多義域,運用最小二乘法進行擬合,對于擬合不成功的多義域運用首尾相連最大距離法進行分裂,得到單義域,并記錄下各單義域的擬合結(jié)果,供全局考慮,識別直線和圓用。算法描述如下:1 從2.1得到的多義域列表里取第一個多義域;2 對選中的多義域運用最小二乘法進行圓的擬合;如果得到的平均徑向誤差和最大徑向誤差小于指定閾值,則認為擬合成功,該多義域為一圓弧的單義域;記錄擬合的結(jié)果,作為總體識別的種子圓,轉(zhuǎn)向5執(zhí)行,否則執(zhí)行3。3 對選中的多義域運用最小二乘法進行直線擬合;如果得到的平均距離誤差和最大距離誤差小于指定閾值,則認為擬合成功,該多義域為一
20、線段的單義域;記錄擬合結(jié)果,作為總體識別的種子直線,轉(zhuǎn)向5執(zhí)行,否則執(zhí)行4。4 該多義域為多個線段或圓弧的組合。將該多義域的頭尾節(jié)點連接,計算該多義域中各點與頭尾節(jié)點連線的距離,取距離最大的點,對該多義域進行分裂,得到兩個新的多義域,取代原先的多義域;轉(zhuǎn)向2執(zhí)行。5 取多義域列表中的下一個,轉(zhuǎn)向2執(zhí)行。由此,所有的多義域都分裂為單義域,并對各單義域進行了擬合。2.4 總體整合,識別直線和圓對2.3得到的單義域列表進行總體的整合,得到直線和圓。1 選取單義域列表中的第一個單義域,將其擬合的圖形(直線或圓)作為種子圖形;2 將列表中其他單義域的識別結(jié)果與種子圖形進行比較,如果誤差小于指定閾值,則屬
21、于同一直線或同一圓,將其與選定單一域進行合并,從列表中刪除該單義域;3 計算選定單義域的幾何數(shù)據(jù),得到圖形;4 選取列表中的下一個單義域,轉(zhuǎn)動2執(zhí)行。3. 主要技術(shù)3.1 Borland C+ Builder本論文的編程環(huán)境之所以選用c+ builder 是因為他有以下的優(yōu)點:輸出入接口設(shè)計簡單提供一流的開發(fā)環(huán)境提供最標準的CC魯開發(fā)工具提供豐富的組件與最強勁的調(diào)試工具VCL類庫中封裝了Windows的圖形設(shè)備接口(GDI),使得用戶很方便地在應(yīng)用程序添加圖像或處理圖像。圖像類主要有Tbitmap、TBrush、TCanves、TFont、TgraphakControl、Tgraphic、Ti
22、con、TJPEGImage、TPen和Tpictur以Tmatifile類。3.2 虛類及虛方法的使用虛類和虛方法的使用在本論文中主要是Cshapes基類及虛方法的實現(xiàn)。第三章 直線和圓的識別和編輯的實現(xiàn)第一節(jié) 系統(tǒng)的層次結(jié)構(gòu)的圖示第二節(jié) 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及類的設(shè)計1. 主要類的層次結(jié)構(gòu)1.1 圖形處理類:1.2 識別用類:2. 圖形基類(CShape)2.1 描述圖形基類,提供所有圖形的標準屬性和方法。其他圖形類(直線、圓)等都是該類的子類,繼承其所有的public屬性和方法,對其中的虛方法(virtual)進行重定義和實現(xiàn)。該類為虛類,其成員函數(shù)主要為虛函數(shù),為其所有子類提供統(tǒng)一的接口,但是
23、沒有實現(xiàn)。其他模塊對圖形進行操作時,除非生成新的實例(Instance),都無須知道所操作的是哪個具體的圖形,而統(tǒng)一使用Cshape類型,為程序的實現(xiàn)、擴充和維護提供很大方便。2.2 實現(xiàn)class CShape public:/* 屬性定義 */前景色(由于時間等的限制,本系統(tǒng)暫時只定義該圖形的屬性,其/ 他如:填充色,線條型,填充型等可擴充) TColor color; /* 編輯用屬性 */ /編輯時標志該圖形是否被選擇 bool isSelected; /編輯操作所選中的點 TPoint * editP /* 識別用屬性 */ / 識別的效果描述,值越小說明識別效果越好 / 最小二乘法
24、的平均誤差;/ 霍夫變換:1 - 參數(shù)空間中該圖形的值/最大值 double chance; /圖形上點的數(shù)量 int pointCount; /* 成員函數(shù)定義 */ /* 顯示和描述用方法 */ / 顯示圖形:在指定的位圖上顯示圖形 virtual void draw(Graphics:TBitmap * argDest); / 描述圖形:作為TtreeView的節(jié)點(主窗體使用) virtual void discript(int index, TTreeView * tree); / 描述圖形:返回描述圖形的字符串 virtual String discript(); /* 識別用 *
25、/ / 比較兩個圖形,如果是同一個圖形,返回True,否則False。 / 直線上的兩個線段;圓上面的兩個圓弧 virtual bool similarWith(CShape * argShape); / 合并兩個圖形 / 經(jīng)過判斷為相同的圖形進行合并,返回True;否則返回False。 virtual bool mergeWith(CShape * argShape); / 判斷圖形存在的可能性(利用具體圖形的幾何規(guī)則) virtual bool checkPossible(); /* 編輯用 */ / 判斷是否點擊該圖形,若選中則當(dāng)前編輯的圖形改為當(dāng)前圖形 virtual bool isC
26、lickOnShape(int x, int y); / 取得鼠標形狀:鼠標移動到選中圖形的可操作點上時,顯示為編輯形狀 virtual TCursor getCursor(int x, int y); / 更新圖形:將編輯點移動到(x, y)點。更新成功返回True,否則False。 virtual bool update(int x, int y);3. 圖形類(CLine、CCircle)3.1 描述圖形類是幾何圖形的具體實現(xiàn),實現(xiàn)對應(yīng)幾何圖形的描述和相關(guān)操作。圖形類有共同的父類CShape,對父類中定義的虛方法根據(jù)本幾何圖形的特征進行實現(xiàn)。根據(jù)要求,本系統(tǒng)中實現(xiàn)了直線(CLine)和圓
27、(CCircle)兩個圖形類。其他簡單的幾何圖形如橢圓、矩形等也可以類似的方法實現(xiàn),作為本系統(tǒng)的一個擴充。本系統(tǒng)中,直線類采用直觀的的形式來描述直線(既避免點斜式不能描述豎直直線,也避免極坐標方程轉(zhuǎn)換的問題)。因為成比例的兩組和表示同一條直線,所以規(guī)定,如果B參數(shù)不為0,則。由于要識別圖像中的線段,所以增加兩個端點進行限制。直線類有三個點可以編輯:1)兩個端點,選中一個端點并移動,是以另一端點為軸進行旋轉(zhuǎn);2)線段的中點,選中中點并移動,是平移整個直線。圓類采用的形式描述(其中為圓心,R為半徑),直觀方便。圓上有兩個點支持編輯操作:1)圓心,選中圓心并移動,是平移整個圓;2)圓上的一個點,選中
28、該點并移動,是改變圓的半徑,圓心不變。3.2 實現(xiàn)l 直線類(CLine)class CLine: public CShape public: /* 初始化 */ CLine(double argA, double argB, double argC); /* 直線的屬性 */ / 線段的兩個端點 TPoint *startP, *endP; / 直線方程的參數(shù):A,B,C double A, B, C;/* 對父類虛方法的實現(xiàn) */ 在目標位圖上畫出直線(本系統(tǒng)中的實現(xiàn)為畫線段) void draw(Graphics:TBitmap * argDest); / 在TTreeView中描述 v
29、oid discript(int index, TTreeView * tree); / 返回描述用字符串 String discript(); / 判斷該直線是否與指定圖形相同 / 將指定圖形強制轉(zhuǎn)化為CLine類型,比較其參數(shù)A, B, C,/ 若小于指定閾值,則返回Ture,否則返回False。 bool similarWith(CShape * argShape); / 合并同一直線上的兩個線段 / 若目標圖形與該圖形屬同一直線,進行合并,返回True;/ 否則返回False。 void mergeWith(CShape * argShape); / 判斷是否選擇該直線進行編輯。 /
30、判斷指定點(x, y)到該直線的距離,/ 如果小于指定閾值則返回True,否則False。 bool isClickOnShape(int x, int y); / 取得鼠標形狀。 / 端點時返回45度,135度的雙向箭頭形狀表示旋轉(zhuǎn);/ 中點時返回垂直的四個方向箭頭的形狀表示移動 TCursor getCursor(int x, int y); / 更新直線 bool update(int x, int y);l 圓類(CCircle)class CCircle: public CShape public: /* 初始化 */ CCircle(int argX, int argY, int
31、argR); /* 圓的屬性 */ / 圓心 TPoint * centerP; / 半徑 int R;/* 對父類虛方法的實現(xiàn) */ 在目標位圖上畫出圓 void draw(Graphics:TBitmap * argDest); / 在TTreeView中描述 void discript(int index, TTreeView * tree); / 返回描述用字符串 String discript(); / 判斷該圓是否與指定圖形相同 / 將指定圖形強制轉(zhuǎn)化為CCircle類型,比較其參數(shù)圓心坐標和半徑,/ 若小于指定閾值,則返回Ture,否則返回False。 bool similarW
32、ith(CShape * argShape); / 合并同一圓上的兩個圓弧 / 若目標圖形與該圖形屬同一圓,進行合并,返回True;/ 否則返回False。 void mergeWith(CShape * argShape); / 判斷是否選擇該圓進行編輯。 / 計算指定點(x, y)到圓心的距離,并與半徑比較,/ 如果小于指定閾值則返回True,否則False。 bool isClickOnShape(int x, int y); / 取得鼠標形狀。 / 圓上點時返回水平的雙向箭頭形狀表示改變半徑;/ 圓心時返回垂直的四個方向箭頭的形狀表示移動 TCursor getCursor(int x
33、, int y); / 更新圓 bool update(int x, int y);4. 圖形容器類(CShapes)4.1 描述圖形容器類是圖形類的集合類,由C+ Builder的TList繼承得到。用來組織對圖像的識別結(jié)果、組織當(dāng)前編輯工作的圖形對象集。提供添加圖形、刪除圖形、圖形編輯等接口。4.2 實現(xiàn)class CShapes : public TList public: /* 初始化 */ CShapes(); / 從TreeView得到Shapes CShapes(TTreeView * tree); /在目標位圖上畫出所有的圖形 void drawShapes(Graphics:
34、TBitmap * argDest); /描述圖形 void discript(TTreeView * tree);5. 點類(CPoint)5.1 描述點類對于與圖像上的前景點。由于識別時需要判斷是否為交點,在一般的點的基礎(chǔ)上增加是否為交點的屬性。由C+ Builder的TPoint繼承得到。5.2 實現(xiàn)class CPoint : public TPoint public: /* 初始化 */ CPoint() isCrossPoint = false; ; CPoint(int argx, int argy, bool isCross); CPoint(int argx, int arg
35、y, Graphics:TBitmap * argImg); /* 屬性:是否為交點 */ bool isCrossPoint;6. 單義域類(CSegment)6.1 描述在“基于單義域的圖形識別算法”中,單義域和多義域的唯一區(qū)別就是多義域不是單一的幾何元素,其在存儲結(jié)構(gòu)上是一樣的,在本系統(tǒng)中,都由CSegment類實現(xiàn),姑且命名為單義域類。單義域類為點的集合類,由C+ Builder的TList類繼承得到。提供添加點、刪除點、判斷該單義域是否有識別價值、識別該單義域等接口和方法。6.2 實現(xiàn)class CSegment : public TList public: /* 初始化 */ CS
36、egment(CPoint * p); /* 識別該單義域:實現(xiàn)算法中對單義域的識別部分 */ / 如果識別成功(得到圓或線段)返回True,否則返回False bool recognize(); /* 嘗試添加新的點到該單義域 */ / 判斷該點是否屬于該單義域并確定是在頭部還是在尾部,并將其插入到適當(dāng)位置;如果該點為交點,則將相應(yīng)的方向關(guān)閉增長;若加入成功返回True,否則返回False。 bool addNewPoint(); /* 判斷該單義域是否有識別價值 */ / 如果該單義域含有的點數(shù)太少,則沒有價值返回False,否則返回True。 bool checkValue(); /*
37、屬性:識別出的圖形 */ CShape * shape;7. 基于單義域識別類(CSegments)7.1 描述基于單義域識別類是實現(xiàn)“基于單義域的直線和圓識別算法”的主要類。它實現(xiàn)了對目標圖像的分割、對分割結(jié)果的顯示、對識別得到的多義域進行分割、對單義域識別結(jié)果的總體考慮,最終得到識別結(jié)果集。基于單義域識別類同時是單義域的集合類,由C+ Builder的TList類繼承得到。用來組織對圖像的單義域分割后的結(jié)果。7.2 實現(xiàn)class CSegments : public TList public: /* 構(gòu)造和析構(gòu)函數(shù) */ CSegments(); CSegments(); /* 掃描圖像
38、,得到多義域 */ / 從上往下,從左往右掃描圖像,對于每一個前景點 / 1。生成新的CPoint實例 / 2。對于本類中的所有單義域,將該點嘗試加入 / 3。如果加入失敗,以該點為頭生成新的單義域并加入。 void segmentize(Graphics:TBitmap * argSrc); /* 在指定的位圖上顯示分割得到的多義域、單義域 */ void displaySegments(Graphics:TBitmap * argDes); /* 識別該集合中的元素 */ / 1。調(diào)用單義域的checkValue(),如果得到False,刪除該單義域; / 2。調(diào)用單義域的recogniz
39、e(),如果返回False,對該單義域進行分割;/ 將新得到的2個單義域取代當(dāng)前的單義域,并進行識別/ 3。所有的單義域識別完畢后,對各個單義域的識別結(jié)果進行合并/ 4。返回得到的圖形容器類。 CShapes * recognize(); /* 刪除集合中的指定位置的元素 */ void removeItemOnly(int index); void removeItemAndFreePoints(int index);8. 霍夫變換識別直線類(CHTLine)8.1 描述實現(xiàn)霍夫變換識別直線算法。8.2 實現(xiàn)class CHTLine public: /* 構(gòu)造和析構(gòu)函數(shù) */ CHTLin
40、e (); CHTLine (); /* 對源位圖按照直線識別算法進行霍夫變換 */ / argRho, argTheta分別是對 r 和 q 的分割的份數(shù)。 void recognize(Graphics:TBitmap * argSource, int argRho, int argTheta); /* 在目標位圖上顯示參數(shù)坐標的信息 */ / 以參數(shù)坐標的最大值為灰度最大值,按比例灰度在位圖上顯示。 void displayPramater(Graphics:TBitmap * argDest); /* 按照argRate指定的概率取得識別出的直線列表 */ void getLines(
41、TList * argList, double argRate);9. 霍夫變換識別圓類(CHTCircle)9.1 描述實現(xiàn)霍夫變換識別圓算法。9.2 實現(xiàn)class CHTCircle public: /* 構(gòu)造和析構(gòu)函數(shù) */ CHTCircle (); CHTCircle (); /* 對源位圖按照圓的識別算法進行霍夫變換 */ void recognize(Graphics:TBitmap * argRes); /* 在目標位圖上顯示參數(shù)坐標的信息 */ / 以參數(shù)坐標的最大值為灰度最大值,按比例灰度在位圖上顯示參數(shù)坐標中指定半徑的二維平面的數(shù)據(jù)。 void displayPramater(Graphics:TBitmap * argDest, int argR); /* 按照argRate指定的概率取得識別出的直線列表 */ void getCircles(TList * argList, double argRat
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 元宇宙與增強現(xiàn)實(AR)跨平臺移動應(yīng)用開發(fā)技術(shù)探索-洞察闡釋
- 醫(yī)療大數(shù)據(jù)解鎖健康管理新紀元
- C++內(nèi)存管理策略-洞察闡釋
- 醫(yī)療數(shù)據(jù)泄露防范與安全管理研究-洞察闡釋
- 健康產(chǎn)業(yè)園區(qū)中醫(yī)療設(shè)施的規(guī)劃要點
- 2025-2030中國汽車維修及美容行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 醫(yī)療行業(yè)信息安全管理與技術(shù)創(chuàng)新探討
- 2025-2030中國染發(fā)用酶行業(yè)發(fā)展分析及發(fā)展前景與趨勢預(yù)測研究報告
- 華新工藝綠色化與技術(shù)創(chuàng)新研究-洞察闡釋
- 2025-2030中國接送機服務(wù)行業(yè)發(fā)展分析及投資風(fēng)險與戰(zhàn)略研究報告
- 江蘇省糧食集團招聘筆試題庫2024
- 2024年深圳市彩田學(xué)校初中部小升初入學(xué)分班考試數(shù)學(xué)模擬試卷附答案解析
- 2024年安徽安慶市交通控股集團有限公司招聘筆試沖刺題(帶答案解析)
- 《沙龍培訓(xùn)》課件
- 充電樁四方協(xié)議書范本
- 中考英語情景交際和看圖寫話
- 知道智慧網(wǎng)課《科學(xué)社會主義概論》章節(jié)測試答案
- 事故調(diào)查分析課件
- 《養(yǎng)老護理員》-課件:自然災(zāi)害的應(yīng)對處理知識
- 勞務(wù)外包服務(wù)方案(技術(shù)方案)
- JJG 443-2023燃油加油機(試行)
評論
0/150
提交評論