大學(xué)設(shè)計(jì)計(jì)算機(jī)應(yīng)用基礎(chǔ)_第1頁(yè)
大學(xué)設(shè)計(jì)計(jì)算機(jī)應(yīng)用基礎(chǔ)_第2頁(yè)
大學(xué)設(shè)計(jì)計(jì)算機(jī)應(yīng)用基礎(chǔ)_第3頁(yè)
大學(xué)設(shè)計(jì)計(jì)算機(jī)應(yīng)用基礎(chǔ)_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余27頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、44661.62.6BMP781. Hough Transform82.113.141515161.162.CShape173.CLine CCircle184.CShapes205.CPoint216.CSegment217. CSegments228. CHTLine239. CHTCircle23 2429130232第一章概述第一節(jié)引言本論文實(shí)現(xiàn)地是基礎(chǔ)地圖形識(shí)別,bmp 圖像文件格式中對(duì)圖形地矢量化.識(shí)別基本地圖元直線和圓 .直線和圓是二值圖像中最基本地組成元素 ,也是最常見(jiàn)地圖形元素 .在工程圖地?cái)?shù)字化識(shí)別中有很大地應(yīng)用 .關(guān)于理想情況地幾點(diǎn)說(shuō)明:1. 所識(shí)別地 bmp 圖像文件是

2、經(jīng)過(guò)處理地 ,沒(méi)有“噪音”等 ,在本論文中直接采用地是用 Windows 中地畫(huà)圖軟件畫(huà)出地圖像 .2. 本論文中圖像中地圖元都是單一地線性 ,即線寬是一個(gè)象素地情況 .第二節(jié)在工程圖地識(shí)別中常用地方法圖形地識(shí)別最主要地是圖形特征地提取,在這個(gè)階段 ,常用地方法是全局特征方法(包括:不變距 ,自回歸模型、傅立葉描述符、霍夫變換等) ,全局特征地特征提取方法是理論比較完善地 ,計(jì)算過(guò)程比較清楚 .針對(duì)不同地特征提取處理 ,采用相對(duì)應(yīng)地模式匹配方法來(lái)將圖形分類,模式識(shí)別迄今已有很多方法 ,有模板匹配、統(tǒng)計(jì)模式識(shí)別、句法模式識(shí)別、模糊識(shí)別和神經(jīng)網(wǎng)絡(luò)識(shí)別等.在二值圖像地處理中 ,人們常用地?cái)?shù)據(jù)結(jié)果有游

3、程編碼考慮了掃描行上相鄰象素間地相關(guān)性;行相鄰圖法(Line Adjeceney Gragh ),是由 Pavlidis 提出地一種二值圖地?cái)?shù)據(jù)結(jié)構(gòu),LAG 還考慮了相鄰行黑游程之間地相鄰關(guān)系,遍歷時(shí)很方便; BAG (Bloek Adjeceney Gragh)是由余斌提出地 ,它是相鄰圖LAG 在兩個(gè)方向上地推廣 .在本論文中就是利用了LAG 地?cái)?shù)據(jù)結(jié)構(gòu)思想與c+ builder 地?cái)?shù)據(jù)結(jié)構(gòu)相結(jié)合地方法即:用下一個(gè)象素點(diǎn)是與鏈表頭相鄰還是和尾相鄰來(lái)描述其相鄰地關(guān)系 .本論文中對(duì)交點(diǎn)地處理.目前對(duì)交點(diǎn)地處理有下面幾類算法:1.基于網(wǎng)格算法 ,該算法是通過(guò)網(wǎng)格加大搜索步長(zhǎng)來(lái)跳過(guò)交點(diǎn).2. 基于

4、圖段合并地算法 ,是根據(jù)交點(diǎn)處行程段地連通性 ,以交點(diǎn)為界將圖線分割成圖段 ,記錄各段之間地連接及從屬關(guān)系 ,然后連接或延長(zhǎng)各分支圖段 ,然后得到整條圖線 .在本論文中采用了第二種方法,基于圖段合并地算法.當(dāng)然現(xiàn)下有很多更好地算法和數(shù)據(jù)結(jié)構(gòu) ,但是大部分是針對(duì)具體地結(jié)構(gòu)或者研究方向不具有一般性 ,所以本論文地實(shí)現(xiàn)用了上述地?cái)?shù)據(jù)結(jié)構(gòu)和方法 .第二章論文地工作基礎(chǔ)和工作環(huán)境第一節(jié)數(shù)字圖像處理技術(shù)將客觀世界實(shí)體或圖片等通過(guò)不同地量化(數(shù)字化 )手段送入計(jì)算機(jī) ,由計(jì)算機(jī)按使用要求進(jìn)行圖像地平滑、增強(qiáng)、復(fù)原、分割、重建、編碼、存儲(chǔ)、傳輸?shù)确N種不同地處理,需要時(shí)把加工處理后地圖像重新輸出,這個(gè)過(guò)程稱為圖

