最近這些日子,我在中科院實習了一段時間,收獲了很多寶貴的知識和經驗,也認識了一些朋友,在這里感謝老師們對我的指導和建議。作為一名圖像處理專業的數學Geek,我很喜歡做關於圖像方面的算法研究,在這里把近幾年的角點特征匹配方法做個總結,和大家分享一下。
圖像匹配能夠應用的場合非常多,如目標跟蹤,檢測,識別,圖像拼接等,而圖像匹配最核心的技術就要屬角點匹配了,所謂角點匹配是指尋找兩幅圖像之間的特征像素點的對應關系,從而確定兩幅圖像的位置關系。
角點匹配可以分為以下四個步驟:
1.提取檢測子:在兩張待匹配的圖像中尋找那些最容易識別的像素點(角點),比如紋理豐富的物體邊緣點等。
2.提取描述子:對於檢測出的角點,用一些數學上的特征對其進行描述,如梯度直方圖,局部隨機二值特征等。
檢測子和描述子的常用提取方法有:sift, harris, surf, fast, agast, brisk, freak, brisk,orb等。
3.匹配:通過各個角點的描述子來判斷它們在兩張圖像中的對應關系。常用方法如 flann
4.去外點:去除錯誤匹配的外點,保留正確的內點。常用方法有Ransac, GTM。
我對上述這些常用的檢測子和描述子的性能和速度做了一個測試,以找出其中性價比最好的組合(不考慮后兩步)
圖一
圖二
上面兩幅圖是對上述部分檢測子與描述子進行測試的結果。
其中圖一和圖二的x坐標表示不同的檢測子與描述子的組合,從1到30分別對應
(surf、agast、brisk、fast、sift、orb)檢測子與 (brisk、agast、surf、sift、orb)描述子的線性組合,如第四組表示surf檢測子+sift描述子的組合。
圖一和圖二的y坐標表示一系列測試圖片組,每組由兩張圖組成,這些圖片都是質量較低的衛星地圖,約2000*2000像素,每組的兩張圖片是由不同衛星對地面上同一地區進行拍攝的。它們之間的關系可能包含旋轉,縮放,仿射變換,亮度變化,模糊,噪音等。從1到11的測試圖片組大概對應着以下變換關系:
1.強烈亮度變化
2.旋轉
3.仿射變換+尺度變化+旋轉
4.仿射變換+亮度變化+旋轉
5.仿射變換+噪音
6.模糊+亮度變化
7.旋轉+噪音
8.旋轉+尺度變化
9.亮度變化+旋轉+模糊+噪音
10. 亮度變化+旋轉+尺度變化
11. 亮度變化+旋轉+尺度變化+強烈噪音。
圖一的z坐標表示成功匹配的像素對的個數。圖二的z坐標表示所需計算時間。
從測試結果來看,orb檢測子與surf描述子配合的效果是最好的,不過速度也是最慢的。古老的sift和surf依然好用,速度也還是那么不給力。在不考慮旋轉和仿射變換的情況下,fast是很不錯的選擇,在小幅旋轉(20度內)的情況下,fast也還是有一定的容錯能力的。在旋轉變化和尺度變化方面,各家武功相差不多,雖然在理論上sift支持旋轉變化,不過測試中它並沒有表現出明顯的優勢。在噪音方面,sift和orb明顯強於其它算法;在亮度變化和仿射變換上,orb的魯棒性是最好的;綜合比較,orb的性價比在此次華山論劍中略勝一籌。
下面兩張圖是上面11組圖片的均值,從平均值來看,orb也是最好的