




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上摘 要圖像匹配在遙感、醫學、計算機視覺等很多領域中有著廣泛的應用,是提取和匹配圖像特征是實現圖像自動配準的一種重要方法。SIFT(尺度不變特性變換,Scale Invariant Feature Transform)最初是作為一種關鍵點的特征提取出來的,其匹配能力較強,可以處理兩幅圖像之間發生平移、旋轉、防輻射4等變換情況下的匹配問題,甚至在某種程度上對任意角度拍攝的圖像也具備較為穩定的特征匹配能力。作為一種優秀的局部特征描述子,SIFT算子被廣泛應用于目標識別、圖像配準、室內場景定位等場合。論文著重介紹了一種基于圖像特征值的匹配方法(SIFT算法),包括SIFT算法
2、的發展歷史,算法特點,主要思想和實現步驟,然后實現SIFT特征點提取,以尋找一種優化算法,減少SIFT的算法復雜度。(介紹用什么實驗,得到什么結論)關鍵詞:SIFT算法,特征匹配,特征點提取專心-專注-專業AstractIn remote sensing image matching, medical, computer vision many adjacent domain in a wide range of applications, Extraction and matching image characteristics is to realize the automatic ima
3、ge registration is a kind of important method . SIFT was originally as a key point for feature extraction of come out, its matching with the strong ability can handle two images occur between translation, rotation and anti-radiation such transformation under the circumstance of the matching problem,
4、 even in some extent of arbitrary Angle photographs of image and also has a relatively stable feature matching ability. As a kind of excellent local characteristics description son, SIFT operators are widely used in target recognition, image registration, indoor scene positioning and so on. This pap
5、er mainly introduces a method based on image eigenvalue of matching method (SIFT algorithm). Including SIFT algorithm development history, algorithm characteristics, main ideas and implementation steps and then realized SIFT feature point extraction to find an optimization algorithm to reduce SIFT a
6、lgorithm complexity .(請不要直譯)Keywords:SIFT algorithm, feature matching, feature point extraction, simplified algorithm. 目 錄摘 要I第1章 緒論11.1 課題背景11.2目的意義11.3研究內容及結構安排2第2章 智能優化方法32.1 基于蟻群的優化算法32.2 基于魚群的優化算法32.3 基于神經網絡的優化算法32.4 本章小結3第3章 SIFT基本算法43.1 構建尺度空間53.2局部極值點的檢測73.3 極值點的方向分配73.4特征點描述子的生成83.5 SIFT算法的
7、擴展93.6 本章小結10第4章 SIFT算法的改進方案114.1 SIFT簡化算法介紹114.2 SIFT簡化算法124.3 本章小結14第5章 實驗結果及分析155.1 簡化算法不變性測試155.2 描述子維數的選擇155.3改進算法的時間復雜度155.4 本章小結15致 謝16參考文獻17附錄18第1章 緒論1.1 課題背景SIFT(Scale Invariant Feature Transform)算法由D.GLowe8于1999年提出,2004年哥倫比亞大學的David Lowe7提出了一種新的提取特征點的算法SIFT算法。后來,Y。ke將其描述子部分用PCA代替直方圖的方式,對SI
8、FT算法進行改進,目前基于改進SIFT特征點的算法在圖像處理中的應用越來越廣泛,而且近年來這方面的研究也取得了很大的成果。較好的解決了物體遮掩、旋轉縮放、視覺變換引起的圖像變形等問題。本文主要針對圖像匹配中的SIFT算法進行研究,然后將圖片編程到OPENCV軟件中,并借助gsl來實現改進的SIFT算法1的可用性。1.2目的意義 在圖像提取算法百花齊放的時候,SIFT算法作為一個嶄新特征提取的技術,具有強大和精確的匹配能力和廣闊的發展和應用空間。對SIFT算法的改進和優化方法也有很多,如降低特征向量維數,增強算法的獨特性和魯棒性等。目前新型改進算法CSIFT,將SIFT與顏色不變量相結合19。S
9、IFT算子的應用鄰域很廣泛,目前已應用于目標識別、移動物體識別和圖像配準和全景拼接等鄰域,并仍有很大研究潛力;尤其在圖像檢索中的應用研究也有很廣泛的應用意義和價值。因此SIFT算法將在以后將被更多研究者深入的研究,并具有更實用的應用價值。圖像配準2的用處很廣泛,其技術廣泛應用于計算機視覺3、目標跟蹤、醫療診斷等許多方面。景象匹配技術給予圖像匹配的原理,以其定位的精確度在理論上與射程無關和自主性強等特點,成為組合導航中頗受重視的關鍵技術之一。在遙感領域,實現圖像融合、變化檢測、圖像校正、圖像鑲嵌等應用中,圖像匹配都是必不可少的一個關鍵步驟。1.3研究內容及結構安排 第2章 智能優化方法優化算法簡
10、單介紹2.1 基于蟻群的優化算法2.2 基于魚群的優化算法 2.3 基于神經網絡的優化算法2.4 本章小結第3章 SIFT基本算法SIFT算法的發展歷程 SIFT算法由D.GLowe 1999年提出,2004年完善總結。后來Y.Ke將其描述子部分用PCA代替直方圖的方式,對其進行改進。SIFT算法的主要思想 SIFT算法是一種提取局部特征的算法,在尺度空間尋找極值點,提取位置,尺度,旋轉不變量。SIFT算法的主要特點:a) SIFT特征是圖像的局部特征,對其旋轉、尺度縮放、亮度變化保持不變性,對視覺變化、放射變化、噪聲也保持一定程度的穩定性。b) 獨特性(Distinctiveness)好,信
11、息量豐富,適用于在海量特征數據中進行快速、準確的圖像匹配9。c) 多量性,即使少數的幾個物體,也可以產生大量的SIFT特征向量。d) 高速性,經簡化的SIFT匹配算法可以達到實時性的要求。e) 可擴展性,可以很方便的與其他形式的特征向量進行聯合。SIFT(Scale Invariant Feature Transform)即尺度不變特征變換,它對于圖像的尺寸和旋轉保持不變性,以下是用來產生SIFT圖像特征的主要計算步驟: 1)尺度空間檢測極值點:計算的第一階段是搜索所有的尺度和圖像位置,使用高斯差分公式可以有效的檢測出潛在的特征點,這些特征點對于尺度縮放的旋轉變換具有不變性; 2)關鍵點的定位
12、:對于每個點,確定他們的位置和尺度; 3)確定關鍵點的方向:為每個關鍵點分配一個方向,以后所有對圖像的數據的操作都被轉換為對特征點方向、尺度和位置的操作,從而保證變化得不變性; 4)生成特征點描述子:通過對關鍵點當前尺度周圍區域的梯度統計,生成特征點描述子。 下面詳細介紹SIFT算子特征提取的過程。3.1 構建尺度空間 構建尺度空間的目的是檢測對于圖像的尺度變化具有不變性的位置,可以使用尺度的連續函數也就是尺度空間在所有可能的尺度中尋找穩定的特征,高斯卷積核實實現尺度變換的唯一線性核。因此,若I(x,y)為輸入圖像,G(x,y,)是尺度可變高斯函數,則一個圖像的尺度空間被定義為函數L(x,y,
13、),見式(2.1)。 L(x,y,)= G(x,y,)*I(x,y) (2.1) 其中,為尺度因子,越大,表示圖像的概貌特征;越小,表明圖像的細節特征,*為卷積運算。式(2.1)中的高斯函數G(x,y,)定義為式(2.2)。G(x,y,)=1/22 e-(x2+y2)/22 (2.2)為了在尺度空間中有效的檢測穩定關鍵點的位置,Lowe提出了高斯差分卷積,高斯差分函數D(x,y,)可以通過不變倍增因子K的兩個相鄰尺度圖像差計算得出,見式(2.3)。D(x,y,)=(G(x,y,k)-G(x,y,))*I(x,y)=L(x,y,k)- L(x,y,) (2.3)選擇高斯差分函數的幾個優點: 1)
14、計算效率高:由于L對于每個尺度空間都是需要計算的,而D只需在此基礎上做減法操作; 2)高斯差分函數DoG(differerce-of-Gaussian)是尺度歸一化算子LoG(Laplacian of Gaussian)的近似,Lindeberg證明具有因子2 的尺度歸一化算子LoG對于真正的尺度不變性是必須的。DoG于LoG關系如式(2.4)。 2G=G/GG(x,y,k)- G(x,y,)/( k-k) (2.4) 因此,G(x,y,k)- G(x,y,) (k-1)22G 式(2.5)中的(k-1)因子在所有的尺度中式一個常量,所以不會影響極值點的位置,當k變為1時近似的誤差會趨近于零,
15、但是在試驗中發現近似值對于極值點檢測方面的穩定性沒有什么影響。 3)實驗表明,從尺度歸一化LoG空間中提取的特征穩定性最佳,優于梯度、Hessian、Harris焦點函數6。不要直接貼圖,要自已畫D(x,y,)具體計算過程見圖2.3,初始圖像經逐步高斯卷積運算,得到一系列尺度空間,即高斯(Gaussian)尺度空間,也就是圖中左邊的一列,右邊一列表示由高斯制度空間經差分運算得到的高斯差分(DoG)尺度空間。尺度空間分為o階,每一階有s層。為了能再高斯差分(DoG)尺度空間的s層上檢測候選點,需要有s+2層的高斯差分尺度空間,因而對應的高斯尺度空間需要為,則下一層尺度因子為k,故k=2I/s。在
16、產生了s+2個圖像后,頂層圖像有s+3層。如圖所展示的,s+3個高斯圖像產生s+2個高斯差分圖像,所以必須首先構造s+3個高斯尺度圖像。這些圖像的尺度因子逐個以常數k倍遞增,即若當前層圖像的尺度因子由原始圖像進行了1:2的采樣計算得出。圖2.3中,左邊的o階尺度空間構成高斯金字塔,右邊o階尺度空間構成高斯差分金字塔。3.2局部極值點的檢測 為了檢測D(x,y,)的局部極大值和極小值,每個采樣點都要和它同尺度的8個相鄰點和上下相鄰尺寸對應的92個點相比較。只有當它比所有相鄰點都大或者都小的時候這個點菜被選擇。這個檢查的花費是相當低的,因為大部分的采樣點在上一次檢查中就被淘汰了,見圖2.4所示。圖
17、要自已畫,圖標移到圖外面來上一步被選擇的點稱為候選點,但是如果要進行下一步確定關鍵點的位置、尺度、主曲率,還要剔除那些低對比(對噪聲很敏感)的點和處于邊緣的點。3.3 極值點的方向分配 通過為每個關鍵點分配一個統一的基于局部圖像屬性的方向,關鍵點描述子轉化為由它的方向來描述,從而實現圖像旋轉的不變性。這個方法了Schmid和Mohr(1997)的方向不變描述子5。這種方法的缺點是它限制了描述子的使用并拋棄了一部分圖像信息。 對于每一個采樣點L(x,y),計算其梯度模值m(x,y)和方向(x,y)的公式為式(2.14)和式(2.15)。m(x,y)= 2.14(x,y)=tan-1(L(x,y,
18、+1)-L(x,y-1))/(L(x+1,y)-L(x-1,y)) 2.15 為了進一步精確關鍵點的方向,采用梯度直方圖統計法。以關鍵點為圓心,1.5為半徑的圓形區域中,統計關鍵點鄰域窗口的梯度值,并繪制梯度直方圖。其中梯度直方圖將360°分為36個單元(bin),每10°為一個單元。每個鄰域點對梯度方向的貢獻隨鄰域點與關鍵點的距離增加而減少,具體為成高斯函數遞增。直方圖的峰值處即為關鍵點的主方向。 在主方向被選定之后,梯度直方圖中還可能存在一個或一個以上峰值為主峰值的80%以上,為了增強匹配的魯棒性,可以增強一些關鍵點,這些關鍵點于原關鍵點具有相同位置和尺度,并將符合要求
19、的峰值作為其方向,只有15%關鍵點才具有多個方向。3.4特征點描述子的生成我們已經計算了關鍵點的位置、尺度和方向,下一步是要確定關鍵點描述子,特征點描述子的生成過程具體如下:鍵點為圓心將關鍵點鄰域旋轉°,其中為關鍵點的方向,從而保證了旋轉的不變性;在旋轉后的圖像中,以關鍵點的中心取1616的鄰域窗口,圖2.5中左圖即為關鍵點的鄰域窗口,每個小格代表關鍵點鄰域窗口中的一個像素,箭頭的長度為像素的模值,箭頭的方向為像素的方向,這個方向是旋轉后的像素方向,即-;將1616的矩形窗口均勻分為16個44個子區域,如圖2.5中右圖,采用高斯模糊的方法,高斯模糊的方法有利于增加與關鍵點較近鄰域的權
20、值,并降低與關鍵點較遠鄰域的權值,然后計算每個林宇中8個方向的梯度累加值: 得到特征點描述子的特征向量為448=128維向量。經過以上的變換,SIFT特征向量已經剔除了尺度變換、旋轉變換的影響。3.5 SIFT算法的擴展 SIFT算法具有很好的魯棒性和抗干擾性,有著廣泛的應用,但是由于SIFT算子具有很高的維數(128維),增強了其計算復雜性和時間復雜度,并且在大規模特征數據庫的檢索中存在存儲壓力。國內外研究學者針對其高維數的缺點,進行了改進和嘗試,以求在保持SIFT算子良好特征的前提下,盡量降低其維數。在這些研究中,較為有代表性的事PCA-SIFT和GLOH,兩者都是從這個方面入手,并且都采
21、用了PCA(Principal componment analysis)技術。 PCA技術11是通過對數據降維萊實現簡化的目的。通過一個正交矩陣變換把原數據變換到一個新的坐標系統中,從而實現高維數數據到低維數數據的轉換,原變量中的大部分信息可以用維數少且互不相關的新變量來表示。主成分的劃分按照信息量的數目,包含最大信息的綜合指標作為第一主成分,其次的作為第二主成分,一般主成分的數目按需要反映全部信息量的百分比來決定。主成分分析主要是采用樣本矩陣的協方差矩陣。 PCA技術的優點之一是其完全無參數限制。也就是說,PCA的計算和實現過程中不需要人為預先設定的參數或根據任何經驗模型對過程進行干預,計算
22、結果只與數據本身有關。3.6 本章小結第4章 SIFT算法的改進方案SIFT算法是一種基于局部特征描述的算法,對于每個特征點,根據其鄰域內的像素決定其描述子向量,較全局特征算法在大型數據庫匹配中有了更好的應用,但是由于SIFT算子的特征描述子為128維,在存儲中需要耗費的存儲空間和匹配時間,GLOH算法雖然比SIFT算法由著更好的性能,但其特征向量也為128維,沒有在復雜度上進行提高。針對于SIFT算法維數較高的缺點,本論文SIFT算法進行了改進,一下為具體的改進算法。4.1 SIFT簡化算法介紹 SIFT算法的改進方案是從特征點的描述子入手,因為特征點描述子生成占去整個算法處理時間的大部分,
23、影響了算法的實時性,本論文的改進算法也是針對于特征點描述子進行改進。 本論文的改進算法是將原有的均勻分布的矩形區域改為以關鍵點為中心向外擴散的同心圓區域,生成關鍵點的鄰域沒有變小。這樣改進主要有以下一些因素:1)SIFT算法中應用了高斯模糊的方法,也就是將圖像與高斯函數即正態函數做卷積。對于圖像來說,高斯模糊生成的曲面等高線是從關鍵點開始呈高斯分布的同心圓。這樣處理以后與關鍵點較近區域中的像素對關鍵點描述子的生成影響比重較大,而與關鍵點較遠區域中的像素對關鍵點描述子的生成影響小。若將原區域劃分改為以關鍵點為中心的同心圓區域,可以省去高斯的模糊的步驟:2)SIFT算法需要計算每個關鍵點的方向,并
24、在描述子生成前旋轉鄰域,使關鍵點的方向為0°,從而保證旋轉不變性。這是因為矩形并不具有旋轉不變性,相對而言,圓形區域具有很好的旋轉不變性,可以免去鄰域角度歸零的步驟。新的描述子構造方法如下:以關鍵點為中心,16為直徑的圓形窗戶區域作為鄰域,以保證生成特征點描述子所需要計算的鄰域范圍和原算法基本一致:將半徑為8的圓形鄰域以2為單位分為4個同心圓,圖3.1即為劃分之后的同心圓,每個格子代表一個像素值:對于4個同心圓區域,分別求出其10個方向(0°、36°、72°、108°、144°、180°、216°、252°
25、;、288°、324°)的梯度累加值。由中心向外,取第一個圓環的10維向量作為特征向量的第一至第十個元素,取第二個圓環的10維向量作為特征向量的第11至第20個個元素,以此類推。這樣,特征點描述子即為410=40維向量:為了保證旋轉不變性,對特征向量實施排序操作。設D使關鍵點的特征向量,D1、D2、D3、D4分別為從中心向外第一、第二、第三、第四個圓環的特征向量,則D=(D1,D2,D3,D4),其中Di=(Di1,Di2,Di9,Di10),i1,4。首先標記出最內圓最大值出現的位置,即 dI1,dI2,dI9,dI10中的最大值,若dI1為最大值,則不需要做任何處理,若
26、最大值不是dI1,則進行如下操作:將D1、D2、D3、D4同時循環左移,直至D1中的最大值為特征向量D1中的第一位,設d17為向量D1中的最大值,則移動之后四個圓環的特征向量為Di=(di7,di8,,di10,di1,di2,,di6)。如果將每一個10維向量分別取向量的最大值并執行此步驟,則匹配的效果會大大降低。這樣操作保證了四個圓環旋轉相同的角度,等同于原算法中鄰域歸零的操作,從而保證了改進描述子具有選擇不變性。4.2 SIFT簡化算法將編好的程序輸入到VC+運行,具體的步驟為:第一步,動態文件加入要運行的DEBUG里面第二步,在options -directory里面加頭文件和lib
27、文件;在右側下拉框里面選include files,include files包含opencv安裝程序里的和gnuwin32里面的;同樣的lib文件也是同樣的方法,加到OPENCV和GUNWIN32里面。第三步,升級VC+運稈就可以了。實驗中分別處理了經過旋轉的兩幅圖片,如圖(1),圖(2),經過觀察與分析得出:兩幅圖像在經過旋轉后,利用SIFT簡化的算法提取的特征點是相同的: 圖(1)(圖標) 圖(2),圖標4.3 本章小結第5章 實驗結果及分析5.1 簡化算法不變性測試 為了驗證改進的SIFT算法的可行性和有效性,實驗驗證了在其旋轉、尺度、變換時的圖像匹配效果,并與原算法在匹配時間及匹配效
28、果上做對比。編程環境為OPENCV。5.2 描述子維數的選擇本論文在改進算法中需要確定的一個重要參數是四個同心圓環窗口的向量維數,即每個同心圓環窗口所要統計的梯度直方圖數目。例如,若每個同心圓環選擇的向量維度為8,則生成的特征向量的維度為88=32維。向量維數不是越大越好,選擇一個合適的向量維度可以提高查全率、正確率和降低時間復雜度。 5.3改進算法的時間復雜度 由于改進算子簡化了特征點描述子,在匹配效果上有一定的降低,但是大大降低了SIFT算子的維數,時間復雜度也降低了很多。更實用于海亮的數據搜索。5.4 本章小結 本文在總結了SIFT算子的優點的同時,針對其維數過高,不適用于海量數據匹配的
29、不足,提出了自己的改進方案。本人從改進描述子入手,因為特征點描述子的生成占居了整個算法處理的大部分時間。簡化的特征點描述子將原算法中均勻分布的矩形區域改為關鍵點為中心向外擴展的四個同心圓區域,生成關鍵點所需要計算的鄰域沒有變小,只是改進了鄰域的劃分方法。改進后的SIFT算子將特征點描述子的維數由128維降至40維。 致 謝 論文完成之際,首先衷心地感謝我的指導教師王妍瑋老師的諄諄教誨和悉心指導,在畢業設計的3個月時間里,王老師給了我極大的幫助。王老師知識豐富、思維敏捷,在學業上積極創新的開拓精神令我永生難忘。在畢業設計和畢業論文撰寫階段,王老師不僅在學習上給予我幫助,而且她的那種負責的精神和強
30、烈的責任感,對我今后的發展提出了指導性建議。王老師認真敬業的工作態度和為人師表的作風,體現了一個教育工作者的無私奉獻精神和科研工作者嚴謹的治學態度,這將使我在未來的工作和學習中受益終身。在此謹向尊敬的王老師致以我最誠摯的謝意。還要感謝華德學院電子信息工程系的所有教師,在學習和生活上你們都給予我最寶貴的意見和極大的幫助,還有我的指導員王明志教師,在平時的學習和生活中給予我的鼓勵和關心。 感謝我的父母,一直以來對我無私的關懷和付出,在面對各種困難時,給我支持的鼓勵!感謝所有關心我,幫助過我的朋友和同學!參考文獻1 王國美,陳孝威 SIFT特征匹配算法研究D.貴州大學計算機科學與技術學院:2007.
31、2 何文峰,查紅彬 基于平面特征的深度圖像配準D 北京大學:2006.3 馬頌德,張正友 計算機視覺計算理論與算法基礎M.北京:科學出版社,2003.4 于長江.高等畫法幾何學M北京:航空專業教材編審組,1983.5 Schmid C,Mohr R.Local grayvalue invariants for image retrievalJ.IEEE Transactiongs on Pattern Analysis and Machine Intelligence1997.6 K.Mikolajczyk.detection of local features invariant to af
32、fine transformationsC.Ph.D.thesis Institut National Polytechnique deGrenoble France.2002.7 David G.Lowe.Distinctive Image Features from Scale-Invariant KeypointsC.International Journal of Computer Vision,2004.8 David G.Lowe.Object recognition from Iocal scale-invariant featuresC.International Confer
33、enceon Computer Vision,CorfuGreece,1999.9 趙輝.基于特征點的圖像配準算法研究C.山東大學碩士學位論文.2006.附錄SIFT源程序代碼#include "utils.h"#include "imgfeatures.h"#include <cxcore.h>#include <math.h>int import_oxfd_features( char*, struct feature* );int export_oxfd_features( char*, struct feature*, i
34、nt );void draw_oxfd_features( IplImage*, struct feature*, int );void draw_oxfd_feature( IplImage*, struct feature*, CvScalar );int import_lowe_features( char*, struct feature* );int export_lowe_features( char*, struct feature*, int );void draw_lowe_features( IplImage*, struct feature*, int );void dr
35、aw_lowe_feature( IplImage*, struct feature*, CvScalar );int import_features( char* filename, int type, struct feature* feat )int n;switch( type )case FEATURE_OXFD:n = import_oxfd_features( filename, feat );break;case FEATURE_LOWE:n = import_lowe_features( filename, feat );break;default:fprintf( stde
36、rr, "Warning: import_features(): unrecognized feature" "type, %s, line %dn", _FILE_, _LINE_ );return -1;if( n = -1 )fprintf( stderr, "Warning: unable to import features from %s,"" %s, line %dn", filename, _FILE_, _LINE_ );return n;int export_features( char* fi
37、lename, struct feature* feat, int n )int r, type;if( n <= 0 | ! feat )fprintf( stderr, "Warning: no features to export, %s line %dn",_FILE_, _LINE_ );return 1;type = feat0.type;switch( type )case FEATURE_OXFD:r = export_oxfd_features( filename, feat, n );break;case FEATURE_LOWE:r = expo
38、rt_lowe_features( filename, feat, n );break;default:fprintf( stderr, "Warning: export_features(): unrecognized feature" "type, %s, line %dn", _FILE_, _LINE_ );return -1;if( r )fprintf( stderr, "Warning: unable to export features to %s,"" %s, line %dn", filenam
39、e, _FILE_, _LINE_ );return r;void draw_features( IplImage* img, struct feature* feat, int n )int type;if( n <= 0 | ! feat )fprintf( stderr, "Warning: no features to draw, %s line %dn",_FILE_, _LINE_ );return;type = feat0.type;switch( type )case FEATURE_OXFD:draw_oxfd_features( img, feat
40、, n );break;case FEATURE_LOWE:draw_lowe_features( img, feat, n );break;default:fprintf( stderr, "Warning: draw_features(): unrecognized feature" " type, %s, line %dn", _FILE_, _LINE_ );break;double descr_dist_sq( struct feature* f1, struct feature* f2 )double diff, dsq = 0;double
41、* descr1, * descr2;int i, d;d = f1->d;if( f2->d != d )return DBL_MAX;descr1 = f1->descr;descr2 = f2->descr;for( i = 0; i < d; i+ )diff = descr1i - descr2i;dsq += diff*diff;return dsq;int import_oxfd_features( char* filename, struct feature* features )struct feature* f;int i, j, n, d;d
42、ouble x, y, a, b, c, dv;FILE* file;if( ! features )fatal_error( "NULL pointer error, %s, line %d", _FILE_, _LINE_ );if( ! ( file = fopen( filename, "r" ) ) )fprintf( stderr, "Warning: error opening %s, %s, line %dn",filename, _FILE_, _LINE_ );return -1;if( fscanf( file,
43、 " %d %d ", &d, &n ) != 2 )fprintf( stderr, "Warning: file read error, %s, line %dn",_FILE_, _LINE_ );return -1;if( d > FEATURE_MAX_D )fprintf( stderr, "Warning: descriptor too long, %s, line %dn",_FILE_, _LINE_ );return -1;f = calloc( n, sizeof(struct featur
44、e) );for( i = 0; i < n; i+ )if( fscanf( file, " %lf %lf %lf %lf %lf ", &x, &y, &a, &b, &c ) != 5 )fprintf( stderr, "Warning: error reading feature #%d, %s, line %dn",i+1, _FILE_, _LINE_ );free( f );return -1;fi.img_pt.x = fi.x = x;fi.img_pt.y = fi.y = y;fi.
45、a = a;fi.b = b;fi.c = c;fi.d = d;fi.type = FEATURE_OXFD;for( j = 0; j < d; j+ )if( ! fscanf( file, " %lf ", &dv ) )fprintf( stderr, "Warning: error reading feature descriptor" " #%d, %s, line %dn", i+1, _FILE_, _LINE_ );free( f );return -1;fi.descrj = dv;fi.scl =
46、 fi.ori = 0;fi.class = 0;fi.fwd_match = fi.bck_match = fi.mdl_match = NULL;fi.mdl_pt.x = fi.mdl_pt.y = -1;fi.feature_data = NULL;if( fclose(file) )fprintf( stderr, "Warning: file close error, %s, line %dn",_FILE_, _LINE_ );free( f );return -1;*features = f;return n;int export_oxfd_features
47、( char* filename, struct feature* feat, int n )FILE* file;int i, j, d;if( n <= 0 )fprintf( stderr, "Warning: feature count %d, %s, line %sn",n, _FILE_, _LINE_ );return 1;if( ! ( file = fopen( filename, "w" ) ) )fprintf( stderr, "Warning: error opening %s, %s, line %dn&quo
48、t;,filename, _FILE_, _LINE_ );return 1;d = feat0.d;fprintf( file, "%dn%dn", d, n );for( i = 0; i < n; i+ )fprintf( file, "%f %f %f %f %f", feati.x, feati.y, feati.a,feati.b, feati.c );for( j = 0; j < d; j+ )fprintf( file, " %f", feati.descrj );fprintf( file, "
49、;n" );if( fclose(file) )fprintf( stderr, "Warning: file close error, %s, line %dn",_FILE_, _LINE_ );return 1;return 0;void draw_oxfd_features( IplImage* img, struct feature* feat, int n )CvScalar color = CV_RGB( 255, 255, 255 );int i;if( img-> nChannels > 1 )color = FEATURE_OXFD
50、_COLOR;for( i = 0; i < n; i+ )draw_oxfd_feature( img, feat + i, color );void draw_oxfd_feature( IplImage* img, struct feature* feat, CvScalar color )double m4 = feat->a, feat->b, feat->b, feat->c ;double v4 = 0 ;double e2 = 0 ;CvMat M, V, E;double alpha, l1, l2;cvInitMatHeader( &M
51、, 2, 2, CV_64FC1, m, CV_AUTOSTEP );cvInitMatHeader( &V, 2, 2, CV_64FC1, v, CV_AUTOSTEP );cvInitMatHeader( &E, 2, 1, CV_64FC1, e, CV_AUTOSTEP );cvEigenVV( &M, &V, &E, DBL_EPSILON );l1 = 1 / sqrt( e1 );l2 = 1 / sqrt( e0 );alpha = -atan2( v1, v0 );alpha *= 180 / CV_PI;cvEllipse( img
52、, cvPoint( feat->x, feat->y ), cvSize( l2, l1 ), alpha,0, 360, CV_RGB(0,0,0), 3, 8, 0 );cvEllipse( img, cvPoint( feat->x, feat->y ), cvSize( l2, l1 ), alpha,0, 360, color, 1, 8, 0 );cvLine( img, cvPoint( feat->x+2, feat->y ), cvPoint( feat->x-2, feat->y ),color, 1, 8, 0 );cvLine( img, cvPoint( feat->x, feat->y+2 ), cvPoint( feat->x, feat->y-2 ),color, 1, 8, 0 );int import_lowe_features( char* filename, struct feature* features )struct feature*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公益項目眾籌合同
- 會議場地租賃合同范文2025
- 世界衛生組織憲章:合同的精神、實踐與2025年的挑戰
- 市場營銷人員聘請合同變更協議
- 軟件許可合同可打印
- 顳下頜關節脫位護理查房
- 二手房買賣合同備案申請表
- 道路綠化養護合同范本
- 版倉儲租賃合同模板
- 一年級體育下冊 第八課換物賽跑教學設計
- 豬舍出租合同協議
- 《結膜炎診斷與治療》課件
- 智慧廣場《移多補少問題》(教學設計)-2024-2025學年一年級數學上冊青島版
- 2025東風汽車校招人才測評題庫
- 云南黔滇行2024-2025學年中考道德與法治試題(含答案)
- 吉林2025年03月長春新區面向社會公開選聘8名各產業招商辦公室負責人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 微風發電項目可行報告
- 醫院防雷電安全應急預案
- 2025年中小學生安全教育日知識競賽考試題(附答案)
- 2024年初級會計實務考試真題及答案(5套)
- 2025年4月自考00152組織行為學押題及答案
評論
0/150
提交評論