5、像處理 .因此 ,圖像處理地含義是用計(jì)算機(jī)對(duì)圖像進(jìn)行加工處理以得到某種預(yù)期地效果 ,它本質(zhì)上是一種二維數(shù)字信號(hào)處理技術(shù) .1. 圖像處理地基本內(nèi)容圖像處理地基本內(nèi)容可以歸結(jié)為:1. 對(duì)圖像進(jìn)行增強(qiáng)或修改 .以改變或強(qiáng)調(diào)圖像信息地某些特點(diǎn) ( 增強(qiáng)有用信息 ,無(wú)用信息 ),改善圖像地視覺(jué)質(zhì)量;2. 描述圖像地特征并進(jìn)行特征抽取和分析 .例如提取圖像地紋理特征、頻譜特征、邊界特征和顏色特征等;對(duì)像素用某個(gè)標(biāo)準(zhǔn)衡量并進(jìn)行分類比較 ,將抽取地特征歸結(jié)為一定地模式 ,這屬于模式識(shí)別地范圍;3.圖像地重建 (Reconstruction).對(duì)圖像地某些部分合并或進(jìn)行重新組織,這種技術(shù)是從N1 維地信息用某

6、種算法得到N 維地圖像 ,例如計(jì)算機(jī)視覺(jué)就是這樣地一種技術(shù).2. 主要地圖像處理技術(shù)2.1 圖像地增強(qiáng)和恢復(fù)圖像增強(qiáng)所追求地目標(biāo)是改善圖像地視覺(jué)質(zhì)量,符合人們地主觀要求,它不追究圖像客觀質(zhì)量地降低原因.圖像地視覺(jué)質(zhì)量是因人而異地,其質(zhì)量地高低和好壞受觀看者地心理、愛(ài)好和文化素質(zhì)等因素地影響.圖像地恢復(fù)則致力于探索圖像質(zhì)量降低地原因,并盡可能消除圖像質(zhì)量地降低,恢復(fù)圖像地本來(lái)面目 .2.2 圖像地壓縮編碼彩色數(shù)字圖像通常是由三個(gè)二維數(shù)組組成地,其信息量相當(dāng)大 ,這給圖像地傳輸、處理、存儲(chǔ)和顯示等帶來(lái)很大地負(fù)擔(dān) .但問(wèn)題地另一方面是圖像中又往往存在很多冗余信息 ,在傳輸和存儲(chǔ)時(shí)可以對(duì)數(shù)字圖像進(jìn)行一

7、定方式地編碼 ,刪除圖像中地冗余信息 ,以提高圖像傳輸和存儲(chǔ)地效率 .2.3 圖像重建在醫(yī)學(xué)和工程應(yīng)用中,利用超聲波、 x 射線等技術(shù)取得物體地多幅來(lái)自不同角度地投影圖 ,通過(guò)計(jì)算可得到物缽內(nèi)部地圖像,這種技術(shù)稱為投影重建,例如 CT 就是圖像重建地一個(gè)應(yīng)用.2.4 圖像地分割和描述計(jì)算機(jī)按照一定地客觀測(cè)度 (例如灰度、顏色和幾何性質(zhì)等 )將圖像中包含地物體和區(qū)域從圖像中區(qū)分出來(lái) ,稱為圖像地分割 .用適當(dāng)?shù)財(cái)?shù)學(xué)語(yǔ)言來(lái)表示被分割出來(lái)地物體或區(qū)域地結(jié)構(gòu)和統(tǒng)計(jì)特性,或用數(shù)學(xué)語(yǔ)言表示區(qū)域問(wèn)地關(guān)系 ,稱為描述 .圖像經(jīng)分別和描述后 ,可較為容易地分類和識(shí)別.第二節(jié)圖像格式 BMP 格式BMP(Bitm

8、ap-File) 圖形文件是Windows 采用地圖形文件格式,在 Windows環(huán)境下運(yùn)行地所有圖像處理軟件都支持 BMP 圖像文件格式 .Windows 系統(tǒng)內(nèi)部各圖像繪制操作都是以 BMP 為基礎(chǔ)地 .Windows 3.0 以前地 BMP 圖文件格式與顯示設(shè)備有關(guān) ,因此把這種 BMP 圖像文件格式稱為設(shè)備相關(guān)位圖 DDB(device-dependent bitmap)文件格式 .Windows 3.0 以后地 BMP 圖像文件與顯示設(shè)備無(wú)關(guān) ,因此把這種BMP 圖像文件格式稱為設(shè)備無(wú)關(guān)位圖DIB(device-independentbitmap) 格式 ,目地是為了讓 Window

9、s 能夠在任何類型地顯示設(shè)備上顯示所存儲(chǔ)地圖像 .BMP 位圖文件默認(rèn)地文件擴(kuò)展名是 BMP 或者 bmp(有時(shí)它也會(huì)以 .DIB或 .RLE 作擴(kuò)展名) .文件結(jié)構(gòu)位圖文件可看成由4 個(gè)部分組成:位圖文件頭(bitmap-file header)、位圖信息頭(bitmap-information header)、彩色表 (color table)和定義位圖地字節(jié)陣列 ,它具有如下所示地形式 .位圖文件地組成結(jié)構(gòu)名稱符號(hào)位圖文件頭BITMAPFILEHEADERbmfh(bitmap-file header)位圖信息頭BITMAPINFOHEADERbmih(bitmap-informatio

10、n header)彩色表 (color table)RGBQUADaColors圖象數(shù)據(jù)陣列字節(jié)BYTEaBitmapBits第三節(jié)算法及數(shù)學(xué)基礎(chǔ)1. 霍夫變換( Hough Transform )霍夫變換是圖像處理中從圖像中識(shí)別幾何形狀地基本方法之一 .其基本思想就是把圖像平面上地點(diǎn)對(duì)應(yīng)到參數(shù)平面上地曲線 ,最后通過(guò)統(tǒng)計(jì)特性來(lái)解決問(wèn)題 . 自 1962 年 Hough 公布了該算法以來(lái) ,由于其良好地抗噪聲性能和對(duì)部分遮蓋地不敏感等特性 ,霍夫變換在模式識(shí)別領(lǐng)域得到廣泛地應(yīng)用 ,如直線、圓、橢圓、矩形等幾何圖形檢測(cè) ,任意形狀區(qū)域地邊界提取 ,二維或三維運(yùn)動(dòng)地參數(shù)估計(jì)等 .下面就于本論文相關(guān)

