版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 第一章 概述…………………………………………………………4</p><p> 第(一)節(jié) 引言………………………………………………4</p><p> 犯得上法境………………………………6</p><p> 第(一)節(jié) 數(shù)字圖像處理技術(shù)…………………………………6</p><p> 1. 圖像全 處理的基
2、本內(nèi)A ………………………………………6</p><p> 2. 主要的圖像處理技術(shù) ………………………………………… 6</p><p> 第(二)節(jié) 圖像格式-BMP格式………………………… 7</p><p> 第三節(jié) 算法及數(shù)學(xué)基礎(chǔ)……………………………………………8</p><p> 1. 霍夫變換(Hough Tr
3、ansform)……………………………… 8</p><p> 2. 基于單義域的直線及圓識別算法……………………………11</p><p> 3. 主要技術(shù)………………………………………………………14</p><p> 第三章 直線和圓的識別和編輯的實現(xiàn)……………………………15</p><p> 第(一)節(jié) 系統(tǒng)的層次結(jié)構(gòu)
4、的圖示……………………………15</p><p> 第(二)節(jié) 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及類的設(shè)計…………………………16</p><p> 1. 主要類的層次結(jié)構(gòu)………………………………………………16</p><p> 2. 圖形基類(CShape)…………………………………………17</p><p> 3. 圖形類(CLine、CC
5、ircle)…………………………………18</p><p> 4. 圖形容器類(CShapes)………………………………………20</p><p> 5. 點類(CPoint)………………………………………………21</p><p> 6. 單義域類(CSegment)………………………………………21</p><p> 7.
6、 基于單義域識別類(CSegments)……………………………22</p><p> 8. 霍夫變換識別直線類(CHTLine)……………………………23</p><p> 9. 霍夫變換識別圓類(CHTCircle)…………………………… 23</p><p> 第(三)節(jié) 系統(tǒng)功能介紹……………………………………… 24</p><
7、;p> 第四章 總結(jié)及展望…………………………………………………29</p><p> 附錄1:參考文獻……………………………………………………30</p><p> 附錄2: 結(jié)束語……………………………………………………32</p><p><b> 概述</b></p><p><b>
8、 引言</b></p><p> 本論文實現(xiàn)的是基礎(chǔ)的圖形識別,bmp圖像文件格式中對圖形的矢量化。識別基本的圖元直線和圓。直線和圓是二值圖像中最基本的組成元素,也是最常見的圖形元素。在工程圖的數(shù)字化識別中有很大的應(yīng)用。</p><p> 關(guān)于理想情況的幾點說明:</p><p> 所識別的bmp圖像文件是經(jīng)過處理的,沒有“噪音”等,在本論文中直
9、接采用的是用Windows中的畫圖軟件畫出的圖像。</p><p> 本論文中圖像中的圖元都是單一的線性,即線寬是一個象素的情況。</p><p> 在工程圖的識別中常用的方法</p><p> 圖形的識別最主要的是圖形特征的提取,在這個階段,常用的方法是全局特征方法(包括:不變距,自回歸模型、傅立葉描述符、霍夫變換等),全局特征的特征提取方法是理論比較完善的
10、,計算過程比較清楚。針對不同的特征提取處理,采用相對應(yīng)的模式匹配方法來將圖形分類,模式識別迄今已有很多方法,有模板匹配、統(tǒng)計模式識別、句法模式識別、模糊識別和神經(jīng)網(wǎng)絡(luò)識別等。</p><p> 在二值圖像的處理中,人們常用的數(shù)據(jù)結(jié)果有游程編碼-考慮了掃描行上相鄰象素間的相關(guān)性;行相鄰圖法(Line Adjeceney Gragh),是由Pavlidis提出的一種二值圖的數(shù)據(jù)結(jié)構(gòu),LAG還考慮了相鄰行黑游程之間的
11、相鄰關(guān)系,遍歷時很方便;BAG(Bloek Adjeceney Gragh)是由余斌提出的,它是相鄰圖LAG在兩個方向上的推廣。在本論文中就是利用了LAG的數(shù)據(jù)結(jié)構(gòu)思想與c++ builder的數(shù)據(jù)結(jié)構(gòu)相結(jié)合的方法即:用下一個象素點是與鏈表頭相鄰還是和尾相鄰來描述其相鄰的關(guān)系。</p><p> 本論文中對交點的處理。目前對交點的處理有下面幾類算法:</p><p> 基于網(wǎng)格算法,該
12、算法是通過網(wǎng)格加大搜索步長來跳過交點。</p><p> 基于圖段合并的算法,是根據(jù)交點處行程段的連通性,以交點為界將圖線分割成圖段,記錄各段之間的連接及從屬關(guān)系,然后連接或延長各分支圖段,然后得到整條圖線。</p><p> 在本論文中采用了第二種方法,基于圖段合并的算法。</p><p> 當(dāng)然現(xiàn)下有很多更好的算法和數(shù)據(jù)結(jié)構(gòu),但是大部分是針對具體的結(jié)構(gòu)或者
13、研究方向不具有一般性,所以本論文的實現(xiàn)用了上述的數(shù)據(jù)結(jié)構(gòu)和方法。</p><p> 論文的工作基礎(chǔ)和工作環(huán)境</p><p><b> 數(shù)字圖像處理技術(shù)</b></p><p> 將客觀世界實體或圖片等通過不同的量化(數(shù)字化)手段送入計算機,由計算機按使用要求進行圖像的平滑、增強、復(fù)原、分割、重建、編碼、存儲、傳輸?shù)确N種不同的處理,需要時
14、把加工處理后的圖像重新輸出,這個過程稱為圖像處理。因此,圖像處理的含義是用計算機對圖像進行加工處理以得到某種預(yù)期的效果,它本質(zhì)上是一種二維數(shù)字信號處理技術(shù)。</p><p><b> 圖像處理的基本內(nèi)容</b></p><p> 圖像處理的基本內(nèi)容可以歸結(jié)為:</p><p> 對圖像進行增強或修改。</p><p&g
15、t; 以改變或強調(diào)圖像信息的某些特點(增強有用信息,無用信息),改善圖像的視覺質(zhì)量;</p><p> 描述圖像的特征并進行特征抽取和分析。</p><p> 例如提取圖像的紋理特征、頻譜特征、邊界特征和顏色特征等;對像素用某個標(biāo)準(zhǔn)衡量并進行分類比較,將抽取的特征歸結(jié)為一定的模式,這屬于模式識別的范圍;</p><p> 圖像的重建(Reconstructi
16、on)。</p><p> 對圖像的某些部分合并或進行重新組織,這種技術(shù)是從N—1維的信息用某種算法得到N維的圖像,例如計算機視覺就是這樣的一種技術(shù)。</p><p><b> 主要的圖像處理技術(shù)</b></p><p><b> 圖像的增強和恢復(fù)</b></p><p> 圖像增強所追求的
17、目標(biāo)是改善圖像的視覺質(zhì)量,符合人們的主觀要求,它不追究圖像客觀質(zhì)量的降低原因。圖像的視覺質(zhì)量是因人而異的,其質(zhì)量的高低和好壞受觀看者的心理、愛好和文化素質(zhì)等因素的影響。圖像的恢復(fù)則致力于探索圖像質(zhì)量降低的原因,并盡可能消除圖像質(zhì)量的降低,恢復(fù)圖像的本來面目。</p><p><b> 圖像的壓縮編碼</b></p><p> 彩色數(shù)字圖像通常是由三個二維數(shù)組組成的
18、,其信息量相當(dāng)大,這給圖像的傳輸、處理、存儲和顯示等帶來很大的負擔(dān)。但問題的另一方面是圖像中又往往存在很多冗余信息,在傳輸和存儲時可以對數(shù)字圖像進行一定方式的編碼,刪除圖像中的冗余信息,以提高圖像傳輸和存儲的效率。</p><p><b> 圖像重建</b></p><p> 在醫(yī)學(xué)和工程應(yīng)用中,利用超聲波、x射線等技術(shù)取得物體的多幅來自不同角度的投影圖,通過計算
19、可得到物缽內(nèi)部的圖像,這種技術(shù)稱為投影重建,例如CT就是圖像重建的一個應(yīng)用。</p><p><b> 圖像的分割和描述</b></p><p> 計算機按照一定的客觀測度(例如灰度、顏色和幾何性質(zhì)等)將圖像中包含的物體和區(qū)域從圖像中區(qū)分出來,稱為圖像的分割。用適當(dāng)?shù)臄?shù)學(xué)語言來表示被分割出來的物體或區(qū)域的結(jié)構(gòu)和統(tǒng)計特性,或用數(shù)學(xué)語言表示區(qū)域問的關(guān)系,稱為描述。圖像
20、經(jīng)分別和描述后,可較為容易地分類和識別。</p><p> 圖像格式-BMP格式</p><p> BMP(Bitmap-File)圖形文件是Windows采用的圖形文件格式,在Windows環(huán)境下運行的所有圖像處理軟件都支持BMP圖像文件格式。Windows系統(tǒng)內(nèi)部各圖像繪制操作都是以BMP為基礎(chǔ)的。Windows 3.0以前的BMP圖文件格式與顯示設(shè)備有關(guān),因此把這種BMP圖像文件
21、格式稱為設(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作擴展名)。</p>
22、<p><b> 文件結(jié)構(gòu)</b></p><p> 位圖文件可看成由4個部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表(color table)和定義位圖的字節(jié)陣列,它具有如下所示的形式。 </p><p><b> 算法及數(shù)學(xué)基礎(chǔ)</b>&
23、lt;/p><p> 霍夫變換(Hough Transform)</p><p> 霍夫變換是圖像處理中從圖像中識別幾何形狀的基本方法之一。其基本思想就是把圖像平面上的點對應(yīng)到參數(shù)平面上的曲線,最后通過統(tǒng)計特性來解決問題。自1962年Hough公布了該算法以來,由于其良好的抗噪聲性能和對部分遮蓋的不敏感等特性,霍夫變換在模式識別領(lǐng)域得到廣泛的應(yīng)用,如直線、圓、橢圓、矩形等幾何圖形檢測,任意
24、形狀區(qū)域的邊界提取,二維或三維運動的參數(shù)估計等。</p><p> 下面就于本論文相關(guān)的直線和圓的識別進行簡單的介紹。</p><p><b> 霍夫變換識別直線</b></p><p> 霍夫變換識別直線,是將圖像空間中的一點變換為參數(shù)空間中的一條直線。圖像空間中同一直線上的點,經(jīng)霍夫變換所形成的直線相交于參數(shù)空間中的一點,該點坐標(biāo)代表
25、圖像空間中直線的斜率及截距。利用累加數(shù)組累計參數(shù)空間中通過該點的直線條數(shù),即代表圖像空間中直線上的點數(shù)。</p><p> 圖1.1 霍夫變換識別直線(1)</p><p> 設(shè)已知一黑白圖像上畫了一條直線,要求出這條直線所在的位置。我們知道,直線的方程可以用來表示,其中k和b是參數(shù),分別是斜率和截距。過某一點的所有直線的參數(shù)都會滿足方程。即圖像空間中的一點確定了參數(shù)空間中的一族直線。
26、方程在參數(shù)k--b平面上是一條直線。這樣,圖像x--y平面上的一個前景像素點就對應(yīng)到參數(shù)平面上的一條直線。</p><p> 霍夫變換識別直線的算法描述如下:</p><p> Step1. 初始化一塊緩沖區(qū),對應(yīng)于參數(shù)平面,將其所有數(shù)據(jù)置為0。</p><p> Step2. 對于圖像上每一前景點,求出參數(shù)平面對應(yīng)的直線,把這直線上的所有點的值都加1。<
27、;/p><p> Step3. 找到參數(shù)平面上峰值點的位置,這些位置的坐標(biāo)就是原圖像上直線的參數(shù),每個位置對應(yīng)于原圖像上的一條直線。</p><p> 上面是霍夫變換識別直線的基本思想。在實際應(yīng)用中,形式的直線方程沒有辦法表示x=c形式的直線(這時候,直線的斜率為無窮大)。所以實際應(yīng)用中,是采用參數(shù)方程:</p><p> 這樣,圖像平面(x, y)空間上的一個點
28、就對應(yīng)到參數(shù)空間中的一條正弦曲線上。在變換后的空間中這條正弦曲線上的任意一點對應(yīng)于原始圖像平面(x, y)空間的一條直線,這條直線必通過這個點,而(x, y)空間中所有共線的點經(jīng)過變換后所對應(yīng)的各正弦曲線都相交于一點。</p><p> 圖1.2 霍夫變換識別直線(2)</p><p><b> 霍夫變換識別圓</b></p><p>
29、1) 半徑已知的圓的識別</p><p> 利用霍夫變換檢測出半徑已知的圓形,是將圖像平面上的每一點對應(yīng)到參數(shù)平面上的一個以已知半徑為半徑的圓。經(jīng)過霍夫變換,在參數(shù)平面上得到圓相交于一點,這個點的坐標(biāo)即為原圖形坐標(biāo)平面上待識別的圓心坐標(biāo)。</p><p> 算法可以簡單描述為:取和圖像平面一樣的參數(shù)平面,以圖像上每一個前景點為圓心,以已知的半徑在參數(shù)平面上畫圓,并把結(jié)果進行累加。最后找
30、出參數(shù)平面上的峰值點,這個位置就對應(yīng)了圖像上的圓心。</p><p> 2) 未知半徑的圓的識別</p><p> 在第一個問題基礎(chǔ)上,把參數(shù)平面擴大稱為三維空間,即x--y--R三維,對應(yīng)圓的圓心和半徑。圖像平面上的每一點就對應(yīng)于參數(shù)空間中每個半徑下的一個圓,在參數(shù)的三維空間中得到一個圓錐。最后找出參數(shù)空間中的峰值點,即得到待識別的圓的圓心和半徑。</p><p&
31、gt; 由于霍夫變換具有良好的抗噪聲性能和對部分遮蓋的不敏感等特性,又不受圖像旋轉(zhuǎn)的影響,在很多領(lǐng)域都有廣泛的應(yīng)用,有關(guān)霍夫變換的研究和改進也很多。例如廣義霍夫變換、隨機霍夫變換、快速霍夫變換等等,就是針對直線的霍夫變換也有很多改進算法。由于時間的原因,在本軟件中,只是使用了標(biāo)準(zhǔn)的霍夫變換算法。</p><p> 基于單義域的直線及圓識別算法</p><p> 霍夫變換為幾何圖形的識
32、別的一個重要算法,但是由于該標(biāo)準(zhǔn)算法的時間復(fù)雜度和空間復(fù)雜度都是,其中m是參數(shù)坐標(biāo)的維數(shù),雖然有不少針對具體問題(例如直線識別)的改進算法,其在實際使用中也存在計算量大的問題。針對本論文的工作的實際情況,參考文獻【1】,并進行了適當(dāng)?shù)暮喕?,完成了論文的識別部分。下面就對這個基于單義域的識別算法進行簡單的介紹。</p><p><b> 多義域的獲得</b></p><p
33、> 單義域是指對待識別的圖形進行分割得到的具有單一的幾何意義(線段或圓?。c的集合。對圖片進行從上往下、從左往右的掃描,根據(jù)交點進行分割得到多義域,多義域中的點構(gòu)成一個連通區(qū)域。對多義域進行識別并分割得到單義域。</p><p><b> 多義域由鏈表實現(xiàn)。</b></p><p><b> 算法描述如下:</b></p>
34、<p> 對圖形進行從上往下、從左往右的掃描;</p><p> 對每一個前景點,判斷其是否為交點;</p><p> 將該點與現(xiàn)有的多義域的頭(如果其頭節(jié)點不是交點)、尾(如果其尾節(jié)點不是交點)節(jié)點進行比較,如果與頭節(jié)點相鄰,將其插入到該多義域的頭節(jié)點之前;如果與尾節(jié)點相鄰,將其插入到該多義域的尾節(jié)點之后。</p><p> 如果該前景點不屬
35、于任何現(xiàn)有多義域,則以該點為頭節(jié)點生成新的多義域。</p><p><b> 直到圖形掃描完畢。</b></p><p><b> 注:交點的判斷。</b></p><p> 由此得到的多義域?qū)⑹且粋€線段、一個圓弧或者線段和圓弧的組合。在后續(xù)的識別過程中將把不是單義域的進行分裂。</p><p&g
36、t; 最小二乘法擬合直線和圓</p><p> 最小二乘法首先由Karl Gauss為進行行星軌道預(yù)測的研究而提出的。現(xiàn)在最小二乘法已經(jīng)變成從實驗數(shù)據(jù)來進行參數(shù)估計的主要手段。由最小二乘法獲得的估計在一定條件下有最佳的統(tǒng)計特性:一致、無偏、有效。它提供給我們一個數(shù)學(xué)程式,通過它能獲得一個在最小方差意義上與實驗數(shù)據(jù)最好擬合助模型。</p><p> 運用最小二乘法進行圓的擬合公式如下:
37、</p><p> 其中,為樣點,為所求圓心,為半徑,為平均徑向誤差, 為最大徑向誤差。</p><p> 多義域分裂和單義域的識別</p><p> 對2.1中得到的多義域,運用最小二乘法進行擬合,對于擬合不成功的多義域運用首尾相連最大距離法進行分裂,得到單義域,并記錄下各單義域的擬合結(jié)果,供全局考慮,識別直線和圓用。</p><p>
38、;<b> 算法描述如下:</b></p><p> 從2.1得到的多義域列表里取第一個多義域;</p><p> 對選中的多義域運用最小二乘法進行圓的擬合;如果得到的平均徑向誤差和最大徑向誤差小于指定閾值,則認為擬合成功,該多義域為一圓弧的單義域;記錄擬合的結(jié)果,作為總體識別的種子圓,轉(zhuǎn)向5執(zhí)行,否則執(zhí)行3。</p><p> 對選中
39、的多義域運用最小二乘法進行直線擬合;如果得到的平均距離誤差和最大距離誤差小于指定閾值,則認為擬合成功,該多義域為一線段的單義域;記錄擬合結(jié)果,作為總體識別的種子直線,轉(zhuǎn)向5執(zhí)行,否則執(zhí)行4。</p><p> 該多義域為多個線段或圓弧的組合。將該多義域的頭尾節(jié)點連接,計算該多義域中各點與頭尾節(jié)點連線的距離,取距離最大的點,對該多義域進行分裂,得到兩個新的多義域,取代原先的多義域;轉(zhuǎn)向2執(zhí)行。</p>
40、<p> 取多義域列表中的下一個,轉(zhuǎn)向2執(zhí)行。</p><p> 由此,所有的多義域都分裂為單義域,并對各單義域進行了擬合。</p><p> 總體整合,識別直線和圓</p><p> 對2.3得到的單義域列表進行總體的整合,得到直線和圓。</p><p> 選取單義域列表中的第一個單義域,將其擬合的圖形(直線或圓)作
41、為種子圖形;</p><p> 將列表中其他單義域的識別結(jié)果與種子圖形進行比較,如果誤差小于指定閾值,則屬于同一直線或同一圓,將其與選定單一域進行合并,從列表中刪除該單義域;</p><p> 計算選定單義域的幾何數(shù)據(jù),得到圖形;</p><p> 選取列表中的下一個單義域,轉(zhuǎn)動2執(zhí)行。</p><p><b> 主要技術(shù)&
42、lt;/b></p><p> Borland C++ Builder</p><p> 本論文的編程環(huán)境之所以選用c++ builder 是因為他有以下的優(yōu)點:</p><p> ⑴.輸出入接口設(shè)計簡單</p><p> ?、疲峁┮涣鞯拈_發(fā)環(huán)境</p><p> ?、牵峁┳顦?biāo)準(zhǔn)的C/C++魯開發(fā)工具&
43、lt;/p><p> ⑷.提供豐富的組件與最強勁的調(diào)試工具VCL類庫中封裝了Windows的圖形設(shè)備接口(GDI),使得用戶很方便地在應(yīng)用程序添加圖像或處理圖像。</p><p> 圖像類主要有Tbitmap、TBrush、TCanves、TFont、TgraphakControl、Tgraphic、Ticon、TJPEGImage、TPen和Tpictur以Tmatifile類。<
44、/p><p><b> 虛類及虛方法的使用</b></p><p> 虛類和虛方法的使用在本論文中主要是Cshapes基類及虛方法的實現(xiàn)。</p><p> 直線和圓的識別和編輯的實現(xiàn)</p><p> 系統(tǒng)的層次結(jié)構(gòu)的圖示</p><p> 系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及類的設(shè)計</p>&
45、lt;p><b> 主要類的層次結(jié)構(gòu)</b></p><p><b> 圖形處理類:</b></p><p><b> 識別用類:</b></p><p> 圖形基類(CShape)</p><p><b> 描述</b></p>
46、;<p> 圖形基類,提供所有圖形的標(biāo)準(zhǔn)屬性和方法。其他圖形類(直線、圓)等都是該類的子類,繼承其所有的public屬性和方法,對其中的虛方法(virtual)進行重定義和實現(xiàn)。</p><p> 該類為虛類,其成員函數(shù)主要為虛函數(shù),為其所有子類提供統(tǒng)一的接口,但是沒有實現(xiàn)。其他模塊對圖形進行操作時,除非生成新的實例(Instance),都無須知道所操作的是哪個具體的圖形,而統(tǒng)一使用Cshape
47、類型,為程序的實現(xiàn)、擴充和維護提供很大方便。</p><p><b> 實現(xiàn)</b></p><p> class CShape {</p><p><b> public:</b></p><p> /* 屬性定義 */</p><p> //前景色(由于時間等的
48、限制,本系統(tǒng)暫時只定義該圖形的屬性,其</p><p> // 他如:填充色,線條型,填充型等可擴充)</p><p> TColor color;</p><p> /* 編輯用屬性 */</p><p> //編輯時標(biāo)志該圖形是否被選擇</p><p> bool isSelected;&l
49、t;/p><p> //編輯操作所選中的點</p><p> TPoint * editP</p><p> /* 識別用屬性 */</p><p> // 識別的效果描述,值越小說明識別效果越好</p><p> // 最小二乘法的平均誤差;</p><p> // 霍
50、夫變換:1 - 參數(shù)空間中該圖形的值/最大值</p><p> double chance;</p><p><b> //圖形上點的數(shù)量</b></p><p> int pointCount;</p><p> /* 成員函數(shù)定義 */</p><p> /* 顯示和描述用方法 */
51、</p><p> // 顯示圖形:在指定的位圖上顯示圖形 </p><p> virtual void draw(Graphics::TBitmap * argDest);</p><p> // 描述圖形:作為TtreeView的節(jié)點(主窗體使用)</p><p> virtual void discript(int index,
52、 TTreeView * tree);</p><p> // 描述圖形:返回描述圖形的字符串</p><p> virtual String discript();</p><p><b> /* 識別用 */</b></p><p> // 比較兩個圖形,如果是同一個圖形,返回True,否則False。<
53、;/p><p> // 直線上的兩個線段;圓上面的兩個圓弧</p><p> virtual bool similarWith(CShape * argShape);</p><p><b> // 合并兩個圖形</b></p><p> // 經(jīng)過判斷為相同的圖形進行合并,返回True;否則返回Fa
54、lse。</p><p> virtual bool mergeWith(CShape * argShape);</p><p> // 判斷圖形存在的可能性(利用具體圖形的幾何規(guī)則)</p><p> virtual bool checkPossible();</p><p><b> /* 編輯用 */</b>
55、;</p><p> // 判斷是否點擊該圖形,若選中則當(dāng)前編輯的圖形改為當(dāng)前圖形</p><p> virtual bool isClickOnShape(int x, int y);</p><p> // 取得鼠標(biāo)形狀:鼠標(biāo)移動到選中圖形的可操作點上時,顯示為編輯形狀</p><p> virtual TCursor getCu
56、rsor(int x, int y);</p><p> // 更新圖形:將編輯點移動到(x, y)點。更新成功返回True,否則False。</p><p> virtual bool update(int x, int y);</p><p><b> };</b></p><p> 圖形類(CLine、CC
57、ircle)</p><p><b> 描述</b></p><p> 圖形類是幾何圖形的具體實現(xiàn),實現(xiàn)對應(yīng)幾何圖形的描述和相關(guān)操作。圖形類有共同的父類CShape,對父類中定義的虛方法根據(jù)本幾何圖形的特征進行實現(xiàn)。</p><p> 根據(jù)要求,本系統(tǒng)中實現(xiàn)了直線(CLine)和圓(CCircle)兩個圖形類。其他簡單的幾何圖形如橢圓、矩
58、形等也可以類似的方法實現(xiàn),作為本系統(tǒng)的一個擴充。</p><p> 本系統(tǒng)中,直線類采用直觀的的形式來描述直線(既避免點斜式不能描述豎直直線,也避免極坐標(biāo)方程轉(zhuǎn)換的問題)。因為成比例的兩組和表示同一條直線,所以規(guī)定,如果B參數(shù)不為0,則,否則A必定不為0,則。由于要識別圖像中的線段,所以增加兩個端點進行限制。</p><p> 直線類有三個點可以編輯:1)兩個端點,選中一個端點并移動,
59、是以另一端點為軸進行旋轉(zhuǎn);2)線段的中點,選中中點并移動,是平移整個直線。</p><p> 圓類采用的形式描述(其中為圓心,R為半徑),直觀方便。圓上有兩個點支持編輯操作:1)圓心,選中圓心并移動,是平移整個圓;2)圓上的一個點,選中該點并移動,是改變圓的半徑,圓心不變。</p><p><b> 實現(xiàn)</b></p><p> 直線類
60、(CLine)</p><p> class CLine: public CShape {</p><p><b> public:</b></p><p><b> /* 初始化 */</b></p><p> CLine(double argA, double argB, double
61、argC);</p><p> /* 直線的屬性 */</p><p> // 線段的兩個端點</p><p> TPoint *startP, *endP;</p><p> // 直線方程的參數(shù):A,B,C</p><p> double A, B, C;</p><p> /*
62、 對父類虛方法的實現(xiàn) */</p><p> // 在目標(biāo)位圖上畫出直線(本系統(tǒng)中的實現(xiàn)為畫線段)</p><p> void draw(Graphics::TBitmap * argDest);</p><p> // 在TTreeView中描述</p><p> void discript(int index, TTreeView
63、 * tree);</p><p> // 返回描述用字符串</p><p> String discript();</p><p> // 判斷該直線是否與指定圖形相同</p><p> // 將指定圖形強制轉(zhuǎn)化為CLine類型,比較其參數(shù)A, B, C,</p><p> // 若小
64、于指定閾值,則返回Ture,否則返回False。</p><p> bool similarWith(CShape * argShape);</p><p> // 合并同一直線上的兩個線段</p><p> // 若目標(biāo)圖形與該圖形屬同一直線,進行合并,返回True;</p><p> // 否則返回False。&l
65、t;/p><p> void mergeWith(CShape * argShape);</p><p> // 判斷是否選擇該直線進行編輯。</p><p> // 判斷指定點(x, y)到該直線的距離,</p><p> // 如果小于指定閾值則返回True,否則False。</p><p>
66、 bool isClickOnShape(int x, int y);</p><p> // 取得鼠標(biāo)形狀。</p><p> // 端點時返回45度,135度的雙向箭頭形狀表示旋轉(zhuǎn);</p><p> // 中點時返回垂直的四個方向箭頭的形狀表示移動</p><p> TCursor getCursor(int x
67、, int y);</p><p><b> // 更新直線</b></p><p> bool update(int x, int y);</p><p><b> };</b></p><p> 圓類(CCircle)</p><p> class CCircl
68、e: public CShape {</p><p><b> public:</b></p><p><b> /* 初始化 */</b></p><p> CCircle(int argX, int argY, int argR);</p><p> /* 圓的屬性 */</p&g
69、t;<p><b> // 圓心</b></p><p> TPoint * centerP;</p><p><b> // 半徑</b></p><p><b> int R;</b></p><p> /* 對父類虛方法的實現(xiàn) */</p&g
70、t;<p> // 在目標(biāo)位圖上畫出圓</p><p> void draw(Graphics::TBitmap * argDest);</p><p> // 在TTreeView中描述</p><p> void discript(int index, TTreeView * tree);</p><p> //
71、返回描述用字符串</p><p> String discript();</p><p> // 判斷該圓是否與指定圖形相同</p><p> // 將指定圖形強制轉(zhuǎn)化為CCircle類型,比較其參數(shù)圓心坐標(biāo)和半徑,</p><p> // 若小于指定閾值,則返回Ture,否則返回False。</p>
72、<p> bool similarWith(CShape * argShape);</p><p> // 合并同一圓上的兩個圓弧</p><p> // 若目標(biāo)圖形與該圖形屬同一圓,進行合并,返回True;</p><p> // 否則返回False。</p><p> void mergeWith(
73、CShape * argShape);</p><p> // 判斷是否選擇該圓進行編輯。</p><p> // 計算指定點(x, y)到圓心的距離,并與半徑比較,</p><p> // 如果小于指定閾值則返回True,否則False。</p><p> bool isClickOnShape(int x, int
74、 y);</p><p> // 取得鼠標(biāo)形狀。</p><p> // 圓上點時返回水平的雙向箭頭形狀表示改變半徑;</p><p> // 圓心時返回垂直的四個方向箭頭的形狀表示移動</p><p> TCursor getCursor(int x, int y);</p><p><
75、b> // 更新圓</b></p><p> bool update(int x, int y);</p><p><b> };</b></p><p> 圖形容器類(CShapes)</p><p><b> 描述</b></p><p>
76、圖形容器類是圖形類的集合類,由C++ Builder的TList繼承得到。用來組織對圖像的識別結(jié)果、組織當(dāng)前編輯工作的圖形對象集。提供添加圖形、刪除圖形、圖形編輯等接口。</p><p><b> 實現(xiàn)</b></p><p> class CShapes : public TList {</p><p><b> public
77、:</b></p><p><b> /* 初始化 */</b></p><p> CShapes();</p><p> // 從TreeView得到Shapes</p><p> CShapes(TTreeView * tree);</p><p> //在目標(biāo)位圖上畫出
78、所有的圖形</p><p> void drawShapes(Graphics::TBitmap * argDest);</p><p><b> //描述圖形</b></p><p> void discript(TTreeView * tree);</p><p><b> };</b>
79、</p><p> 點類(CPoint)</p><p><b> 描述</b></p><p> 點類對于與圖像上的前景點。由于識別時需要判斷是否為交點,在一般的點的基礎(chǔ)上增加是否為交點的屬性。由C++ Builder的TPoint繼承得到。</p><p><b> 實現(xiàn)</b><
80、/p><p> class CPoint : public TPoint {</p><p><b> public:</b></p><p><b> /* 初始化 */</b></p><p> CPoint() {isCrossPoint = false; };</p>&l
81、t;p> CPoint(int argx, int argy, bool isCross);</p><p> CPoint(int argx, int argy, Graphics::TBitmap * argImg);</p><p> /* 屬性:是否為交點 */</p><p> bool isCrossPoint;</p>&l
82、t;p><b> };</b></p><p> 單義域類(CSegment)</p><p><b> 描述</b></p><p> 在“基于單義域的圖形識別算法”中,單義域和多義域的唯一區(qū)別就是多義域不是單一的幾何元素,其在存儲結(jié)構(gòu)上是一樣的,在本系統(tǒng)中,都由CSegment類實現(xiàn),姑且命名為單義域類。
83、</p><p> 單義域類為點的集合類,由C++ Builder的TList類繼承得到。提供添加點、刪除點、判斷該單義域是否有識別價值、識別該單義域等接口和方法。</p><p><b> 實現(xiàn)</b></p><p> class CSegment : public TList {</p><p><b&
84、gt; public:</b></p><p><b> /* 初始化 */</b></p><p> CSegment(CPoint * p);</p><p> /* 識別該單義域:實現(xiàn)算法中對單義域的識別部分 */</p><p> // 如果識別成功(得到圓或線段)返回True,否則返回F
85、alse</p><p> bool recognize();</p><p> /* 嘗試添加新的點到該單義域 */</p><p> // 判斷該點是否屬于該單義域并確定是在頭部還是在尾部,并將其插入到適當(dāng)位置;如果該點為交點,則將相應(yīng)的方向關(guān)閉增長;若加入成功返回True,否則返回False。</p><p> bool ad
86、dNewPoint();</p><p> /* 判斷該單義域是否有識別價值 */</p><p> // 如果該單義域含有的點數(shù)太少,則沒有價值返回False,否則返回True。</p><p> bool checkValue();</p><p> /* 屬性:識別出的圖形 */</p><p> CS
87、hape * shape;</p><p><b> };</b></p><p> 基于單義域識別類(CSegments)</p><p><b> 描述</b></p><p> 基于單義域識別類是實現(xiàn)“基于單義域的直線和圓識別算法”的主要類。它實現(xiàn)了對目標(biāo)圖像的分割、對分割結(jié)果的顯示、
88、對識別得到的多義域進行分割、對單義域識別結(jié)果的總體考慮,最終得到識別結(jié)果集。</p><p> 基于單義域識別類同時是單義域的集合類,由C++ Builder的TList類繼承得到。用來組織對圖像的單義域分割后的結(jié)果。。</p><p><b> 實現(xiàn)</b></p><p> class CSegments : public TList
89、 {</p><p><b> public:</b></p><p> /* 構(gòu)造和析構(gòu)函數(shù) */</p><p> CSegments();</p><p> ~CSegments();</p><p> /* 掃描圖像,得到多義域 */</p><p>
90、// 從上往下,從左往右掃描圖像,對于每一個前景點</p><p> // 1。生成新的CPoint實例</p><p> // 2。對于本類中的所有單義域,將該點嘗試加入</p><p> // 3。如果加入失敗,以該點為頭生成新的單義域并加入。</p><p> void segmentize(Graphi
91、cs::TBitmap * argSrc);</p><p> /* 在指定的位圖上顯示分割得到的多義域、單義域 */</p><p> void displaySegments(Graphics::TBitmap * argDes);</p><p> /* 識別該集合中的元素 */</p><p> // 1。調(diào)用單義域的che
92、ckValue(),如果得到False,刪除該單義域;</p><p> // 2。調(diào)用單義域的recognize(),如果返回False,對該單義域進行分割;</p><p> // 將新得到的2個單義域取代當(dāng)前的單義域,并進行識別</p><p> // 3。所有的單義域識別完畢后,對各個單義域的識別結(jié)果進行合并</p><
93、p> // 4。返回得到的圖形容器類。</p><p> CShapes * recognize();</p><p> /* 刪除集合中的指定位置的元素 */</p><p> void removeItemOnly(int index);</p><p> void removeItemAndFreePoints(int
94、 index);</p><p><b> };</b></p><p> 霍夫變換識別直線類(CHTLine)</p><p><b> 描述</b></p><p> 實現(xiàn)霍夫變換識別直線算法。</p><p><b> 實現(xiàn)</b><
95、;/p><p> class CHTLine {</p><p><b> public:</b></p><p> /* 構(gòu)造和析構(gòu)函數(shù) */</p><p> CHTLine ();</p><p> ~ CHTLine ();</p><p> /* 對源位圖
96、按照直線識別算法進行霍夫變換 */</p><p> // argRho, argTheta分別是對 ? 和 ? 的分割的份數(shù)。</p><p> void recognize(Graphics::TBitmap * argSource, int argRho, int argTheta);</p><p> /* 在目標(biāo)位圖上顯示參數(shù)坐標(biāo)的信息 */<
97、;/p><p> // 以參數(shù)坐標(biāo)的最大值為灰度最大值,按比例灰度在位圖上顯示。</p><p> void displayPramater(Graphics::TBitmap * argDest);</p><p> /* 按照argRate指定的概率取得識別出的直線列表 */</p><p> void getLines(TList
98、 * argList, double argRate);</p><p><b> };</b></p><p> 霍夫變換識別圓類(CHTCircle)</p><p><b> 描述</b></p><p> 實現(xiàn)霍夫變換識別圓算法。</p><p><b&
99、gt; 實現(xiàn)</b></p><p> class CHTCircle {</p><p><b> public:</b></p><p> /* 構(gòu)造和析構(gòu)函數(shù) */</p><p> CHTCircle ();</p><p> ~ CHTCircle ();<
100、/p><p> /* 對源位圖按照圓的識別算法進行霍夫變換 */</p><p> void recognize(Graphics::TBitmap * argRes);</p><p> /* 在目標(biāo)位圖上顯示參數(shù)坐標(biāo)的信息 */</p><p> // 以參數(shù)坐標(biāo)的最大值為灰度最大值,按比例灰度在位圖上顯示參數(shù)坐標(biāo)中指定半徑的二維平
101、面的數(shù)據(jù)。</p><p> void displayPramater(Graphics::TBitmap * argDest, int argR);</p><p> /* 按照argRate指定的概率取得識別出的直線列表 */</p><p> void getCircles(TList * argList, double argRate);</p&
102、gt;<p><b> };</b></p><p><b> 系統(tǒng)功能介紹</b></p><p><b> 1.識別部分</b></p><p> (1).基于霍夫變換下的識別</p><p> 啟動recognize.exe</p>
103、<p> File->open 打開要識別的bmp文件</p><p> Hough Trans->ling recognize得到識別出的直線的霍夫變換圖,圖中的每個亮點代表一條直線;</p><p> 識別的圓的概率圓,在下面的Edit控件中是你想要顯示的圓的直徑,輸入后點display后就可以看到霍夫變換的結(jié)果</p><p>
104、注:由于霍夫變換是一個三維的循環(huán),消耗內(nèi)存較多,速度較慢,所以圖像的原圖的大小直接影響到速度。</p><p> 下面是幾幅圖象的實驗結(jié)果:</p><p> 圖3.1 只含有直線的bpm文件</p><p> 圖3.2 圖4.1的Hough Trans->line recognize的結(jié)果</p><p><b>
105、再如另一個例子:</b></p><p><b> 圖3.3 </b></p><p> 圖3.4 對上圖顯示直徑為30 圖3.5 對上圖顯示直徑為60</p><p> (2). 基于分區(qū)-聯(lián)合下的識別</p><p><b> 1、2步如上</b></p
106、><p> 3,Segment->step1:Segmentize將整幅圖像分區(qū)的結(jié)果</p><p> 4,Segment->step2:Segment recognize識別分區(qū)后的各個部分</p><p> 5,Segment->step3:recognize shape 對step2的結(jié)果進行整體識別,得到我們想要的結(jié)果</p>
107、;<p> 6,Segment->step1-3:Segment recognize 如果不想看實現(xiàn)的過程只想得到結(jié)果時執(zhí)行此操作</p><p> 下面用幾個例子來說明</p><p><b> 圖3.1的識別過程</b></p><p> 圖3.6 圖3.1的Segment結(jié)果(第一步)</p>
108、<p> 圖3.7 圖3.1的Segment recognize結(jié)果(第二步)</p><p> 圖3.8 對上圖recognize shape的結(jié)果</p><p> 圖3.8也是step1-3的結(jié)果。在form右邊的Edit Box中是識別出的圖元的相關(guān)信息:</p><p> 直線時的A,B,C分別是方程Ax+By+C=0中的系數(shù);<
109、;/p><p> 圓的時候,X,Y是圓心的坐標(biāo),R是圓的半徑。</p><p> 再如圖3.3的識別過程:</p><p> 圖3.9 step1的執(zhí)行結(jié)果</p><p> 圖3.10 step2的識別結(jié)果 圖3.11 step3的識別結(jié)果</p><p><b>
110、 圖3.12</b></p><p> 其中最下面的line:0,Circle:1,Circle:2,…,Circle:4就是識別出的直線和圓的相關(guān)信息。</p><p> Line:0中的P1,P2是指直線的兩個端點坐標(biāo)、chance和count是對點的總體統(tǒng)計參數(shù)</p><p> Circle:1中的Center、r分別是圓的圓心和半徑坐標(biāo)。
111、</p><p><b> 總結(jié)及展望</b></p><p> 計算機技術(shù)的發(fā)展,使人類社會進入了信息化和自動化,計算機智能識別也隨著計算機的發(fā)展得到了迅速的發(fā)展。特別是圖形圖像的計算機處理技術(shù)更是有了前所未有的進步和應(yīng)用。計算機識別也逐漸的從圖形圖像處理的大環(huán)境下分離出來作為一門新的高科技研究領(lǐng)域出現(xiàn)。圖形圖像的識別涉及到的學(xué)科很多,包括數(shù)字信號處理、工程數(shù)學(xué)
112、、信息論、運籌學(xué)、等,它與計算機、自動化、生物學(xué)、關(guān)學(xué)、視覺心里和生理學(xué)、人工智能、智能信息處理等眾多領(lǐng)域交叉、綜合集成,有廣泛的應(yīng)用。</p><p> 實現(xiàn)的是基礎(chǔ)的圖形識別,bmp圖像文件格式中對圖形的矢量化。識別基本的圖元直線和圓。直線和圓是二值圖像中最基本的組成元素,也是最常見的圖形元素。在工程圖的數(shù)字化識別中有很大的應(yīng)用。</p><p><b> 附錄1:參考文
113、獻</b></p><p> ·[1] 張習(xí)文、歐宗瑛.基于單義域鄰接圖的圓弧與圓識別[M].中國圖像圖形學(xué)報 2000版</p><p> ·[2]王耀南、李書濤、毛建旭.計算機圖像處理與識別技術(shù)[M].高等教育出版社.2005年版.</p><p> ·[3]阮球琦.數(shù)字圖像處理學(xué)[M].電子工業(yè)出版社. 2007
114、年版.</p><p> ·[4]夏德深、傅德勝.現(xiàn)代圖像處理與應(yīng)用[M].東南大學(xué)出版社. 2001年版.</p><p> ·[5] 孫增圻. 計算機控制理論與應(yīng)用系統(tǒng)辨識-最小二乘原理[M]. 清華大學(xué)出版社.2008版</p><p> ·[6]朱時銀.c++ builder 編程實例與技巧[M].機械工業(yè)出版社. 200
115、1年版.</p><p><b> 附錄2:結(jié)束語</b></p><p> 在當(dāng)今高科技發(fā)展的環(huán)境下,圖像處理的需求和應(yīng)用愈來愈廣泛,技術(shù)亦愈來愈高,本人通過本論文的編寫及實現(xiàn)過程對圖像處理和模式識別有了很多的理解和更深刻的認識。</p><p> 綜上所述,本系統(tǒng)達到了預(yù)期的目標(biāo),并具有很大的擴展性。經(jīng)過必要的完善和補充,將可以成為一
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- [vc++畢設(shè)]vc++簡單幾何圖形的識別和編輯系統(tǒng)+論文
- 計算機畢業(yè)設(shè)計69delphi圖形識別和編輯
- 計算機畢業(yè)設(shè)計69delphi圖形識別和編輯
- 計算機畢業(yè)設(shè)計69Delphi圖形識別和編輯.doc
- 計算機畢業(yè)設(shè)計69Delphi圖形識別和編輯.doc
- 畢業(yè)論文計算機圖形學(xué)——opengl
- 計算機信管畢業(yè)論文-計算機基礎(chǔ)網(wǎng)絡(luò)答疑系統(tǒng)
- 計算機應(yīng)用畢業(yè)論文
- 計算機應(yīng)用畢業(yè)論文
- 計算機應(yīng)用專業(yè)的畢業(yè)論文
- 計算機畢業(yè)論文范文畢業(yè)論文計算機專業(yè)
- 手繪幾何圖形的識別研究.pdf
- 關(guān)于計算機應(yīng)用基礎(chǔ)的論文計算機應(yīng)用基礎(chǔ)論文淺析技工院校計算機應(yīng)用基礎(chǔ)課程教學(xué)
- 計算機基礎(chǔ)-職業(yè)學(xué)院畢業(yè)論文
- 計算機畢業(yè)論文
- 計算機畢業(yè)論文
- 計算機應(yīng)用軟件畢業(yè)論文
- 畢業(yè)論文——計算機建模和仿真
- 幾何圖形
- 計算機應(yīng)用畢業(yè)論文--計算機組裝與維護
評論
0/150
提交評論