11、地直線和圓地識(shí)別進(jìn)行簡(jiǎn)單地介紹.1.1 霍夫變換識(shí)別直線霍夫變換識(shí)別直線 ,是將圖像空間中地一點(diǎn)變換為參數(shù)空間中地一條直線 . 圖像空間中同一直線上地點(diǎn) ,經(jīng)霍夫變換所形成地直線相交于參數(shù)空間中地一點(diǎn) , 該點(diǎn)坐標(biāo)代表圖像空間中直線地斜率及截距 .利用累加數(shù)組累計(jì)參數(shù)空間中通過(guò)該點(diǎn)地直線條數(shù) ,即代表圖像空間中直線上地點(diǎn)數(shù) .圖 1.1 霍夫變換識(shí)別直線( 1)設(shè)已知一黑白圖像上畫(huà)了一條直線,要求出這條直線所在地位置.我們知道 ,直線地方程可以用ykxb來(lái)表示 ,其中 k 和 b 是參數(shù) ,分別是斜率和截距 .過(guò)某一點(diǎn)(x0 , y0 ) 地所有直線地參數(shù)都會(huì)滿足方程y0kx0b .即圖像空間

12、中地一點(diǎn)(x0 , y0 ) 確定了參數(shù)空間中地一族直線.方程y0kx0b 在參數(shù)k-b平面上是一條直線 .這樣 ,圖像 x-y 平面上地一個(gè)前景像素點(diǎn)就對(duì)應(yīng)到參數(shù)平面上地一條直線 .霍夫變換識(shí)別直線地算法描述如下:Step1. 初始化一塊緩沖區(qū) ,對(duì)應(yīng)于參數(shù)平面 ,將其所有數(shù)據(jù)置為0.Step2. 對(duì)于圖像上每一前景點(diǎn),求出參數(shù)平面對(duì)應(yīng)地直線,把這直線上地所有點(diǎn)地值都加 .Step3. 找到參數(shù)平面上峰值點(diǎn)地位置,這些位置地坐標(biāo)就是原圖像上直線地參數(shù) ,每個(gè)位置對(duì)應(yīng)于原圖像上地一條直線.上面是霍夫變換識(shí)別直線地基本思想 .在實(shí)際應(yīng)用中 , y k x b 形式地直線方程沒(méi)有辦法表示 x=c

13、形式地直線(這時(shí)候 ,直線地斜率為無(wú)窮大) .所以實(shí)際應(yīng)用中 ,是采用參數(shù)方程:x cosy sin這樣 ,圖像平面 (x, y)空間上地一個(gè)點(diǎn)就對(duì)應(yīng)到參數(shù) 空間中地一條正弦曲線上 .在變換后地空間中這條正弦曲線上地任意一點(diǎn)對(duì)應(yīng)于原始圖像平面 (x, y)空間地一條直線 ,這條直線必通過(guò) (xi , yi ) 這個(gè)點(diǎn) ,而 (x, y)空間中所有共線地點(diǎn)經(jīng)過(guò)變換后所對(duì)應(yīng)地各正弦曲線都相交于一點(diǎn) .圖 1.2 霍夫變換識(shí)別直線(2)1.2 霍夫變換識(shí)別圓1) 半徑已知地圓地識(shí)別利用霍夫變換檢測(cè)出半徑已知地圓形 ,是將圖像平面上地每一點(diǎn)對(duì)應(yīng)到參數(shù)平面上地一個(gè)以已知半徑為半徑地圓 .經(jīng)過(guò)霍夫變換 ,

14、在參數(shù)平面上得到圓相交于一點(diǎn) ,這個(gè)點(diǎn)地坐標(biāo)即為原圖形坐標(biāo)平面上待識(shí)別地圓心坐標(biāo) .算法可以簡(jiǎn)單描述為:取和圖像平面一樣地參數(shù)平面 ,以圖像上每一個(gè)前景點(diǎn)為圓心 ,以已知地半徑在參數(shù)平面上畫(huà)圓 ,并把結(jié)果進(jìn)行累加 .最后找出參數(shù)平面上地峰值點(diǎn) ,這個(gè)位置就對(duì)應(yīng)了圖像上地圓心 .2) 未知半徑地圓地識(shí)別在第一個(gè)問(wèn)題基礎(chǔ)上 ,把參數(shù)平面擴(kuò)大稱為三維空間,即 x-y-R 三維 ,對(duì)應(yīng)圓地圓心和半徑 .圖像平面上地每一點(diǎn)就對(duì)應(yīng)于參數(shù)空間中每個(gè)半徑下地一個(gè)圓 , 在參數(shù)地三維空間中得到一個(gè)圓錐 .最后找出參數(shù)空間中地峰值點(diǎn) ,即得到待識(shí)別地圓地圓心和半徑 .由于霍夫變換具有良好地抗噪聲性能和對(duì)部分遮蓋地

15、不敏感等特性 ,又不受圖像旋轉(zhuǎn)地影響 ,在很多領(lǐng)域都有廣泛地應(yīng)用 ,有關(guān)霍夫變換地研究和改進(jìn)也很多 .例如廣義霍夫變換、隨機(jī)霍夫變換、快速霍夫變換等等 ,就是針對(duì)直線地霍夫變換也有很多改進(jìn)算法 .由于時(shí)間地原因 ,在本軟件中 ,只是使用了標(biāo)準(zhǔn)地霍夫變換算法 .2. 基于單義域地直線及圓識(shí)別算法霍夫變換為幾何圖形地識(shí)別地一個(gè)重要算法 ,但是由于該標(biāo)準(zhǔn)算法地時(shí)間復(fù)雜度和空間復(fù)雜度都是 O( N m ) ,其中 m 是參數(shù)坐標(biāo)地維數(shù) ,雖然有不少針對(duì)具體問(wèn)題(例如直線識(shí)別)地改進(jìn)算法 ,其在實(shí)際使用中也存在計(jì)算量大地問(wèn)題 . 針對(duì)本論文地工作地實(shí)際情況 ,參考文獻(xiàn)【 1】,并進(jìn)行了適當(dāng)?shù)睾?jiǎn)化 ,完成

16、了論文地識(shí)別部分 .下面就對(duì)這個(gè)基于單義域地識(shí)別算法進(jìn)行簡(jiǎn)單地介紹 .2.1 多義域地獲得單義域是指對(duì)待識(shí)別地圖形進(jìn)行分割得到地具有單一地幾何意義(線段或圓?。c(diǎn)地集合.對(duì)圖片進(jìn)行從上往下、從左往右地掃描,根據(jù)交點(diǎn)進(jìn)行分割得到多義域 ,多義域中地點(diǎn)構(gòu)成一個(gè)連通區(qū)域.對(duì)多義域進(jìn)行識(shí)別并分割得到單義域 .多義域由鏈表實(shí)現(xiàn) .算法描述如下:1 對(duì)圖形進(jìn)行從上往下、從左往右地掃描;2 對(duì)每一個(gè)前景點(diǎn) ,判斷其是否為交點(diǎn);3 將該點(diǎn)與現(xiàn)有地多義域地頭(如果其頭節(jié)點(diǎn)不是交點(diǎn))、尾(如果其尾節(jié)點(diǎn)不是交點(diǎn))節(jié)點(diǎn)進(jìn)行比較 ,如果與頭節(jié)點(diǎn)相鄰 ,將其插入到該多義域地頭節(jié)點(diǎn)之前;如果與尾節(jié)點(diǎn)相鄰 ,將其插入到該多義

17、域地尾節(jié)點(diǎn)之后 .4 如果該前景點(diǎn)不屬于任何現(xiàn)有多義域,則以該點(diǎn)為頭節(jié)點(diǎn)生成新地多義域 .5 直到圖形掃描完畢 .注:交點(diǎn)地判斷 .由此得到地多義域?qū)⑹且粋€(gè)線段、一個(gè)圓弧或者線段和圓弧地組合.在后續(xù)地識(shí)別過(guò)程中將把不是單義域地進(jìn)行分裂.2.2 最小二乘法擬合直線和圓最小二乘法首先由Karl Gauss為進(jìn)行行星軌道預(yù)測(cè)地研究而提出地.現(xiàn)在最小二乘法已經(jīng)變成從實(shí)驗(yàn)數(shù)據(jù)來(lái)進(jìn)行參數(shù)估計(jì)地主要手段.由最小二乘法獲得地估計(jì)在一定條件下有最佳地統(tǒng)計(jì)特性:一致、無(wú)偏、有效.它提供給我們一個(gè)數(shù)學(xué)程式 ,通過(guò)它能獲得一個(gè)在最小方差意義上與實(shí)驗(yàn)數(shù)據(jù)最好擬合助模型.運(yùn)用最小二乘法進(jìn)行圓地?cái)M合公式如下:其中 , (

18、xi , yi ) 為樣點(diǎn) , ( x0 , y0 ) 為所求圓心 , 為半徑 , 為平均徑向誤差 , 為最大徑向誤差 .2.3 多義域分裂和單義域地識(shí)別對(duì) 2.1 中得到地多義域 ,運(yùn)用最小二乘法進(jìn)行擬合 ,對(duì)于擬合不成功地多義域運(yùn)用首尾相連最大距離法進(jìn)行分裂 ,得到單義域 ,并記錄下各單義域地?cái)M合結(jié)果 , 供全局考慮 ,識(shí)別直線和圓用 .算法描述如下:1 從 2.1 得到地多義域列表里取第一個(gè)多義域;2 對(duì)選中地多義域運(yùn)用最小二乘法進(jìn)行圓地?cái)M合;如果得到地平均徑向誤差和最大徑向誤差小于指定閾值 ,則認(rèn)為擬合成功 ,該多義域?yàn)橐粓A弧地單義域;記錄擬合地結(jié)果 ,作為總體識(shí)別地種子圓 ,轉(zhuǎn)向 5

19、 執(zhí)行 ,否則執(zhí)行 3.3 對(duì)選中地多義域運(yùn)用最小二乘法進(jìn)行直線擬合;如果得到地平均距離誤差和最大距離誤差小于指定閾值 ,則認(rèn)為擬合成功 ,該多義域?yàn)橐痪€段地單義域;記錄擬合結(jié)果 ,作為總體識(shí)別地種子直線 ,轉(zhuǎn)向 5 執(zhí)行 ,否則執(zhí)行 4.4 該多義域?yàn)槎鄠€(gè)線段或圓弧地組合.將該多義域地頭尾節(jié)點(diǎn)連接,計(jì)算該多義域中各點(diǎn)與頭尾節(jié)點(diǎn)連線地距離,取距離最大地點(diǎn) ,對(duì)該多義域進(jìn)行分裂 ,得到兩個(gè)新地多義域,取代原先地多義域;轉(zhuǎn)向2 執(zhí)行 .5 取多義域列表中地下一個(gè),轉(zhuǎn)向2執(zhí)行.由此 ,所有地多義域都分裂為單義域,并對(duì)各單義域進(jìn)行了擬合.2.4 總體整合 ,識(shí)別直線和圓對(duì) 2.3 得到地單義域列表進(jìn)行

20、總體地整合,得到直線和圓 .1 選取單義域列表中地第一個(gè)單義域 ,將其擬合地圖形(直線或圓)作為種子圖形;2 將列表中其他單義域地識(shí)別結(jié)果與種子圖形進(jìn)行比較,如果誤差小于指定閾值 ,則屬于同一直線或同一圓,將其與選定單一域進(jìn)行合并,從列表中刪除該單義域;3 計(jì)算選定單義域地幾何數(shù)據(jù),得到圖形;4 選取列表中地下一個(gè)單義域,轉(zhuǎn)動(dòng) 2 執(zhí)行 .3. 主要技術(shù)3.1 Borland C+ Builder本論文地編程環(huán)境之所以選用c+ builder 是因?yàn)樗幸韵碌貎?yōu)點(diǎn):輸出入接口設(shè)計(jì)簡(jiǎn)單提供一流地開(kāi)發(fā)環(huán)境提供最標(biāo)準(zhǔn)地CC魯開(kāi)發(fā)工具提供豐富地組件與最強(qiáng)勁地調(diào)試工具VCL 類庫(kù)中封裝了Windows地

21、圖形設(shè)備接口 (GDI), 使得用戶很方便地在應(yīng)用程序添加圖像或處理圖像.圖像類主要有 Tbitmap 、 TBrush 、 TCanves、 TFont 、 TgraphakControl 、Tgraphic、 Ticon 、 TJPEGImage、TPen 和 Tpictur 以 Tmatifile 類 .3.2 虛類及虛方法地使用虛類和虛方法地使用在本論文中主要是Cshapes基類及虛方法地實(shí)現(xiàn).第三章直線和圓地識(shí)別和編輯地實(shí)現(xiàn)第一節(jié)系統(tǒng)地層次結(jié)構(gòu)地圖示第二節(jié)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及類地設(shè)計(jì)1. 主要類地層次結(jié)構(gòu)1.1 圖形處理類:1.2識(shí)別用類:2. 圖形基類( CShape)2.1 描述圖形基

22、類 ,提供所有圖形地標(biāo)準(zhǔn)屬性和方法 .其他圖形類(直線、圓)等都是該類地子類 ,繼承其所有地 public 屬性和方法 ,對(duì)其中地虛方法( virtual )進(jìn)行重定義和實(shí)現(xiàn) .該類為虛類 ,其成員函數(shù)主要為虛函數(shù) ,為其所有子類提供統(tǒng)一地接口 ,但是沒(méi)有實(shí)現(xiàn) .其他模塊對(duì)圖形進(jìn)行操作時(shí) ,除非生成新地實(shí)例( Instance),都無(wú)須知道所操作地是哪個(gè)具體地圖形 ,而統(tǒng)一使用 Cshape 類型 ,為程序地實(shí)現(xiàn)、擴(kuò)充和維護(hù)提供很大方便 .2.2 實(shí)現(xiàn)class CShape public:/* 屬性定義 */ 前景色(由于時(shí)間等地限制,本系統(tǒng)暫時(shí)只定義該圖形地屬性,其/ 他如:填充色 ,線條

23、型 ,填充型等可擴(kuò)充)TColor color 。/* 編輯用屬性*/ 編輯時(shí)標(biāo)志該圖形是否被選擇bool isSelected 。/ 編輯操作所選中地點(diǎn)TPoint * editP/* 識(shí)別用屬性*/ 識(shí)別地效果描述 ,值越小說(shuō)明識(shí)別效果越好/ 最小二乘法地平均誤差;/ 霍夫變換: 1 - 參數(shù)空間中該圖形地值 / 最大值double chance 。/ 圖形上點(diǎn)地?cái)?shù)量int pointCount 。/* 成員函數(shù)定義*/* 顯示和描述用方法*/ 顯示圖形:在指定地位圖上顯示圖形virtual void draw(Graphics:TBitmap * argDest)。/ 描述圖形:作為 T

24、treeView 地節(jié)點(diǎn)(主窗體使用)virtual void discript(int index, TTreeView * tree)。/ 描述圖形:返回描述圖形地字符串virtual String discript()。/* 識(shí)別用 */ 比較兩個(gè)圖形 ,如果是同一個(gè)圖形 ,返回 True,否則 False./ 直線上地兩個(gè)線段;圓上面地兩個(gè)圓弧virtual bool similarWith(CShape * argShape)。/ 合并兩個(gè)圖形/ 經(jīng)過(guò)判斷為相同地圖形進(jìn)行合并 ,返回 True;否則返回 False.virtual bool mergeWith(CShape * ar

25、gShape)。/ 判斷圖形存在地可能性(利用具體圖形地幾何規(guī)則)virtual bool checkPossible()。/* 編輯用 */ 判斷是否點(diǎn)擊該圖形 ,若選中則當(dāng)前編輯地圖形改為當(dāng)前圖形virtual bool isClickOnShape(int x, int y)。/ 取得鼠標(biāo)形狀:鼠標(biāo)移動(dòng)到選中圖形地可操作點(diǎn)上時(shí),顯示為編輯形狀virtual TCursor getCursor(int x, int y)。/ 更新圖形:將編輯點(diǎn)移動(dòng)到(x, y) 點(diǎn). 更新成功返回True,否則False.virtual bool update(int x, int y)。 。3. 圖形類

26、( CLine 、 CCircle )3.1 描述圖形類是幾何圖形地具體實(shí)現(xiàn),實(shí)現(xiàn)對(duì)應(yīng)幾何圖形地描述和相關(guān)操作.圖形類有共同地父類CShape,對(duì)父類中定義地虛方法根據(jù)本幾何圖形地特征進(jìn)行實(shí)現(xiàn) .根據(jù)要求 ,本系統(tǒng)中實(shí)現(xiàn)了直線(CLine )和圓( CCircle )兩個(gè)圖形類 .其他簡(jiǎn)單地幾何圖形如橢圓、矩形等也可以類似地方法實(shí)現(xiàn),作為本系統(tǒng)地一個(gè)擴(kuò)充.本系統(tǒng)中 ,直線類采用直觀地AxByC0 地形式來(lái)描述直線(既避免點(diǎn)斜式不能描述豎直直線, 也避免極坐標(biāo)方程轉(zhuǎn)換地問(wèn)題). 因?yàn)槌杀壤貎山M(A1,B1,C1)和 (A2,B2,C2) 表示同一條直線,所以規(guī)定,如果B 參數(shù)不為0,則B 1

27、A 1.由于要識(shí)別圖像中地線段 ,所以增加兩個(gè)端點(diǎn)進(jìn)行限制 .直線類有三個(gè)點(diǎn)可以編輯: 1)兩個(gè)端點(diǎn) ,選中一個(gè)端點(diǎn)并移動(dòng) ,是以另一端點(diǎn)為軸進(jìn)行旋轉(zhuǎn); 2)線段地中點(diǎn) ,選中中點(diǎn)并移動(dòng) ,是平移整個(gè)直線 .圓類采用 ( xxc )2(yyc )2R 2 地形式描述(其中( xc , yc ) 為圓心 ,R 為半徑) ,直觀方便 .圓上有兩個(gè)點(diǎn)支持編輯操作: 1)圓心 , 選中圓心并移動(dòng) ,是平移整個(gè)圓; 2)圓上地一個(gè)點(diǎn) ,選中該點(diǎn)并移動(dòng) ,是改變圓地半徑 ,圓心不變 .3.2 實(shí)現(xiàn)直線類( CLine )class CLine: public CShape public:/* 初始化 */

28、CLine(double argA, double argB, double argC)。/* 直線地屬性 */ 線段地兩個(gè)端點(diǎn)TPoint *startP, *endP 。/ 直線方程地參數(shù): A,B,C double A, B, C 。/* 對(duì)父類虛方法地 實(shí)現(xiàn) */ 在目標(biāo)位圖上畫(huà)出直 線(本系 統(tǒng)中地實(shí)現(xiàn)為 畫(huà)線段)void draw(Graphics:TBitmap * argDest)。/ 在TTreeView中描述void discript(int index, TTreeView * tree)。/ 返回描述用字符串String discript()。/ 判斷 該直線是否與指定

29、 圖形相同/ 將指定 圖形強(qiáng)制轉(zhuǎn)化為 CLine 類型 ,比較其參數(shù) A, B, C,/ 若小于指定 閾值 , 則返回 Ture,否則返回 False.bool similarWith(CShape * argShape)。/ 合并同一直 線上地兩個(gè) 線段/ 若目標(biāo)圖形與 該圖形屬同一直 線 ,進(jìn)行合并 , 返回 True;/ 否則返回 False.void mergeWith(CShape * argShape) 。/ 判斷是否 選擇該 直線進(jìn)行編輯 ./ 判斷指定點(diǎn) (x, y) 到該直線地距離 ,/ 如果小于指定 閾值則 返回 True, 否則 False.bool isClickOnS

30、hape(int x, int y)。/ 取得鼠 標(biāo)形狀 ./ 端點(diǎn)時(shí)返回 45 度 ,135 度地雙向箭 頭形狀表示旋 轉(zhuǎn);/ 中點(diǎn)時(shí)返回垂直地四個(gè)方向箭 頭地形狀表示移 動(dòng)TCursor getCursor(int x, int y)。/ 更新直 線bool update(int x, int y)。 。圓類( CCircle )class CCircle: public CShape public:/* 初始化 */CCircle(int argX, int argY, int argR)。/*圓地屬性*/*/ 圓心TPoint * centerP 。/ 半徑int R 。對(duì)父類虛方法地

31、 實(shí)現(xiàn)在目標(biāo)位圖上畫(huà)出圓*/void draw(Graphics:TBitmap * argDest)/ 在 TTreeView 中描述。void discript(int index, TTreeView * tree)。/ 返回描述用字符串String discript()。/ 判斷 該圓是否與指定 圖形相同/ 將指定 圖形強(qiáng)制轉(zhuǎn)化為 CCircle 類型 ,比較其參數(shù) 圓心坐 標(biāo)和半徑 ,/ 若小于指定 閾值 , 則返回 Ture,否則返回 False.bool similarWith(CShape * argShape)。/ 合并同一 圓上地兩個(gè) 圓弧/ 若目標(biāo)圖形與 該圖形屬同一 圓

32、,進(jìn)行合并 ,返回 True;/ 否則返回 False.void mergeWith(CShape * argShape) 。/ 判斷是否 選擇該圓進(jìn) 行編輯 ./ 計(jì)算指定點(diǎn) (x, y) 到圓心地距離 , 并與半徑比 較 ,/ 如果小于指定 閾值則 返回 True, 否則 False.bool isClickOnShape(int x, int y)。/ 取得鼠 標(biāo)形狀 ./ 圓上點(diǎn) 時(shí)返回水平地雙向箭 頭形狀表示改 變半徑;/ 圓心時(shí)返回垂直地四個(gè)方向箭 頭地形狀表示移 動(dòng)TCursor getCursor(int x, int y)。/ 更新圓bool update(int x, in

33、t y)。 。4. 圖形容器類( CShapes)4.1 描述圖形容器類是圖形類地集合類,由 C+ Builder 地 TList 繼承得到 .用來(lái)組織對(duì)圖像地識(shí)別結(jié)果、組織當(dāng)前編輯工作地圖形對(duì)象集.提供添加圖形、刪除圖形、圖形編輯等接口.4.2 實(shí)現(xiàn)class CShapes : public TList public:/* 初始化 */CShapes()。/ 從 TreeView 得到 Shapes CShapes(TTreeView * tree) 。/ 在目 標(biāo)位圖上畫(huà)出所有地 圖形void drawShapes(Graphics:TBitmap * argDest)。/ 描述 圖形v

34、oid discript(TTreeView * tree)。 。5. 點(diǎn)類( CPoint )5.1 描述點(diǎn)類對(duì)于與圖像上地前景點(diǎn) .由于識(shí)別時(shí)需要判斷是否為交點(diǎn) ,在一般地點(diǎn)地基礎(chǔ)上增加是否為交點(diǎn)地屬性 .由 C+ Builder 地 TPoint 繼承得到 .5.2 實(shí)現(xiàn)class CPoint : public TPoint public:/* 初始化 */CPoint() isCrossPoint = false。 。CPoint(int argx, int argy, bool isCross)。CPoint(int argx, int argy, Graphics:TBitmap

35、 * argImg)。/* 屬性:是否 為交點(diǎn) */bool isCrossPoint 。 。6. 單義域類( CSegment)6.1 描述在“基于單義域地圖形識(shí)別算法”中,單義域和多義域地唯一區(qū)別就是多義域不是單一地幾何元素,其在存儲(chǔ)結(jié)構(gòu)上是一樣地,在本系統(tǒng)中 ,都由CSegment類實(shí)現(xiàn) ,姑且命名為單義域類 .單義域類為點(diǎn)地集合類,由 C+ Builder 地 TList 類繼承得到 .提供添加點(diǎn)、刪除點(diǎn)、判斷該單義域是否有識(shí)別價(jià)值、識(shí)別該單義域等接口和方法.6.2 實(shí)現(xiàn)class CSegment : public TList public:/* 初始化 */CSegment(CPo

36、int * p) 。/* 識(shí)別該單義 域: 實(shí)現(xiàn)算法中 對(duì)單義 域地 識(shí)別部分 */ 如果 識(shí)別成功(得到 圓或線段)返回 True, 否則返回 False bool recognize() 。/*嘗試添加新地點(diǎn)到該單義 域*/判斷該點(diǎn)是否屬于 該單義 域并確定是在頭部還是在尾部 ,并將其插入到適當(dāng)位置;如果將相 應(yīng)地方向 關(guān)閉 增長(zhǎng);若加入成功返回True, 否則返回 False.該點(diǎn)為交點(diǎn) ,則bool addNewPoint() 。/* 判斷該單義 域是否有 識(shí)別價(jià)值 */ 如果該單義 域含有地點(diǎn)數(shù)太少 ,則沒(méi)有價(jià) 值返回 False,否則返回 True. bool checkValue

37、() 。/* 屬性: 識(shí)別出地 圖形 */CShape * shape 。 。7. 基于單義域識(shí)別類( CSegments)7.1 描述基于單義域識(shí)別類是實(shí)現(xiàn)“基于單義域地直線和圓識(shí)別算法”地主要類 .它實(shí)現(xiàn)了對(duì)目標(biāo)圖像地分割、對(duì)分割結(jié)果地顯示、對(duì)識(shí)別得到地多義域進(jìn)行分割、對(duì)單義域識(shí)別結(jié)果地總體考慮,最終得到識(shí)別結(jié)果集.基于單義域識(shí)別類同時(shí)是單義域地集合類,由C+ Builder地TList類繼承得到 .用來(lái)組織對(duì)圖像地單義域分割后地結(jié)果.7.2 實(shí)現(xiàn)class CSegments : public TList public:/* 構(gòu)造和析構(gòu)函數(shù)*/CSegments() 。CSegments

38、() 。/* 掃描圖像 ,得到多 義域 */ 從上往下 ,從左往右 掃描圖像 ,對(duì)于每一個(gè)前景點(diǎn)/ 1. 生成新地 CPoint 實(shí)例/ 2. 對(duì)于本類中地所有 單義域,將該點(diǎn)嘗試加入/ 3. 如果加入失 敗,以該點(diǎn)為頭生成新地 單義域并加入 .void segmentize(Graphics:TBitmap * argSrc)。/* 在指定地位 圖上顯示分割得到地多義域、 單義域 */void displaySegments(Graphics:TBitmap * argDes)。/* 識(shí)別該 集合中地元素*/ 1. 調(diào)用單義域地 checkValue(), 如果得到 False,刪除該單義

39、域;/ 2. 調(diào)用單義域地 recognize(), 如果返回 False,對(duì)該單義 域進(jìn)行分割;/ 將新得到地 2 個(gè)單義域取代當(dāng)前地 單義域 ,并進(jìn)行識(shí)別/ 3. 所有地 單義域識(shí)別完畢后 ,對(duì)各個(gè)單義 域地識(shí)別結(jié) 果進(jìn)行合并/ 4. 返回得到地 圖形容器 類. CShapes * recognize() 。/* 刪除集合中地指定位置地元素*/void removeItemOnly(int index)。void removeItemAndFreePoints(int index)。 。8. 霍夫變換識(shí)別直線類( CHTLine )8.1 描述實(shí)現(xiàn)霍夫變換識(shí)別直線算法.8.2 實(shí)現(xiàn)clas

40、s CHTLine public:/* 構(gòu)造和析構(gòu)函數(shù)*/CHTLine () 。 CHTLine () 。/* 對(duì)源位 圖按照直 線識(shí)別 算法 進(jìn)行霍夫 變換 */ argRho, argTheta 分別是對(duì)和地分割地份數(shù).void recognize(Graphics:TBitmap * argSource, int argRho, int argTheta)。/* 在目標(biāo)位圖上顯示參數(shù)坐 標(biāo)地信息 */ 以參數(shù)坐 標(biāo)地最大 值為灰度最大 值, 按比例灰度在位 圖上顯示.void displayPramater(Graphics:TBitmap* argDest)。/* 按照 argRat

41、e 指定地概率取得識(shí)別出地直 線列表 */void getLines(TList * argList, double argRate)。 。9. 霍夫變換識(shí)別圓類( CHTCircle )9.1 描述實(shí)現(xiàn)霍夫變換識(shí)別圓算法.9.2 實(shí)現(xiàn)class CHTCircle public:/* 構(gòu)造和析構(gòu)函數(shù)*/CHTCircle () 。 CHTCircle ()。/* 對(duì)源位 圖按照 圓地識(shí)別算法 進(jìn)行霍夫 變換 */void recognize(Graphics:TBitmap * argRes)。/* 在目標(biāo)位圖上顯示參數(shù)坐 標(biāo)地信息 */ 以參數(shù)坐 標(biāo)地最大 值為灰度最大 值, 按比例灰度在

42、位圖上顯示參數(shù)坐 標(biāo)中指定半徑地二維平面地?cái)?shù)據(jù) .void displayPramater(Graphics:TBitmap* argDest, int argR)。/* 按照 argRate 指定地概率取得識(shí)別出地直 線列表 */void getCircles(TList * argList, double argRate)。 。第三節(jié)系統(tǒng)功能介紹1識(shí)別部分(1).基于霍夫變換下地識(shí)別啟動(dòng) recognize.exeFile->open 打開(kāi)要識(shí)別地 bmp 文件Hough Trans->ling recognize 得到識(shí)別出地直線地霍夫變換圖 ,圖中地每個(gè)亮點(diǎn)代表一條直線;識(shí)

43、別地圓地概率圓 ,在下面地 Edit 控件中是你想要顯示地圓地直徑 ,輸入后點(diǎn) display 后就可以看到霍夫變換地結(jié)果注:由于霍夫變換是一個(gè)三維地循環(huán) ,消耗內(nèi)存較多 ,速度較慢 ,所以圖像地原圖地大小直接影響到速度 .下面是幾幅圖象地實(shí)驗(yàn)結(jié)果:圖 3.1 只含有直線地bpm 文件圖 3.2 圖 4.1 地 Hough Trans->line recognize 地結(jié)果再如另一個(gè)例子:圖 3.3圖 3.4 對(duì)上圖顯示直徑為30圖 3.5 對(duì)上圖顯示直徑為60(2). 基于分區(qū)聯(lián)合下地識(shí)別1、 2 步如上3,Segment->step1:Segmentize將整幅圖像分區(qū)地結(jié)果4,Segment->step2:Segment recognize識(shí)別分區(qū)后地各個(gè)部分5,Segment->

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論